新闻中心

EEPW首页>嵌入式系统>设计应用> c51单片机定时中断的精确定时编程方法总结

c51单片机定时中断的精确定时编程方法总结

作者: 时间:2013-03-08 来源:网络 收藏

这种方法中不停止定时器计数过程,若在执行指令ADDC A,TH1 或MOV TH1,A时,恰好产生TL1溢出向TH1进位的情况,则TH1的值就不对了,会产生更大的误差。为此,程序段开头为重装载值加4,若有溢出进位,则可提前发生,其中2个机器周期是考虑到为TL1重装载占用的时间。

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

4 方法4

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

MOV A,#05H ;3个机器周期装载TL1,2个周期提前

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个机器周期,其中方法1、3、4较为通用,适用于任何情况,但程序较长;方法2、5 简单,但必须注意满足对应条件,才能使用。当然,也还有其它方法[3],但比较烦琐,并不理想,这里不一一介绍。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