微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 郭天祥51学习板中断时间问题求教

郭天祥51学习板中断时间问题求教

时间:10-02 整理:3721RD 点击:
我写了个流水灯的程序,每秒亮下一个LED灯,我看了下晶振,11.0592MHZ,一个机器周期应该约等于1US,我50MS进一次中断,20次灯移动一次亮度。但是运行结果发现大概是0.1s就移动一次,这是为什么呢?
具体程序如下:

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define        uchar        unsigned char
  4. #define        uint         unsigned int
  5. uchar        temp,count;
  6. void main()
  7. {                 
  8.         TH0=(65536-50000)/256;
  9.         TL0=(65536-50000)%256;
  10.         EA=1;
  11.         ET0=1;
  12.         TR0=1;
  13.         temp=0xfe;
  14.                
  15.         while(1)
  16.         {        
  17.                 P1=temp;        
  18.         }
  19. }

  20. void time0() interrupt 1
  21. {
  22.         TH0=(65536-50000)/256;
  23.         TL0=(65536-50000)%256;
  24.         count++;
  25.         if(count==20)
  26.         {
  27.                 count=0;
  28.                 temp=_crol_(temp,1);               
  29.         }

  30. }

复制代码

请高手指点下为什么时间会差10倍,上面的程序大概是每0.1S下一个灯会亮。把COUNT==20改成200才会变成1S

我想问一下,这真的是郭天祥大哥的板子例程吗?如果这是的话,你不要跟他学了,定时器0你连配置都没有配置好,你怎么能指望他能正常工作呢?小编是不是你粗心了?你看看例程上人家是怎么写的?看不出来再来问我。

如果晶振是11.0592M,你定时器的初值就计算错了,我觉得新手遇到问题就应该多琢磨,而不是马上发帖子问人.

小编定时器的初值并没有计算错,如果是12M的晶振可以按上述配置,11.0592M的要多加一些机器周期,但也差不多的,又不是弄串口波特率,没大碍,别误导人家,而是定时器0配置不完整而已,请问TMOD寄存器为什么不去配置?我写个你参考一下
TMOD &= 0XF0;
TMOS |= 0X01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
TR0 = 1;
ET0 = 1;
EA = 1;
明白了吗?这个才是完整的配置,

TMOD写错了。

定时器有问题,4#正解,可以试试,最好弄懂再写,多看中断定时器

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top