郭天祥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
2019-07-16 05:16
dabing89 发表于 2015-8-5 07:43
楼主定时器的初值并没有计算错,如果是12M的晶振可以按上述配置,11.0592M的要多加一些机器周期,但也差不多的,又不是弄串口波特率,没大碍,别误导人家,而是定时器0配置不完整而已,请问TMOD寄存器为什么不去配置?我写个你参考一下
TMOD &= 0XF0;
TMOS |= 0X01;

TMOD写错了。。。。。。。。。。。。。。。。。。。。。。。。

一周热门 更多>