131 1300 0010
其他
当前位置: 首页>> 元件技术>>其他>>
  • 导航栏目
  • 二极管
  • 整流桥
  • MOS管
  • 其他
  • MCS-51单片机定时中断的编程方法解析
    MCS-51单片机定时中断的编程方法解析
  • MCS-51单片机定时中断的编程方法解析
  •   发布日期: 2019-05-14  浏览次数: 966

    引 言

    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)。

    MCS-51单片机定时中断的编程方法解析

    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)

    ……

    此方法适用于定时中断总发生在同一条指令位置,且无其它中断源的情况。


  • ·上一篇:
    ·下一篇:
  • 其他关联资讯
    深圳市日月辰科技有限公司
    地址:深圳市宝安区松岗镇潭头第二工业城A区27栋3楼
    电话:0755-2955 6626
    传真:0755-2978 1585
    手机:131 1300 0010
    邮箱:hu@szryc.com

    深圳市日月辰科技有限公司 版权所有:Copyright©2010-2023 www.szryc.com 电话:13113000010 粤ICP备2021111333号