新闻  |   论坛  |   博客  |   在线研讨会
单片机定时中断的精确定时编程方法
tvb2058 | 2007-09-10 14:20:17    阅读:1296   发布文章

---------------------------------------------------------------------------



   MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为38个机器周期[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个机器周期的情况。类似的定时器重装载值有0FFF0H0FFE0H等。


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 ATH1 MOV TH1A时,恰好产生TL1溢出向TH1进位的情况,则TH1的值就不对了,会产生更大的误差。为此,程序段开头为重装载值加4,若有溢出进位,则可提前发生,其中2个机器周期是考虑到为TL1重装载占用的时间。


   此方法适用于系统中无其它更高优先级中断源的情况。若类似方法1,在程序段开头和结尾分别加上禁止所有中断(CLR EA)和开中断(SETB EA)指令,则将适用于所有情况。


4
方法
4

   假如定时周期不确定,只知道定时器重装载值存放在寄存器R3R2中,中断子程序如下:

MOV A
#05H 3个机器周期装载TL12个周期提前

ADD A
TL1
ADD A
R2
MOV TL1
A
MOV A
R3 ;处理高位字节

ADDC A
TH1
MOV TH1
A
DEC TL1
;恢复提前了的2个机器周期

……

   此法适用于定时周期不确定的情况,其它同方法3


5
方法
5

   当定时中断发生的位置可预知时,通常出现在主程序的AJMP $ (SJMP $)等待指令处,中断延迟时间为3个或4个机器周期。取固定值4可简化补偿程序。以定时周期1ms为例,中断子程序如下:

ORG 001BH
MOV TL1
#LOW(-1000+4)
MOV TH1
#HIGH(-1000+4)
……

   此方法适用于定时中断总发生在同一条指令位置,且无其它中断源的情况。



   上述5种方法误差均不超过1个机器周期,其中方法134较为通用,适用于任何情况,但程序较长;方法25简单,但必须注意满足对应条件,才能使用。当然,也还有其它方法[3],但比较烦琐,并不理想,这里不一一介绍。


                  参考文献

1
孙涵芳,徐爱卿. MCS-51/96系列单片机原理及应用[M]. 北京:北京航空航天大学出版社,
1988
2
周航慈. 单片机应用程序设计技术. [M]. 修订版. 北京:北京:北京航空航天大学出版社,
2002
3
聂毅. 单片机定时器中断时间误差的分析及补偿[J]. 微计算机信息,
2002,18(4):37~38

蹇兴亮:讲师,主要从事测试计量技术及单片机的教学。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客