为什么51单片机的定时器计时不准确?

2019-07-15 15:02发布

  1. #include<reg51.h>
  2. int time;
  3. unsigned char code duan[10]={
  4. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  5. 0x7f,0x6f};
  6. //0、1、2、3、4、5、6、7、8、9的显示码
  7. void timer_init()
  8. {
  9.     TMOD=0x02; //定时器工作方式2
  10.         TL0=0x9c;  //初值为156,256溢出,定时100*1us=0.1ms
  11.         ET0=1;
  12.         EA=1;
  13.         TR0=1;
  14. }
  15. void timer0_mod2() interrupt 1         //定时器0的中断编号是1
  16. {
  17.     time++;
  18. }
  19. main()
  20. {
  21.     char i=0;
  22.     P0=0xff;
  23.         i=0;
  24.         timer_init();
  25.         while(1)
  26.         {
  27.             P0=~duan[i];//我用共阳数码管
  28.                 if(time==1000) { time=0;i++; }//理论上0.1秒显示一个数字,实际上慢很多
  29.                 if(i==10)       i=0;
  30.         }
  31. }

复制代码我选择了定时器0的工作方式2
单片机STC90C51
烧录后观察到数码管的数字变化为什么明显比0.1秒慢

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
twx_1994
2019-07-15 23:53
有这种问题,我用STC89C52RC单片机的定时器0来计时NEC(红外)脉冲时也出现过这种现象。计时1.125ms的脉冲时,明显定时器TL0、TH0中的数据小于理论计算值,而且还相关比较大(200~300个定时器周期)。但当计时13.5ms的脉冲时,定时器TL0、TH0中的数据与理论计算值接近。不知道是什么原因,有测试过晶振波形,平均是11.079MHZ

一周热门 更多>