單片機定時器中斷時間誤差的分析及補償
3.3 實例
要求補償定時器每1ms產(chǎn)生一次溢出中斷時的中斷響應(yīng)延遲的誤差。若振蕩器振蕩頻率fosc=12MHZ,定時器工作在計數(shù)方式,工作模式為1,則補償中斷響應(yīng)時間誤差時的定時器新初值X1為:
X1=216-t3× fosc/12=216-(t0+ t1)- t2=216-(1000+ 13)- t2
誤差補償程序為:
……
0 CLR EA ;關(guān)CPU中斷
1 CLR TRi ;停止定時器計數(shù)
2 MOV R0, #OOH ;R0清零
3 MOV R0, #LOW(216) ;定時器最大計數(shù)值的低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的機器周期數(shù)為1000。由于第1條指令到第14條指令的指令周期的機器周期數(shù)之和為13,因此,t1為13個機器周期。CPU雖在執(zhí)行第一條指令CLR TRi后停止定時器計數(shù),但在TLi、THi中分別保存了t2的低位數(shù)據(jù)和高位數(shù)據(jù)。
4 結(jié)束語
由于本文介紹的誤差補償方法能對定時器溢出中斷與CPU響應(yīng)中斷的非固定性時間誤差進行有效補償,因此,該方法對于提高高頻控制系統(tǒng)實時控制精度和擴大單片機應(yīng)用范圍都有較高的實用價值。
參考文獻
[1]曹巧媛,單片機原理及應(yīng)用,電子工業(yè)出版社,1997、5
[2]汪吉鵬等,微機原理及接口,高等教育出版社,2001、7
評論