单片机定时器中断时间误差的分析及补偿
3.3 实例
要求补偿定时器每1ms产生一次溢出中断时的中断响应延迟的误差。若振荡器振荡频率fosc=12MHZ,定时器工作在计数方式,工作模式为1,则补偿中断响应时间误差时的定时器新初值X1为:
X1=216-t3× fosc/12=216-(t0+ t1)- t2=216-(1000+ 13)- t2
误差补偿程序为:
……
0 CLR EA ;关CPU中断
1 CLR TRi ;停止定时器计数
2 MOV R0, #OOH ;R0清零
3 MOV R0, #LOW(216) ;定时器最大计数值的低8位送R0
4 MOV A, R0
5 SUBB A, #LOW(1000+13) ;216的低8位减去( t0+ t1)的低8位送累加器A
6 SUBB A, TLi ;216的低8位减去( t0+ t1+ t2)的低8位送TLi
7 MOV TLi, A
8 MOV R0, #OOH ;R0清零
9 MOV R0, #HIGH(216) ;216 的高8位送R0
10 MOV A, R0
11 SUBB A, #HIGH(1000+13) ;216的高8位减去( t0+ t1)的高8位送A
12 SUBB A, THi ;216的高8位减去( t0+ t1 +t2)的高8位送A
13 MOV THi, A
14 SETB TRi ;重新启动定时器
……
在上式和上段程序中,由于fosc=12MHZ,中断间隔时间为1ms,因此t0的机器周期数为1000。由于第1条指令到第14条指令的指令周期的机器周期数之和为13,因此,t1为13个机器周期。CPU虽在执行第一条指令CLR TRi后停止定时器计数,但在TLi、THi中分别保存了t2的低位数据和高位数据。
4 结束语
由于本文介绍的误差补偿方法能对定时器溢出中断与CPU响应中断的非固定性时间误差进行有效补偿,因此,该方法对于提高高频控制系统实时控制精度和扩大单片机应用范围都有较高的实用价值。
参考文献
[1]曹巧媛,单片机原理及应用,电子工业出版社,1997、5
[2]汪吉鹏等,微机原理及接口,高等教育出版社,2001、7
评论