首页|嵌入式系统|显示技术|模拟IC/电源|元件与制造|其他IC/制程|消费类电子|无线/通信|汽车电子|工业控制|医疗电子|测试测量
首页 > 分享下载 > 常用文档 > 单片机定时中断的精确定时编程方法

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

资料介绍
单片机资料

 文中以定时器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) ;期望数的低位字节
AD
单片机定时中断的精确定时编程方法
本地下载

评论