0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何确保单片机精确定时控制有哪些编程方法详细说明

Wildesbeast 来源:网络整理 作者:蹇兴亮 2020-01-26 09:04 次阅读

引言

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    5997

    文章

    43947

    浏览量

    620543
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41020
  • 定时器
    +关注

    关注

    23

    文章

    3144

    浏览量

    112004
收藏 人收藏

    评论

    相关推荐

    单片机T2定时器实现1秒精确定时

    单片机T2定时器实现1秒精确定时程序单片机T2定时器实现1秒精确定时程序
    发表于 07-16 06:18

    51单片机定时器结构及工作原理详细说明

    u3000定时器/计数器的应用场合:定时或延时控制、对外部事件的检测、计数等;MCS-51系列8031、8051单片机两个16位
    发表于 09-25 08:23

    单片机进行定时编程详细资料说明

    本文档的主要内容详细介绍的是单片机进行定时编程详细资料说明
    发表于 04-18 17:27 2次下载
    <b class='flag-5'>单片机</b>进行<b class='flag-5'>定时</b>器<b class='flag-5'>编程</b>的<b class='flag-5'>详细</b>资料<b class='flag-5'>说明</b>

    在Windows系统下使用STC ISP下载51单片机程序的方法详细说明

    本文档的主要内容详细介绍的是在Windows系统下使用STC ISP下载51单片机程序的方法详细说明
    发表于 08-30 17:28 0次下载
    在Windows系统下使用STC ISP下载51<b class='flag-5'>单片机</b>程序的<b class='flag-5'>方法</b><b class='flag-5'>详细说明</b>

    51单片机定时器T0的中断使用法详细说明

    本文档的主要内容详细介绍的是51单片机定时器T0的中断使用法详细说明程序免费下载。
    发表于 08-22 17:30 0次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>定时</b>器T0的中断使用法<b class='flag-5'>详细说明</b>

    如何同时使用51单片机定时器0和串口使用问题详细说明

    本文档的主要内容详细介绍的是如何同时使用51单片机定时器0和串口使用问题详细说明
    发表于 08-13 17:32 27次下载
    如何同时使用51<b class='flag-5'>单片机</b>的<b class='flag-5'>定时</b>器0和串口使用问题<b class='flag-5'>详细说明</b>

    51单片机定时器和计数器的使用资料详细说明

    本文档的主要内容详细介绍的是51单片机定时器和计数器的使用资料详细说明
    发表于 07-09 17:40 1次下载
    51<b class='flag-5'>单片机</b>的<b class='flag-5'>定时</b>器和计数器的使用资料<b class='flag-5'>详细说明</b>

    51单片机定时器的初始化步骤详细说明

    本文档的主要内容详细介绍的是51单片机定时器的初始化步骤详细说明
    发表于 07-03 17:42 6次下载
    51<b class='flag-5'>单片机</b><b class='flag-5'>定时</b>器的初始化步骤<b class='flag-5'>详细说明</b>

    51单片机的中断号和定时器的工作方式详细说明

    本文档的主要内容详细介绍的是51单片机的中断号和定时器的工作方式详细说明
    发表于 06-28 17:42 5次下载
    51<b class='flag-5'>单片机</b>的中断号和<b class='flag-5'>定时</b>器的工作方式<b class='flag-5'>详细说明</b>

    单片机C语言编程的关键字详细说明

    本文档的主要内容详细介绍的是单片机C语言编程的关键字详细说明
    发表于 12-10 17:32 23次下载
    <b class='flag-5'>单片机</b>C语言<b class='flag-5'>编程</b>的关键字<b class='flag-5'>详细说明</b>

    单片机的指令大全详细说明

    本文档的主要内容详细介绍的是单片机的指令大全详细说明
    发表于 12-26 11:39 24次下载
    <b class='flag-5'>单片机</b>的指令大全<b class='flag-5'>详细说明</b>

    K64系列单片机的参考手册详细说明

    本文档的主要内容详细介绍的是K64系列单片机的参考手册详细说明 本文描述了微控制器的特点、结构和编程模型。
    发表于 03-02 08:00 11次下载
    K64系列<b class='flag-5'>单片机</b>的参考手册<b class='flag-5'>详细说明</b>

    机器人单片机控制三大模块的方法详细说明

    本文档的主要内容详细介绍的是机器人单片机控制三大模块的方法详细说明
    发表于 04-22 08:00 1次下载
    机器人<b class='flag-5'>单片机</b><b class='flag-5'>控制</b>三大模块的<b class='flag-5'>方法</b>的<b class='flag-5'>详细说明</b>

    健伍TK868G对讲机的编程方法详细说明

    本文档的主要内容详细介绍的是健伍TK868G的编程方法详细说明
    发表于 09-01 08:00 4次下载
    健伍TK868G对讲机的<b class='flag-5'>编程</b><b class='flag-5'>方法</b><b class='flag-5'>详细说明</b>

    MCS-51单片机精确定时的两种编程方法介绍

    的应用场合,必须考虑它们的影响,以确保精确定时控制。根据定时中断的不同应用情况,应选择不同的精确定时
    发表于 11-23 16:36 7次下载
    MCS-51<b class='flag-5'>单片机</b><b class='flag-5'>精确定时</b>的两种<b class='flag-5'>编程</b><b class='flag-5'>方法</b>介绍