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