微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 为什么51单片机的定时器计时不准确?

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

时间:10-02 整理:3721RD 点击:

  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秒慢

应该是代码在执行过程中还有什么的中断函数调用中另外消耗了时间吧,

跟晶振有关把?

不会啊。工作方式1定时1秒就正常

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

网站地图

Top