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

2019-07-15 16:23发布

我写了个流水灯的程序,每秒亮下一个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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
dabing89
1楼-- · 2019-07-15 22:18
我想问一下,这真的是郭天祥大哥的板子例程吗?如果这是的话,你不要跟他学了,定时器0你连配置都没有配置好,你怎么能指望他能正常工作呢?楼主是不是你粗心了?你看看例程上人家是怎么写的?看不出来再来问我。。。
zhaxiaoxi
2楼-- · 2019-07-15 23:40
如果晶振是11.0592M,你定时器的初值就计算错了,我觉得新手遇到问题就应该多琢磨,而不是马上发帖子问人.
dabing89
3楼-- · 2019-07-16 02:42
 精彩回答 2  元偷偷看……
dabing89
4楼-- · 2019-07-16 05:16
dabing89 发表于 2015-8-5 07:43
楼主定时器的初值并没有计算错,如果是12M的晶振可以按上述配置,11.0592M的要多加一些机器周期,但也差不多的,又不是弄串口波特率,没大碍,别误导人家,而是定时器0配置不完整而已,请问TMOD寄存器为什么不去配置?我写个你参考一下
TMOD &= 0XF0;
TMOS |= 0X01;

TMOD写错了。。。。。。。。。。。。。。。。。。。。。。。。
dz_ltf
5楼-- · 2019-07-16 10:09
定时器有问题,4#正解,可以试试,最好弄懂再写,多看中断定时器

一周热门 更多>