历史上的今天
返回首页

历史上的今天

今天是:2025年01月15日(星期三)

正在发生

2018年01月15日 | 单片机定时中断的精确编程方法

2018-01-15 来源:eefocus

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)指令,则将适用于所有情况。

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],但比较烦琐,并不理想,这里不一一介绍。


推荐阅读

史海拾趣

ERP Power公司的发展小趣事

在这个故事中,我们将探讨ERP Power如何在云计算技术的推动下实现创新发展。通过引入云计算技术,ERP Power系统为企业提供了更加灵活、可扩展的信息化解决方案,帮助企业降低了IT成本并提高了系统安全性。

安森德(Ascend)公司的发展小趣事

随着产品技术的成熟,安森德公司开始积极拓展市场。公司凭借优质的产品和服务,成功进入工业电源、电机驱动、消费电子等多个领域。同时,安森德积极寻求与全球顶尖企业的战略合作,通过与这些企业的技术交流和业务合作,不断提升自身的技术水平和市场竞争力。这些合作不仅为安森德带来了更多的商业机会,也进一步提升了公司在行业内的知名度和影响力。

Daykin Electric Corp公司的发展小趣事

1958年,大金推出了采用旋转式压缩机的家用空调机,这标志着公司正式进军家用空调市场。在当时,家用空调在日本市场还处于起步阶段,大金凭借其技术优势和敏锐的市场洞察力,迅速占领了市场份额。

EM Devices Corporation公司的发展小趣事

作为一家有社会责任感的企业,EM Devices Corporation不仅关注自身的经济效益,还积极履行社会责任。公司严格遵守环保法规,采取了一系列环保措施,减少生产过程中的污染排放。此外,公司还积极参与公益事业,为社会做出了积极的贡献。这种可持续发展的理念为公司赢得了广泛的社会赞誉和尊重。

American Technical Ceramics (ATC)公司的发展小趣事

EM Devices Corporation的创始人在电子工程领域有着深厚的背景,他们看到了当时市场上对高性能电子元件的迫切需求。于是,他们决定创办EM Devices Corporation,专注于研发和生产高质量的电子元件。起初,公司面临了资金、技术和市场等多方面的挑战。然而,凭借创始人对技术的执着追求和对市场的敏锐洞察,公司成功研发出了一款具有竞争力的产品,并逐渐在市场上获得了认可。

FINDER公司的发展小趣事

EM Devices Corporation始终将产品质量放在首位。公司建立了一套严格的质量管理体系,对生产过程中的每一个环节都进行严格的监控和检测。同时,公司还不断引入先进的生产设备和工艺,提高产品的生产效率和质量。此外,公司还鼓励员工提出改进意见和建议,以便及时发现并解决问题。这种持续改进的精神使得EM Devices Corporation的产品在市场上始终保持着良好的口碑。

问答坊 | AI 解惑

Ansoft简单版软件

有限元分析软件!…

查看全部问答>

NXP LPC1343 开发板 学习之旅(序言)

       俗语说的好,“万事开头难”,确实如此啊,从收到LPC1343的开发板到现在,已经有一段时间了,但是却迟迟未能进入学习和开发的状态(一直在忙一个产品的出货。。。 ),也没有像论坛里其他的仁人志士一样,分 ...…

查看全部问答>

WINCE下怎么知道一个驱动被device.exe加载后的线程ID号?Performance Monitor的device.exe/xxx这个xxx编号表示什么

WINCE下怎么知道一个驱动被device.exe加载后的线程ID号?Performance Monitor的device.exe/xxx这个xxx编号表示什么?…

查看全部问答>

我好晕啊,软件调试一个实时时钟程序竟然提示我需要的系统资源不够!!!!!!!!!!!

不在迷茫中死亡,就在郁闷中爆发!!!!!!!!!!!!!!!! AVR,I will kill you!…

查看全部问答>

关于wince 5.0的sdk 与vs2005的问题

首次安装wince 5.0的开发环境,不知道该如何安装 弱弱的问一下大家是怎么安装wince 5.0的开发环境的? 我装了pb 5.0 Microsoft ActiveSync 4.5 evc 4.0 编译映像后生成sdk。 安装sdk通过evc 将程序下的板子上没有问题。 但要求用vs2005开发软 ...…

查看全部问答>

如何去学嵌入式系统开发

如何去学嵌入式系统开发…

查看全部问答>

一年工作经验的wince程序员求职

本人从事wince开发已经一年,主要是做symbol的mc3000,mc50等工业pda的程序开发,做过的项目主要有:     1、某大型超市的卖场盘点、收货系统:无线实时系统,pda端程序、服务器端程序和oracle数据库的相关存储过程由我自己一人完成。开 ...…

查看全部问答>

大学、FPGA、工作

自己即将大学毕业,自己也一直希望能从事FPGA方面的工作。但自己对FPGA研究不是很深入,只有几个月的时间,学校老师上FPGA的课程时只是简单的讲了VHDL,以及有关FPGA方面的简单边缘的扩展知识。另一个硬件描述语言verilog hdl也是自己自学的,感觉 ...…

查看全部问答>

TMS320C6713B片外SRAM中运行程序

大家好: 我设计了一款TMS320C6713B+FPGA的板子,目前有个问题困扰我很久了,即,该DSP能否让程序运行在片外SRAM中,如果可以需要注意哪些方面?我现在的现象是程序运行在DSP片内RAM中正常,运行在片外SRAM中不行(单独测试该SRAM正常,进行了充分 ...…

查看全部问答>