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

发布者:uioo9158最新更新时间:2021-06-17 来源: 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],但比较烦琐,并不理想,这里不一一介绍。

关键字:单片机  定时中断  精确定时  编程方法 引用地址:单片机定时中断的几种精确定时编程方法

上一篇:C51优化设计之使用DJNZ循环指令提高执行效率
下一篇:KeilC51 Monitor-51仿真板的制作与使用心得

推荐阅读最新更新时间:2024-11-18 17:20

基于51单片机射频RFID卡考勤人数计数系统设计
一.硬件方案 “考勤管理系统”是以RFID射频卡为信息识别载体的适用于企业单位或学校的考勤管理系统。 本设计由51单片机电路+RFID模块电路+1602液晶显示电路+按键电路+蜂鸣器报警电路+电源电路组成。: 二.设计功能 (1)系统有3张卡,分别代表依次是张三、李四、王二。 (2)任何一个人刷卡成功能,1602液晶响应显示,未刷卡显示空“ ”位置上空的,刷卡成功后相应位置显示有人。 (3)液晶第二行显示刷卡人数,即出勤总人数。 (4)按下按键表示上课,如果签到人数和总人数不符合,蜂鸣器报警处理。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)PCB图如下: 四.软件设计 (1)程序流程图
[单片机]
基于51<font color='red'>单片机</font>射频RFID卡考勤人数计数系统设计
基于MSP430单片机的智能水位计设计
随着微电子技术和计算机技术的不断发展,引起了仪表结构的根本性变革,以微型计算机为主体,将计算机技术和检测技术有机结合,组成新一代“智能化仪表”,在测量过程自动化、测量数据处理及功能多样化方面与传统仪表的常规测量电路相比较,取得了巨大进展。智能仪表不仅能解决传统仪表不易或不能解决的问题,还能简化仪表电路,提高仪表的可靠性,更容易实现高精度、高性能、多功能的目的。水位监测广泛应用于水利、电力、城市供水、防洪等多领域,但是目前的水位观测方法精度不高,不能全自动、实时动态监测,因此,在综合研究目前水位监测的实际情况以及特点的基础上,利用现代电子技术,特别是单片机技术和传感器技术,设计开发一种通用性好、可靠性高、维护方便,可适用于多种监测
[单片机]
基于MSP430<font color='red'>单片机</font>的智能水位计设计
基于Proteus软件的单片机仿真与PCB设计
  1.引言   单片机是将CPU芯片,存储器芯片,I/O接口芯片和简单的I/O设备装配在一块印刷电路板上,再配上存储在ROM中的监控程序,这便构成了一台单板微型计算机。传统的单片机开发都是采用硬件实验箱或实验板方式,硬件投资成本相对较高;这种定式的环境很容易将开发者的思维禁锢在小小的实验箱里,不利于创新思维实现,对于初学者还会造成认知上的误区,即所谓的单片机就是在一个箱子里穿针引线,这极不利于后续的开发。   目前,具有电路仿真功能的软件比较多,性能比较好的有Multisim、Protel、O r C A D等,但这些对单片机的仿真无能为力。到目前为止,只有Proteus软件能够提供完善的单片机芯片及嵌入式系统的仿真。  
[单片机]
基于Proteus软件的<font color='red'>单片机</font>仿真与PCB设计
如何下载stm32系列单片机的固件库
第一步 进入st官网( ST官网 ),可选中文(建议多看英文,对看数据手册有很大用处,下面步骤以英文为主),如图1 第二步 选择tool & software(工具及软件) —- MCUS Embedded Software 第三步 选择product tree 第四步 展开product tree 第五步 以stm32L151为例,如图 点进去下载即可。
[单片机]
基于单片机的 复杂可编程逻辑器件快速配置方法
摘要:介绍基于SRAM的可重配置CPLD的原理,通过对多种串行配置的比较,提出了由单片机和FLASH存储器组成的串行配置方式,并从系统复杂度、可靠性和经济性等方面进行了比较和分析。 关键词:复杂可编程逻辑器件 静态随机存储器 被动串行 基于SRAM(静态随机存储器)的可重配置PLD(可编程逻辑器件)的出现,为系统设计者动态改变运行电路中PLD的逻辑功能创造了条件。PLD使用SRAM单元来保存配置数据。这些配置数据决定了PLD内部的互连关系和逻辑功能,改变这些数据,也就改变了器件的逻辑功能。由于SRAM的数据是易失的,因此这些数据必须保存在PLD器件以外的EPROM、EEPROM或FLASH ROM等非易失存储器内,以便使系统在
[应用]
用AT89C系列单片机实现5英寸TFT-LCD的遥控
LCD由于具有薄、轻及功耗低的特点,已广泛应用在计算机显示器、VCD显示板、便携式医疗设备等工业和民用领域。在这些产品中,应用单片机能大大地提高其智能性、易用性,给人们的生活带来舒适和方便。本文采用美国Atmel公司的单片机AT89C2051和AT89C51,为5英寸的TFT-LCD设计了遥控系统。该系统主要由遥控发射、遥控接受、TFT-LCD驱动电路3部分组成,可以遥控TFT-LCD的电源开关、亮度、色饱和度、对比度和音量,并具有扩展功能。 1   硬件设计 硬件总体设计框图如图1所示。 1.1 遥控发射电路设计 遥控发射电路由AT89C2051单片机、键盘、红外发射电路和电源组成。这里选用4×4键盘,用于控
[单片机]
节省IO的小技巧:GD32 MCU如何使用一个GPIO实现串口半双工收发
一般情况串口的接受和发送分别需要使用TX和RX两个引脚来实现,但在一些UART的实际应用中,通信双方身份为主机和从机,数据流是半双工的,那么当IO口资源紧张时可以使用半双工模式通过一个引脚实现数据的发送和接受,同时又保证数据不出错。我们一起来看下红枫派开发板例程中是如何实现的? 首先GD32F303的UART是支持半双工模式的,但想要真正使用起来,软硬件还需要特殊设计。 首先是硬件设计,在红枫派开发板中的RS485通信使用半双工实现,原理图是这样的: 其中很重要的两个点是: 1、在MCU的TX引脚上一定要增加一个上拉电阻,保证MCU发送和接受模式切换时IO口电平可以保持高电平的空闲态。 2、485端实际还是发送和接受
[单片机]
节省IO的小技巧:GD32 <font color='red'>MCU</font>如何使用一个GPIO实现串口半双工收发
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved