找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10723|回復(fù): 22
收起左側(cè)

STC15W204S 8腳封裝的單片機,2個定時器測試代碼,我太難啦

  [復(fù)制鏈接]
ID:475031 發(fā)表于 2020-2-27 20:07 | 顯示全部樓層 |閱讀模式
STC15W204S 8腳封裝的單片機,2個定時器測試代碼,這個資料太少了,我也東拼西湊組合起來才弄明白,我太喜歡這個小單片機。,麻雀雖小五臟俱全,一些小功能,就不需要搞什么89C51了,直接它可以搞定。
至于需要大功能動作多復(fù)雜的的,可以用一個89C51做主控芯片。,外圍加若干STC15W204S芯片來搭配,
功能強大。不輸于STM32哦
電路簡潔,代碼也簡單。適合新手初學(xué)者。

545454545.jpg

單片機源程序如下:

  1. //=========================================================
  2. //1. 晶振為11.0592M,每計數(shù)一次用時12/11.0592M=1.085us
  3. //2. TMOD取0x10,即模式1——16位計數(shù)器(0~65535)
  4. //3. 計時2ms,1ms=921.5,則2ms/1.085us=1843,故TH1=(65536-1843)/256,TL1=(65536-1843)%256
  5. //65536微秒(μs)=最大定時65.536毫秒(ms)
  6. //12MHZ的51單片機,定時器最大只能定時65.535ms,所以要定時500ms的時間,
  7. //需要產(chǎn)生10次50ms的定時。
  8. //步驟如下:
  9. //1、每隔50ms定時器中斷溢出,計數(shù)+1。
  10. //2、當(dāng)計數(shù)達(dá)到10次時,便產(chǎn)生了500ms的定時啦,然后,你自己根據(jù)你的設(shè)計,需要讓單片機做什么就自己寫些什么(比如讓某個io口取反)
  11. //3、計數(shù)達(dá)到10次后,不要忘了初始化計數(shù)。
  12. //最后給點建議:1、要讓定時器計數(shù)50ms,只能在定時器的工作方式1下進(jìn)行;
  13. //2、定時器初值: TH0 = 0x3C; TL0 = 0x0B0;(我使用的是定時器0)
  14. //定時1ms,0xfc18 == 64536
  15. //=========================================================

  16. /************1s 定時器+中斷控制led翻轉(zhuǎn) ***********/
  17. #include<STC15W.h>
  18. //#include "reg51.h"
  19. //#include "reg52.h"
  20. //#ifndef __STC15F2K60S2_H_
  21. //#define __STC15F2K60S2_H_
  22. #include <intrins.h>
  23. typedef unsigned int u16;
  24. typedef unsigned char u8;
  25. #define uchar unsigned char
  26. #define uint unsigned int

  27. sbit led = P3^0;
  28. sbit led2 = P3^3;




  29. void timer_init()
  30.         {
  31.     //設(shè)置定時器的初始計數(shù)值
  32.     //計算方法
  33.     //假設(shè)定時器為1ms,一個機器周期為 1/單片機的晶振頻率  即: 1/12M = 1us
  34.     //而1個機器周期 = 12個時鐘周期 所以: n x 機器周期 = 1ms ===> n x 1us = 1ms
  35.     //所以n = 1000,也就是經(jīng)過1000個機器周期,定時器要溢出(從0開始計數(shù))
  36.     //所以定時器的初始值為65535 - 1000 + 1 = 64536 ===> 0xFC18,拆分成TH0 = 0xFC; TL0 = 0x18;
  37.                 TMOD |= 0x01;  //TMOD |= 0x01;等價于TMOD = TMOD | 0x01; // 將TMOD的最低位置1,
  38.                                //也即表示將定時/計數(shù)器的其工作方式調(diào)整為方式1(16位定時器/計數(shù)器)。
  39.                                //0x00方式0 13位計數(shù)器
  40.                                                                         //0x01方式1 16位計數(shù)器
  41.                                                                         //0x10方式2 自動重裝8位計數(shù)器
  42.                                                                         //0x11方式3 T0分為2個8位獨立計數(shù)器,T1為無中斷重裝8位計數(shù)器
  43. //                &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
  44.                                                                         //程序運行中TMOD |=0x01不會改變其它位的狀態(tài),
  45.                                                                         //TMOD =0x01會改變其它位的狀態(tài)。
  46.                                                                         //比如,原先TMOD = 0x10(二進(jìn)制數(shù)00010000的第4位置1),
  47.                                                                         //程序運行中為了讓TMOD的最低位也置1,但又不改變第4位的狀態(tài),
  48.                                                                         //那么,使用TMOD |=0x01,這樣TMOD 變成 0x11,
  49.                                                                         //即保留了第4位的狀態(tài),如果使用TMOD =0x01第4位的狀態(tài)就被覆蓋了。
  50.     TH0 = (65536-1843)/256;   //12M晶振1ms這樣TH0 = 0xFC; TL0 = 0x18; 11.0592M晶振1ms這樣TH0 = (65536-1843)/256;
  51.     TL0 = (65536-1843)%256;   //12M晶振1ms這樣TH0 = 0xFC; TL0 = 0x18; 11.0592M晶振1ms這樣(TL0 =65536-1843)%256;
  52.                 ET0 = 1; //T0中斷   
  53.     TR0 = 1;//啟動T0定時器
  54.     EA = 1;  //總中斷開關(guān)
  55. }
  56.         

  57. void timer2_init()
  58.         {
  59. TMOD |= 0x01;  //TMOD |= 0x01;等價于TMOD = TMOD | 0x01; // 將TMOD的最低位置1,
  60.         AUXR |= 0x04;                //定時器時鐘1T模式
  61.         T2L = 0xF5;                //設(shè)置定時初值
  62.         T2H = 0xFF;                //設(shè)置定時初值
  63.         IE2 |= 0x04;  //開定時器2中斷
  64.         AUXR |= 0x10;                //定時器2開始計時
  65. EA = 1;  //總中斷開
  66. }









  67. void main(){
  68.     timer_init();
  69.           timer2_init();
  70.     while(1);
  71. }

  72. void trigger_timer0() interrupt 1 //定時器中斷0;
  73.         
  74. {
  75.     static u16 i = 0;
  76.     TH0 = (65536-1843)/256;
  77.     TL0 = (65536-1843)%256;
  78.     i++;//計數(shù)
  79.     if( i == 500 ) //這里1000ms=1秒
  80.                         {
  81.         i = 0;//計數(shù)清零
  82.         led = ~led;//時間到 LED翻轉(zhuǎn),形成閃爍
  83.     }
  84. }


  85. void trigger_timer2() interrupt 12 //定時器中斷2;
  86.         
  87. {
  88.     static u16 v = 0;
  89.         T2L = 0xF5;                //設(shè)置定時初值
  90.         T2H = 0xFF;                //設(shè)置定時初值
  91.     v++;//計數(shù)
  92.     if( v == 500 ) //這里1000ms=1秒
  93.                         {
  94.         led2 = ~led2;//時間到 LED翻轉(zhuǎn),形成閃爍
  95.     }
  96. }



