找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1594|回复: 4
打印 上一主题 下一主题
收起左侧

单片机定时器的软件调试,定时时间为1ms,但是调试窗口中显示时间已经达到1.4ms左右

[复制链接]
跳转到指定楼层
楼主
ID:358460 发表于 2020-7-12 07:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用定时器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设置无误,不知道是什么原因,恳请高人解答。



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:332444 发表于 2020-7-12 10:01 | 只看该作者
定时器设置一次即可,为何要循环?
回复

使用道具 举报

板凳
ID:782419 发表于 2020-7-12 21:41 | 只看该作者
你为什么不用定时中断?那样精度会更好一点!
回复

使用道具 举报

地板
ID:358460 发表于 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次,每一次赋初值后,是等待定时器溢出才重新赋初值。我感觉这样没有问题,教材上也是如此。不知道是不是有其他问题。
回复

使用道具 举报

5#
ID:358460 发表于 2020-7-24 17:05 | 只看该作者
wufeng391 发表于 2020-7-12 21:41
你为什么不用定时中断?那样精度会更好一点!

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表