|
一:問題描述
按照文中單片機代碼編譯下載后,P1口LED不閃爍,一直亮。然后通過Keil uVision5軟件仿真,延時時間也不是期望的0.5s。請大家?guī)臀铱纯词窃趺椿厥拢?br />

二:硬件環(huán)境
STC12C2052AD //12MHz //P1口外接LED
采用定時器0的工作方式1寫一段延時5ms的函數(shù),然后調(diào)用延時函數(shù),使P1口外接的LED每0.5s閃爍一次。

三:軟件環(huán)境
Keil uVision5

四:示例代碼如下(采用查詢方法)
- #include <STC12C2052AD.H>
- //以下是采用定時器0的 5ms延時函數(shù)
- void delay(unsigned int i) //延時程序,i是形式參數(shù)
- {
- TMOD = 0X01; //設(shè)定定時器0為工作方式1
- IE = 0X00; //禁止中斷
- TR0 = 1; //啟動定時器0
- while(i != 0) //執(zhí)行i次循環(huán)
- {
- TH0 = 0XEC;
- TL0 = 0X78; //設(shè)定計數(shù)脈沖為XX次
- while(TF0 != 1); //計時時間不到,等待;計時時間到,計數(shù)溢出位置1,即TF0=1
- i--; //循環(huán)次數(shù)減1
- }
- TR0 = 0; //關(guān)閉定時器0
- }
- //以下是主程序
- void main()
- {
- for(;;)
- {
- P1 = 0X00; //P1口LED全亮
- delay(100); //延時100*5ms=0.5s
- P1 = 0XFF; //P1口LED全滅
- delay(100); //延時100*5ms=0.5s
- }
- }
復(fù)制代碼
五:定時器0的工作方式1初值計算如下:
工作方式1的定時時間.png (85.39 KB, 下載次數(shù): 40)
下載附件
2023-5-18 01:17 上傳

六:Keil設(shè)置如下:
Keil設(shè)置.png (23.46 KB, 下載次數(shù): 39)
下載附件
2023-5-18 01:19 上傳

七:軟件仿真如下:
軟件仿真.png (58.46 KB, 下載次數(shù): 45)
下載附件
2023-5-18 01:19 上傳

八:自己挖的坑自己填!
仔細對照書中代碼,發(fā)現(xiàn)少了一句,如下:
少了一句,將計數(shù)溢出位清零.png (106.2 KB, 下載次數(shù): 51)
下載附件
2023-5-18 13:06 上傳

九:程序重新編譯下載后,雖然LED閃爍了,但是軟件仿真結(jié)果還不是期望的0.5s,不知道怎么回事?希望大家?guī)臀铱纯矗《嘀x了!
不是期望的0.5s.png (62.21 KB, 下載次數(shù): 36)
下載附件
2023-5-18 13:08 上傳
|
|