标题: 单片机定时器的软件调试,定时时间为1ms,但是调试窗口中显示时间已经达到1.4ms左右 [打印本页]

作者: whuwuh666    时间: 2020-7-12 07:48
标题: 单片机定时器的软件调试,定时时间为1ms,但是调试窗口中显示时间已经达到1.4ms左右
使用定时器1,在编写定时器程序时,根据公式
定时时间=(65535-X)*(12/晶振频率)

得到初值,编写如下程序实验
  1. #include <reg52.h>
  2. /*工作方式1_1ms延时函数*/
  3. void delay_ms(uint xms)
  4. {
  5.         while(xms!=0)
  6.         {
  7.                 TMOD=0x01;
  8.                 TR0=1;
  9.                 TH0=0xfc;TL0=0x66;
  10.                 while(TF0!=1);
  11.                 TF0=0;
  12.                 xms--;
  13.         }
  14.         TR0=0;
  15. }
  16. /*主程序*/
  17. void main()
  18. {
  19. delay_ms(1);
  20. }
复制代码
定时时间为1ms,但是调试窗口中显示时间已经达到1.4ms左右,晶振频率为11.0592MHz设置无误,不知道是什么原因,恳请高人解答。




作者: xianfajushi    时间: 2020-7-12 10:01
定时器设置一次即可,为何要循环?
作者: wufeng391    时间: 2020-7-12 21:41
你为什么不用定时中断?那样精度会更好一点!
作者: whuwuh666    时间: 2020-7-24 17:02
xianfajushi 发表于 2020-7-12 10:01
定时器设置一次即可,为何要循环?

感谢回答
我定义一个delay_ms函数,意在延迟一定的时间,
        while(xms!=0)
        {
                TMOD=0x01;
                TR0=1;
                TH0=0xfc;TL0=0x66;
                while(TF0!=1);
                TF0=0;
                xms--;
        }
是将延迟1ms的动作执行xms次,每一次赋初值后,是等待定时器溢出才重新赋初值。我感觉这样没有问题,教材上也是如此。不知道是不是有其他问题。
作者: whuwuh666    时间: 2020-7-24 17:05
wufeng391 发表于 2020-7-12 21:41
你为什么不用定时中断?那样精度会更好一点!

感谢回答
我想试验一下这种方式,遇到这个问题。不知道是操作问题还是误差问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1