- 定时器误差产生的主要原因:定时器产生溢出中断时,CPU正在执行指令,从溢出中断出现到CPU响应成为中断响应时间。
- 定时器工作方式:定时/计数器有方式0~方式3共4种工作方式。常用的为定时方式1,若定时/计数值计满溢出后,则定时/计数器的初值将被置零,并继续从 THx=0x00, TLx=0x00 开始计数。由于定时初值不会被重新装入,所以需要利用程序重新对 THx、 TLx 赋值。但赋值操作需要占用一定时间,如果不补偿,会造成下一次定时/计数溢出中断信号的时间与理想值不符(即误差)。
- 补偿算法:若单片机工作于方式 1(或方式 0),当中断溢出信号产生时, THx、 TLx 重新由 0 开始计数。因为在用户对定时器赋初值前的一刻, THx、 TLx 中的计数值就代表误差时间。所以,将 THx、 TLx 从溢出到用户对其重新赋值时已有的计数值读出,并补偿到计数初值当中,就可以消除定时/计数器的连续定时误差。
应用 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;
}
`
提高单片机定时器精度的算法
最新推荐文章于 2023-12-03 22:44:33 发布