久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

采用單片機(jī)定時(shí)器0的工作方式1寫(xiě)一段5ms的延時(shí)函數(shù),請(qǐng)大家?guī)臀铱纯茨睦锍隽藛?wèn)題?

[復(fù)制鏈接]
ID:645485 發(fā)表于 2023-5-18 01:20 | 顯示全部樓層 |閱讀模式
一:?jiǎn)栴}描述
按照文中單片機(jī)代碼編譯下載后,P1口LED不閃爍,一直亮。然后通過(guò)Keil uVision5軟件仿真,延時(shí)時(shí)間也不是期望的0.5s。請(qǐng)大家?guī)臀铱纯词窃趺椿厥拢?br />
二:硬件環(huán)境
STC12C2052AD  //12MHz  //P1口外接LED
采用定時(shí)器0的工作方式1寫(xiě)一段延時(shí)5ms的函數(shù),然后調(diào)用延時(shí)函數(shù),使P1口外接的LED每0.5s閃爍一次。

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

四:示例代碼如下(采用查詢方法)
  1. #include <STC12C2052AD.H>

  2. //以下是采用定時(shí)器0的 5ms延時(shí)函數(shù)
  3. void delay(unsigned int i)      //延時(shí)程序,i是形式參數(shù)
  4. {
  5.         TMOD = 0X01;                 //設(shè)定定時(shí)器0為工作方式1
  6.         IE    = 0X00;                 //禁止中斷
  7.         TR0 = 1;                    //啟動(dòng)定時(shí)器0
  8.         while(i != 0)               //執(zhí)行i次循環(huán)
  9.         {
  10.                 TH0 = 0XEC;
  11.                 TL0 = 0X78;               //設(shè)定計(jì)數(shù)脈沖為XX次
  12.                 while(TF0 != 1);         //計(jì)時(shí)時(shí)間不到,等待;計(jì)時(shí)時(shí)間到,計(jì)數(shù)溢出位置1,即TF0=1
  13.                 i--;                      //循環(huán)次數(shù)減1
  14.         }
  15.         TR0 = 0;                   //關(guān)閉定時(shí)器0
  16. }

  17. //以下是主程序
  18. void main()
  19. {
  20.         for(;;)
  21.         {
  22.                 P1 = 0X00;          //P1口LED全亮
  23.                 delay(100);         //延時(shí)100*5ms=0.5s
  24.                 P1 = 0XFF;         //P1口LED全滅
  25.                 delay(100);         //延時(shí)100*5ms=0.5s
  26.         }
  27. }
復(fù)制代碼

五:定時(shí)器0的工作方式1初值計(jì)算如下:
工作方式1的定時(shí)時(shí)間.png

六:Keil設(shè)置如下:
Keil設(shè)置.png

七:軟件仿真如下:
軟件仿真.png

八:自己挖的坑自己填!
仔細(xì)對(duì)照書(shū)中代碼,發(fā)現(xiàn)少了一句,如下:
少了一句,將計(jì)數(shù)溢出位清零.png

九:程序重新編譯下載后,雖然LED閃爍了,但是軟件仿真結(jié)果還不是期望的0.5s,不知道怎么回事?希望大家?guī)臀铱纯矗《嘀x了!
不是期望的0.5s.png
回復(fù)

使用道具 舉報(bào)

ID:301191 發(fā)表于 2023-5-18 17:37 | 顯示全部樓層
頂一下
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-18 18:41 | 顯示全部樓層
頂啥呢,有時(shí)間幫我看看嘍,分析一下,我是真沒(méi)轍了。先感謝一下!
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-5-18 20:54 | 顯示全部樓層
tongguan123 發(fā)表于 2023-5-18 18:41
頂啥呢,有時(shí)間幫我看看嘍,分析一下,我是真沒(méi)轍了。先感謝一下!

