单片机常用的三种定时方法

各位高手 谢了~~

  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],但比较烦琐,并不理想,这里不一一介绍。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-03
程序延时,定时中断,定时查询.

单片机定时器工作方式有哪些
单片机定时器工作方式:1. 方式0:方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成。当TL0的低5位溢出时,向TH0进位。TH0溢出时,置位TCON中的TF0标志,并向CPU发出中断请求。2. 方式1:方式1的计数位数是16位,由TL0(TL1)作为低8位、TH0(TH1)作为高8位,组成了16位加1...

单片机常用的三种定时方法
这里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定时精度。此方法只适用于重装载值低位字节的低4位为零,且中断响应的延迟时间小于16个机器周期的情况。类似的定时器重装载值有0FFF0H,0FFE0H等。3 方法3 假如定时周期为1ms,通常定时器重装载值为0FC18H,中断子程序如下:MOV A,#LOW(-1000+4...

单片机定时器有哪几种方式?
方式0最长可定时16.384ms。方式1最长可定时131.072MS。方式2最长可定时512us。根据计算公式,X=M-计数初值=M-(fosc*t)\/12,其中X是计数初值,要得到最大定时时间X=0;M最大计数值,工作方式0时M=2^13=8192,工作方式1时M=2^16=65535,工作方式2时M=2^8=256。fosc晶振频率。中断可以被...

单片机定时器\/计数器有哪几种工作方式?
3. 方式1是16位定时\/计数模式,其最大计数值为2^16,即65536,能够实现最大的定时时间和计数次数。这是单片机定时\/计数中常用的一种方式。4. 方式2为8位自动重装载计数模式,最大计数值为2^8,即256,对应于256个机器周期。在这种模式下,达到计数值后会自动重装载初始值,因此具有较高的精度,...

单片机定时器工作原理是什么 单片机定时器工作方式有哪些
单片机定时器有多种工作模式,具体如下:1. 方式0采用了13位计数机制,其中TL0的低5位用于计数,而TH0的8位用于高位计数。当TL0的低5位计数溢出时,会向TH0进位,并在TH0溢出时,设置TCON中的TF0标志,向CPU发送中断请求。2. 方式1则采用了16位的计数机制,由TL0和TH0分别作为低8位和高8位,...

单片机定时器工作方式有哪些
二、单片机定时器工作方式有哪些单片机定时器的工作方式有很多,大致可分为以下几种:1、方式0方式0为13位计数,由TL0的低5位(高3位未用)和TH0的8位组成TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。2、方式1方式1的计数位数是16位,由TL0(TL1)作为低8...

有关单片机定时器的使用和定时器的介绍
第一种计数的方式是十三位加一的形式,第二种是十六位加一的计数器,第三种的定数器被分解成两部分,一个是八位的寄存器,另外一个是八位的计数器。第三步就是要为定时器进行赋值,首先定时器的初值是等于计数器模值减去计数器记满的招满值,而定时器的初值是等于模值减去预定时的时间与单片机时钟...

51单片机的定时器有几种工作模式?
对于MCS-51单片机,定时器T0提供了四种工作模式,包括方式0、方式1、方式2和方式3。而定时器T1则有三种工作模式,分别是方式0、方式1和方式2。值得注意的是,定时器\/计数器的工作功能通常由软件编程决定,因此在使用之前需要对其进行初始化设置,以确保其按照预设的功能运行。初始化步骤通常包括以下几个...

51单片机的3个定时器怎样使用?
51单片机只有T0,T1。52才有T2的。定时器设置方法:做定时用一般采用16位模式,也就是TMOD=0x11(10或01单独一个定时器的话),初值的计算是这样的:假设时间是X毫秒,晶振为YMhz,那么:THn=(65536-1000*X*Y\/12)\/256 TLn=(65536-1000*X*Y\/12)%256 之后就是TRn=1(开启定时器)ETn=1(开启...

51单片机的定时器有几种工作模式?
51单片机定时器T1有3种工作模式:方式0,方式1,方式2。当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2。

相似回答
大家正在搜