復(fù)制代碼



STC15W204S單片機原理圖.jpg
STC15W204S-8腳單片機.jpg
STC15W204S尺寸圖.JPG
IMG_20200227_200221(1).jpg
IMG_20200227_200123.jpg
IMG_20200227_200107.jpg

評分

參與人數(shù) 2黑幣 +62 收起 理由
STC莊偉 + 12
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:475031 發(fā)表于 2020-2-27 20:10 | 顯示全部樓層
STC15W204S兩個定時器測試
忘記上傳完整代碼了,這傳上
STC15W204S兩個定時器測試.rar (34.72 KB, 下載次數(shù): 148)


回復(fù)

使用道具 舉報

ID:475031 發(fā)表于 2020-2-27 20:20 | 顯示全部樓層
自制電路板.png
回復(fù)

使用道具 舉報

ID:535242 發(fā)表于 2020-2-27 21:19 | 顯示全部樓層
過來支持一下
回復(fù)

使用道具 舉報

ID:693716 發(fā)表于 2020-2-27 21:43 | 顯示全部樓層
我的簡介相同,這個小芯片確實不錯,而且除了IO資源少了點外,運行速度比89C51快的多,如果擴(kuò)展IO,可用74HC595
回復(fù)

使用道具 舉報

ID:87000 發(fā)表于 2020-2-27 22:18 | 顯示全部樓層
性價比不如STM32F0系列
回復(fù)

使用道具 舉報

ID:72649 發(fā)表于 2021-10-7 08:06 | 顯示全部樓層
能不能做個能調(diào)用任意參數(shù)的延時程序?
回復(fù)

使用道具 舉報

ID:255559 發(fā)表于 2021-12-2 09:45 | 顯示全部樓層
好帖子,講的非常細(xì),支持一下
回復(fù)

使用道具 舉報

ID:983947 發(fā)表于 2021-12-3 13:14 | 顯示全部樓層
這種小芯片的實用價值很高,很多地方都可以用得上,成本也低!
回復(fù)

使用道具 舉報

ID:63317 發(fā)表于 2022-7-13 05:49 | 顯示全部樓層
講的非常細(xì),支持一下
回復(fù)

使用道具 舉報

ID:496636 發(fā)表于 2022-7-13 19:02 | 顯示全部樓層
hj08102 發(fā)表于 2020-2-27 21:43
我的簡介相同,這個小芯片確實不錯,而且除了IO資源少了點外,運行速度比89C51快的多,如果擴(kuò)展IO,可用74HC ...

