|
本帖最后由 Kxuan163 于 2020-12-22 17:00 編輯
【問(wèn)題】:
51單片機(jī)T0計(jì)數(shù)溢出中斷子程序如下:
T0_INT:
...
MOV TL0, #1FH
MOV TH0, #FCH
...
RETI
問(wèn):一次計(jì)數(shù)溢出中斷后, 計(jì)數(shù)溢出中斷子程序重裝計(jì)數(shù)初值會(huì)影響計(jì)時(shí)精度嗎?
.
【解答】:
會(huì)影響計(jì)數(shù)精度。影響計(jì)數(shù)精度有如下兩個(gè)因數(shù):
1.執(zhí)行重裝TH0、TL0初值兩條指令需耗用2個(gè)機(jī)器周期;
2.等待中斷響應(yīng)須3~6個(gè)機(jī)器周期,
若還有其它中斷源同時(shí)申請(qǐng)中斷或T0中斷未設(shè)置為最高優(yōu)先級(jí),須等待更多個(gè)機(jī)器周期;
.
解決辦法:
為了提高計(jì)時(shí)精度,中斷處理子程序可采取修正重裝時(shí)間常數(shù)的措施,
以下是T0工作于方式1的修正重裝時(shí)間常數(shù)中斷處理子示例程序:
T0_INT:
CLR EA
CLR TR0
MOV A,#1FH ;; 原定初裝值低8位
ADD A,TL0 ;; A←(原定初裝值低8位+TL0實(shí)時(shí)值)
MOV TL0,A ;; 重裝修正后的初裝值低8位
MOV A,#FCH ;; 原定初裝值高8位
ADDC A,TH0 ;; A←(進(jìn)位標(biāo)志+原定初裝值高8位+TH0實(shí)時(shí)值)
MOV TH0,A ;; 重裝修正后的初裝值高8位
SETB TR0
RETI
;; 若等待中斷響應(yīng)是時(shí)間長(zhǎng),重新賦值時(shí)TH0已自動(dòng)計(jì)數(shù)至溢出、進(jìn)位標(biāo)志為1, 所以用帶進(jìn)位加法ADDC指令來(lái)修正重裝值高8位。
|
評(píng)分
-
查看全部評(píng)分
|