本帖最后由 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位。
|