標題: 51初學小白~請問定時器為什么不能觸發(fā) [打印本頁]

作者: zjm001    時間: 2022-8-25 11:30
標題: 51初學小白~請問定時器為什么不能觸發(fā)
RT,剛剛學習51的定時器,想做一個每隔50MS閃燈的程序,但LED卻常亮,編譯是正常的,求問各位老師問題出在哪里了幫忙指點一下,謝謝定時器初始化方法是STC-ISP生成的 50MS 12T 16位自動重載

  1. #include <STC89C5xRC.H>
  2. void Timer0Init();
  3. int i=0;
  4. void main(){
  5.     Timer0Init();
  6.     P22=1;
  7.     while(1);
  8. }
  9. void Timer0Init()                //50MS@11.0592MHz{
  10.     AUXR &= 0x7F;               
  11.     TMOD &= 0xF0
  12.     TL0 = 0x00;               
  13.     TH0 = 0x4C;               
  14.     TF0 = 0;       
  15.     TR0 = 1;       
  16.     ET0=1
  17.     EA=1
  18. }
  19. void c_led() interrupt 1{
  20.     TL0 = 0x00;               
  21.     TH0 = 0x4C;       
  22.     TF0 = 0;               
  23.        
  24.     i+=1;
  25.     if(i>=65534){
復制代碼




作者: Hephaestus    時間: 2022-8-25 12:39
用手甩一下電路板,如果看到一條連續(xù)的亮線,說明沒閃。如果看到的是不連續(xù)的亮點,那就是已經閃了,但是你的眼睛無法分辨50ms這么快的速度。
作者: hhh402    時間: 2022-8-25 12:57
你確定可以分辨出50ms閃爍?改成500ms閃爍吧

作者: robinsonlin    時間: 2022-8-25 13:01
1,int類型的i,能夠累加到65534么?
2,定時器中斷是50ms的間隔,50ms翻轉一次P22口的狀態(tài),你確定你的肉眼能否分辨100ms以內的閃爍?
作者: 188610329    時間: 2022-8-25 13:02
時間太短,閃了你也看不出來,500ms翻轉一次比較好,這是其1,其二,stc89系列,模式0是13位定時器方式,那么,你所以為的50ms,其實只有6ms出頭,那么等于就是常亮了。
作者: zjm001    時間: 2022-8-25 13:10
解決了,是89c52沒有16位定時器重載,選擇16位就好了
作者: sttt300    時間: 2022-8-25 13:16
這50ms已經超出了正常人能看到的范圍了,改1秒試試
作者: lkc8210    時間: 2022-8-25 13:19
就算你有鈦合金氪石眼你也看不到50MS的閃燈閃爍
作者: xxxevery    時間: 2022-8-25 13:48
如果你用的是stc89c5x的芯片,哪有16位自動重載這個模式,那么TMOD &= 0XF0這一句設定肯定不合適,在應用前還是先搞清楚用的是啥芯片,再研究一下對應的pdf
作者: Tuier    時間: 2022-8-25 14:31
定時器模式設置不對。將TMOD &=0xf0改為TMOD =0X01試試。建議不要用ISP中的定時器設置程序,很多錯誤




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1