樓主這個(gè)定時(shí)器用法是哪個(gè)老師教的?
  1. #include <STC12C2052AD.H>

  2. void Timer0Init(void)                //5毫秒@12.000MHz
  3. {
  4.         AUXR &= 0x7F;                //定時(shí)器時(shí)鐘12T模式
  5.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  6.         TMOD |= 0x01;                //設(shè)置定時(shí)器模式
  7.         TL0 = 0x78;                //設(shè)置定時(shí)初始值
  8.         TH0 = 0xEC;                //設(shè)置定時(shí)初始值
  9.         TF0 = 0;                //清除TF0標(biāo)志
  10.         TR0 = 1;                //定時(shí)器0開(kāi)始計(jì)時(shí)
  11. }


  12. //以下是主程序
  13. void main()
  14. {
  15.         unsigned char num;
  16.         Timer0Init();
  17.         while(1)
  18.         {
  19.                 if(TF0)
  20.                 {
  21.                         TF0=0;
  22.                         TL0 = 0x78;                //設(shè)置定時(shí)初始值
  23.                         TH0 = 0xEC;                //設(shè)置定時(shí)初始值
  24.                         num++;
  25.                         if(num==100)
  26.                         {
  27.                                 num=0;
  28.                                 P1=~P1;//P1口取反
  29.                         }
  30.                 }       
  31.         }
  32. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:1073939 發(fā)表于 2023-5-19 09:14 | 顯示全部樓層
軟件仿真使用stc芯片有問(wèn)題,要改用通用芯片。

評(píng)分

參與人數(shù) 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:123289 發(fā)表于 2023-5-19 09:28 | 顯示全部樓層
1、定時(shí)器的時(shí)鐘源是晶振,所以需以根據(jù)晶振的頻率不計(jì)算時(shí)間常數(shù)。
2、while(TF0 != 1);         是等待計(jì)數(shù)溢出位TF=1,是可以等到的,但它不會(huì)自動(dòng)清0,也即從此后一直為1。因?yàn)橐院蟮膚hile(TF0 != 1)會(huì)被路過(guò)。
3、是外話。這種程序方式延時(shí),嚴(yán)重占用CPU資源,與DELAY并無(wú)二樣,失去了定時(shí)器的設(shè)計(jì)初衷。
4、較好的做法是,將時(shí)常數(shù)計(jì)算并設(shè)計(jì)到5ms,起動(dòng)中斷。如此每5ms產(chǎn)生一次中斷,在中斷服務(wù)中做個(gè)標(biāo)記B5MS。主程序憑B5MS標(biāo)記處理事件,完成后清除B5MS標(biāo)記。如果處理的事件用時(shí)不長(zhǎng),如僅開(kāi)關(guān)一個(gè)燈。可以不用B5MS標(biāo)記,而直接在中斷服務(wù)程序中處理。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2023-5-19 10:09 | 顯示全部樓層
可能是Keil對(duì)STC12的速度有點(diǎn)誤會(huì)
設(shè)定500ms,仿真125ms,快了4倍
把12M改為3Mhz就行了
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 11:40 | 顯示全部樓層
wulin 發(fā)表于 2023-5-18 20:54
樓主這個(gè)定時(shí)器用法是哪個(gè)老師教的?
你好,大俠:        首先非常感謝你花時(shí)間回答我的問(wèn)題,再次表示衷心的感謝!通過(guò)對(duì)你提供的代碼進(jìn)行編譯下載后,P1口的LED燈也確實(shí)閃爍了,但我對(duì)你的代碼在Keil軟件中仿真,發(fā)現(xiàn)時(shí)間好像還不是期望的0.5s,也不知是我仿真方法的問(wèn)題,還是怎么回事?圖片如下:
1.png     2.png 4.png

       其次呢,關(guān)于示例代碼我也是參考別的資料的,原本它使用的是AT的單片機(jī),里面沒(méi)有這個(gè)關(guān)于輔助寄存器AUXR的配置,但我確實(shí)使用的是STC12C2052AD,我的示例代碼中,沒(méi)有對(duì)其進(jìn)行配置,那默認(rèn)值就是0,即復(fù)位后定時(shí)器0和定時(shí)器1就是傳統(tǒng)8051,即12分頻。所以沒(méi)有配置這個(gè)寄存器,好像也沒(méi)關(guān)系,但最好還是進(jìn)行配置,你說(shuō)對(duì)吧?