74HC595這個移位寄存器如果只是用在顯示上,是可以用的,如果用在開關(guān)量輸出上,安全性要求高,就不能用,如果數(shù)據(jù)傳輸過程過程中出點差錯,就會導(dǎo)致輸出錯誤,而數(shù)據(jù)傳輸沒有較驗,就是大的弱點。如輸出驅(qū)動閥門的開關(guān),如果某個閥門開錯了,那是要發(fā)生生產(chǎn)事故的。
回復(fù)

使用道具 舉報

ID:1051955 發(fā)表于 2022-11-14 18:45 | 顯示全部樓層
說的很祥細(xì),好理解,受教了
回復(fù)

使用道具 舉報

ID:97678 發(fā)表于 2022-11-15 09:17 | 顯示全部樓層
可以寫一個ADC采集程序嗎?
回復(fù)

使用道具 舉報

ID:919912 發(fā)表于 2022-11-25 13:55 | 顯示全部樓層
鬼推磨 發(fā)表于 2020-2-27 20:10
STC15W204S兩個定時器測試
忘記上傳完整代碼了,這傳上

非常棒
回復(fù)

使用道具 舉報

ID:632514 發(fā)表于 2022-11-25 23:16 | 顯示全部樓層
鬼推磨 發(fā)表于 2020-2-27 20:10
STC15W204S兩個定時器測試
忘記上傳完整代碼了,這傳上

樓主你這代碼用keil編譯不通過報錯怎么回事?
回復(fù)

使用道具 舉報

ID:1087674 發(fā)表于 2023-7-7 23:02 來自手機 | 顯示全部樓層
請問樓主,我要是延時350毫秒,怎么寫呢?這個單時鐘的不懂
回復(fù)

使用道具 舉報

ID:272119 發(fā)表于 2023-7-8 08:54 | 顯示全部樓層
好久沒有用STC 做案子了,最近和之后一段時間我做小案子基本會用CH32V003,這貨價格低的離譜但I(xiàn)O和性能都很不錯.
回復(fù)

使用道具 舉報

ID:1053359 發(fā)表于 2023-7-10 10:38 | 顯示全部樓層
支持你,,,單片機開發(fā)有你更精彩
回復(fù)

使用道具 舉報

ID:1087927 發(fā)表于 2023-7-10 11:00 | 顯示全部樓層
qq603599910 發(fā)表于 2023-7-8 08:54
好久沒有用STC 做案子了,最近和之后一段時間我做小案子基本會用CH32V003,這貨價格低的離譜但I(xiàn)O和性能都很不 ...

X寶搜下,果然。
你引起我好奇心了。搞幾片玩下。
回復(fù)

使用道具 舉報

ID:464755 發(fā)表于 2023-7-10 18:34 | 顯示全部樓層
qq603599910 發(fā)表于 2023-7-8 08:54
好久沒有用STC 做案子了,最近和之后一段時間我做小案子基本會用CH32V003,這貨價格低的離譜但I(xiàn)O和性能都很不 ...

開發(fā)環(huán)境不錯,比KEIL強多了,就是要裝晶振,也不方便,我還是喜歡內(nèi)置的,測試最好是DIP的,我現(xiàn)在用8G1K08比較多,DIP8 DIP16的都有,裝個插座,好焊好換。
回復(fù)

使用道具 舉報

ID:712097 發(fā)表于 2023-8-5 11:41 | 顯示全部樓層
jovew 發(fā)表于 2022-11-15 09:17
可以寫一個ADC采集程序嗎?

這款芯片不支持ADC,型號后帶A的才支持ADC,例如STC8G1K08A
回復(fù)

使用道具 舉報

ID:910171 發(fā)表于 2025-1-31 19:10 | 顯示全部樓層
你這個定時器初值設(shè)置好像有點問題吧?恰巧我也在看STC15W204S單片機的資料,因為我打算用它diy一個電路。
STC15W204S是個1T的單片機,使用內(nèi)部高精度RC時鐘,時鐘頻率在5M到35M之間可選擇,選擇的方法是在燒錄的時候在STC-ISP燒錄軟件里面選擇。
并且, STC15W204S的系統(tǒng)時鐘跟主時鐘的關(guān)系,要用特殊功能寄存器CLK_DIV進(jìn)行設(shè)定,默認(rèn)情況下,它是一個1T的單片機,就是一個機器周期就等于一個時鐘周期。你那個寄存器的算法,硬套12T單片機的算法,恐怕沒法實現(xiàn)正確的定時。
回復(fù)

使用道具 舉報

ID:255559 發(fā)表于 2025-5-1 23:24 | 顯示全部樓層
謝謝分享,剛好有這個芯片,用這個實物測試了,定時器0可以正常,定時器2好像不運行。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表