提高单片机定时器精度的算法

  1. 定时器误差产生的主要原因:定时器产生溢出中断时,CPU正在执行指令,从溢出中断出现到CPU响应成为中断响应时间。
  2. 定时器工作方式:定时/计数器有方式0~方式3共4种工作方式。常用的为定时方式1,若定时/计数值计满溢出后,则定时/计数器的初值将被置零,并继续从 THx=0x00, TLx=0x00 开始计数。由于定时初值不会被重新装入,所以需要利用程序重新对 THx、 TLx 赋值。但赋值操作需要占用一定时间,如果不补偿,会造成下一次定时/计数溢出中断信号的时间与理想值不符(即误差)。
  3. 补偿算法:若单片机工作于方式 1(或方式 0),当中断溢出信号产生时, THx、 TLx 重新由 0 开始计数。因为在用户对定时器赋初值前的一刻, THx、 TLx 中的计数值就代表误差时间。所以,将 THx、 TLx 从溢出到用户对其重新赋值时已有的计数值读出,并补偿到计数初值当中,就可以消除定时/计数器的连续定时误差。
  4. 应用 C 语言的定时器溢出响应函数。实例代码定时为0.1ms,Time为计时变量,总运行时间为0.1ms*Time。
    `void Time_INT(void) interrupt 1 using 1
    {
    Time++;

    TMOD|=0x01; //定时器初始化,重新计时
    TH0=0xff+TH0;
    TL0=0x9e+TL0;
    EA=1;
    ET0=1;
    TR0=1;
    }
    `

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值