3.png

      然后你能不能對(duì)你的代碼仿真試一下,或編譯下載試試,看看到底是不是期望的0.5s。我這里沒(méi)有合適的測(cè)量工具,只能寄希望于你了。當(dāng)然是在你有時(shí)間并且愿意的情況下。
      最后,還是要感謝你無(wú)私的分享與幫助,無(wú)以言表,只能祝你工作順利、開(kāi)開(kāi)心心!

回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 11:42 | 顯示全部樓層
ydatou 發(fā)表于 2023-5-19 09:14
軟件仿真使用stc芯片有問(wèn)題,要改用通用芯片。
Really?這個(gè)我還真不知道!
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 11:45 | 顯示全部樓層
lkc8210 發(fā)表于 2023-5-19 10:09
可能是Keil對(duì)STC12的速度有點(diǎn)誤會(huì)
設(shè)定500ms,仿真125ms,快了4倍
把12M改為3Mhz就行了
這是什么道理?以前有遇到過(guò)同類問(wèn)題嗎???
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 11:48 | 顯示全部樓層
ydatou 發(fā)表于 2023-5-19 09:14
軟件仿真使用stc芯片有問(wèn)題,要改用通用芯片。

你以前處理過(guò)類似的問(wèn)題嗎?
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 12:03 | 顯示全部樓層
yzwzfyz 發(fā)表于 2023-5-19 09:28
1、定時(shí)器的時(shí)鐘源是晶振,所以需以根據(jù)晶振的頻率不計(jì)算時(shí)間常數(shù)。
2、while(TF0 != 1);         是等待 ...
首先感謝分享與幫助!我是最近學(xué)習(xí)學(xué)到定時(shí)器這里,想充分理解它,查詢功能和中斷功能都要學(xué)習(xí)。實(shí)際使用中,當(dāng)然會(huì)用定時(shí)器的中斷功能,這里使用的查詢功能,產(chǎn)生延時(shí)的效果,只是理解寄存器的相關(guān)配置。
1:定時(shí)功能的計(jì)數(shù)脈沖選擇的是內(nèi)部時(shí)鐘(或分頻、或不分頻)得到;
     計(jì)數(shù)功能的計(jì)數(shù)脈沖當(dāng)然是外部脈沖信號(hào)了。
2:定時(shí)器0的計(jì)數(shù)溢出標(biāo)志位TF0在計(jì)數(shù)溢出后,如果要產(chǎn)生延時(shí),需要軟件清零,然后再定義個(gè)循環(huán)變量,達(dá)到延時(shí)效果。
回復(fù)

使用道具 舉報(bào)

ID:94253 發(fā)表于 2023-5-19 12:11 | 顯示全部樓層
STC12C2052AD應(yīng)該是1T單片機(jī)吧,計(jì)數(shù)初值搞錯(cuò)了
回復(fù)

使用道具 舉報(bào)

ID:213173 發(fā)表于 2023-5-19 12:13 | 顯示全部樓層
tongguan123 發(fā)表于 2023-5-19 11:40
你好,大俠:        首先非常感謝你花時(shí)間回答我的問(wèn)題,再次表示衷心的感謝!通過(guò)對(duì)你提供的代碼進(jìn)行編 ...

這個(gè)程序在實(shí)物上運(yùn)行沒(méi)有任何問(wèn)題,AUXR &= 0x7F;也可以省略,其默認(rèn)就是12T。Keil軟件仿真STC1T單片機(jī)結(jié)果不一定符合實(shí)際。
回復(fù)

使用道具 舉報(bào)

