mcs-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为3~8个机器周期[1]。无论是哪一种原因引起的误差,在精确定时的应用场合,必须考虑它们的影响,以确保精确的定时控制。根据定时中断的不同应用情况,应选择不同的精确定时编程方法。
文中以定时器t1工作在定时方式1为例,晶振频率为12mhz。
1 方法1
在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一次中断时,需多长时间,由此来重装载和启动定时器。例如定时周期为1ms,则通常定时器重装载值为-1000(0fc18h)。下面的程序在计算每个定时周期的精确重装载值时,考虑了由停止计数(clr tr1)到重新启动计数(setb tr1)之间的7个机器周期时间。程序中#low(-1000+7)和#high(-1000+7)是汇编符号,分别表示-1000+7=0fc1fh这个立即数的低位字节(1fh)和高位字节(0fch)。
clr ea ;禁止所有中断
clr tr1 ;停止定时器t1
mov a,#low(-1000+7) ;期望数的低位字节
add a,tl1 ;进行修正
mov tl1,a ;重装载低位字节
mov a,#high(-1000+7) ;对高位字节处理
addc a,th1
mov th1,a
setb tr1 ;重启动定时器
setb ea ;重开中断
此方法适用于各种原因造成的定时误差的情况,为通用方法。
2 方法2
假如定时周期为10ms,通常定时器重装载值为0d8f0h,中断子程序如下[2]:
orl tl1,#0f0h
mov th1,#0d8h
这里用orl tl1,#0f0h代替mov tl1,#0f0h 可提高定时精度。此方法只适用于重装载值低位字节的低4位为零,且中断响应的延迟时间小于16个机器周期的情况。类似的定时器重装载值有0fff0h,0ffe0h等。
3 方法3
假如定时周期为1ms,通常定时器重装载值为0fc18h,中断子程序如下:
mov a,#low(-1000+4) ;期望数的低位字节
add a,tl1
mov tl1,a
mov a,#high(-1000+4) ;对高位字节处理
addc a,th1
mov th1,a
dec tl1 ;恢复提前了的2个机器周期
这种方法中不停止定时器计数过程,若在执行指令addc a,th1 或mov th1,a时,恰好产生tl1溢出向th1进位的情况,则th1的值就不对了,会产生更大的误差。为此,程序段开头为重装载值加4,若有溢出进位,则可提前发生,其中2个机器周期是考虑到为tl1重装载占用的时间。
此方法适用于系统中无其它更高优先级中断源的情况。若类似方法1,在程序段开头和结尾分别加上禁止所有中断(clr ea)和开中断(setb ea)指令,则将适用于所有情况。
LG电子公开可支持人体下肢肌肉力量的可穿戴机器人,助力布局机器人领域
华为AI能力助力更多城市构筑绿色发展屏障
鸿海与小鹏汽车深入合作,郭台铭戴红帽试乘 G3
笙科推出新一代的Zigbee/RF4CE无线射频收发晶片
ODU光纤系统解决方案
MCS-51单片机中断响应的三种方法解析
安培计算发布Altra系列处理器,基于台积电7nm工艺制造
如何用万用表测试结型场效应管的放大能力
移远通信首批加入“5G+eSIM计算终端产业合作计划”,助力大屏移动终端全时在线
YTJM-DSQ160TP-Q45B微型贴片全向倾斜角度开关
真空断路器的型号规格是怎样的
从EDA到封装的协同设计
关于新一代高功率密度电机控制器解决方案的介绍
基于LatticeXP2设计的FPGA标准评估技术
雷恩抗干扰型编码器RCI58X系列
索尼正在恢复自2018年以来未发布新机型的系列
Rigid-Flex弯曲设计详解
电动车电池多久换一次_电动车电池保养
利用英特尔至强融核协处理器对LAMMPS进行优化
人民网评论“TikTok交易”的甲骨文:披着羊皮的狼