ID:77589 發(fā)表于 2023-5-19 14:11 | 顯示全部樓層
好久沒(méi)用51了,圍觀一下
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 14:13 | 顯示全部樓層
lym_tb_1 發(fā)表于 2023-5-19 12:11
STC12C2052AD應(yīng)該是1T單片機(jī)吧,計(jì)數(shù)初值搞錯(cuò)了
5.png
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 14:15 | 顯示全部樓層
wulin 發(fā)表于 2023-5-19 12:13
這個(gè)程序在實(shí)物上運(yùn)行沒(méi)有任何問(wèn)題,AUXR &= 0x7F;也可以省略,其默認(rèn)就是12T。Keil軟件仿真STC1T單片機(jī) ...
再次感謝指導(dǎo)!
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 14:59 | 顯示全部樓層
tongguan123 發(fā)表于 2023-5-19 11:42
Really?這個(gè)我還真不知道!
確實(shí)如你所說(shuō),我將設(shè)備改成傳統(tǒng)8051,不管是用我的代碼,還是上面一位大俠提供的代碼,在Keil里面軟件仿真,都是我所期望的0.5S。我的代碼仿真如下: 1.png 2.png


大俠的代碼仿真如下:

1.png



回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 15:08 | 顯示全部樓層
wulin 發(fā)表于 2023-5-18 20:54
樓主這個(gè)定時(shí)器用法是哪個(gè)老師教的?
你好,我聽(tīng)從上面一位熱心朋友的建議,將STC改成傳統(tǒng)8051單片機(jī),然后使用你的代碼軟件仿真,得到了期望的0.5s.效果如下:
11.png 2.png


回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 15:10 | 顯示全部樓層
tongguan123 發(fā)表于 2023-5-19 11:42
Really?這個(gè)我還真不知道!
再次感謝分享!
回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 15:24 | 顯示全部樓層
ydatou 發(fā)表于 2023-5-19 09:14
軟件仿真使用stc芯片有問(wèn)題,要改用通用芯片。

不好意思,我剛才自己給自己回復(fù)了,沒(méi)傳達(dá)給你我的謝意,again。首先感謝你的分享與建議!按照你的方法,得到了期望的延時(shí)效果(0.5s),
使用我的代碼進(jìn)行軟件仿真,效果如下:
1.png 2.png


使用上面一位大俠代碼進(jìn)行軟件仿真,效果如下:
11.png 2.png



回復(fù)

使用道具 舉報(bào)

ID:645485 發(fā)表于 2023-5-19 16:01 | 顯示全部樓層
ydatou 發(fā)表于 2023-5-19 09:14
軟件仿真使用stc芯片有問(wèn)題,要改用通用芯片。
感謝你的話不知被我回復(fù)到哪里去了?我暈!根據(jù)你的方法,問(wèn)題解決了。再次感謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久国产精99精产国高潮 | 国产精品日韩欧美一区二区三区 | 欧美日韩综合一区 | 成人精品一区 | 亚洲精品成人网 | 精品伊人久久 | 欧美一区二区三区国产精品 | 欧美日韩最新 | 99精品国产一区二区三区 | 日韩视频在线一区二区 | 欧美久久久久久久 | 中文字幕一级毛片视频 | 91九色在线观看 | 91视频在线 | 精品国产久 | 99小视频| 99在线免费观看视频 | 欧美一区二不卡视频 | 国产精品一区二区在线 | 国产 欧美 日韩 一区 | 天天艹逼网| av黄色国产 | 羞羞色在线观看 | 欧美黄色网| 美国一级片在线观看 | 欧美视频网 | 一区二区国产在线 | 久久国产一区 | 久久久国产精品 | h视频在线播放 | 午夜视频在线免费观看 | 欧美日韩在线一区二区三区 | 亚洲欧美一区二区三区1000 | 亚洲欧洲成人av每日更新 | 毛片一区二区三区 | 亚州中文 | 日韩免费视频 | 颜色网站在线观看 | 91一区二区 | 欧美国产精品久久久 | 久久精品亚洲精品国产欧美 |