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

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

3天内不再提示

如何使用8051定时器生成时间延迟?

科技观察员 来源:英锐恩 作者:英锐恩 2023-07-07 11:00 次阅读

8051单片机有两个独立的16位向上计数定时器,名为Timer0和Timer1,本文是关于使用8051定时器生成时间延迟。使用纯软件循环可以生成延迟,但这种延迟精度较差,不能用于敏感应用。使用定时器延迟是最准确的,当然也是最好的方法。

定时器可以概括为多位计数器,它在接收时钟信号时增加/减少自身,并在翻转时产生中断信号。当计数器在处理器时钟上运行时,它被称为“定时器”,它对预定数量的处理器时钟脉冲进行计数并产生可编程延迟。当计数器在外部时钟源(可能是周期性或非周期性外部信号)上运行时,它本身被称为“计数器”,可用于对外部事件进行计数。

在8051单片机中,振荡器输出使用12分频网络进行12分频,然后作为时钟信号馈入定时器。这意味着对于以12MHz运行的8051,定时器时钟输入将为1MHz。这意味着计时器每1uS前进一次,使用单个8051计时器可能的最大时间延迟为(2^16)x(1uS)=65536uS。比这更长的延迟可以通过使用定时器编写一个基本的延迟程序然后循环它所需的时间来实现。我们将在本文的下一节中详细了解所有这些。

一、使用8051单片机的定时器设计延迟程序

在8051中设计延时程序时,计算需要加载到TH和TL寄存器中的初始值是很重要的事情。让我们看看它是如何完成的:

(1)假设处理器由12MHz晶振提供时钟。

(2)这意味着,定时器时钟输入将为12MHz/12=1MHz

(3)这意味着,定时器增加一倍所用的时间=1/1MHz=1uS

(4)对于“X”uS的时间延迟,计时器必须使“X”递增。

(5)2^16=65536是16位定时器可能的最大计数数。

(6)设TH是必须加载到TH寄存器的值,TL是必须加载到TL寄存器的值。

(7)然后,THTL=(65536-X)的十六进制等效值,其中(65536-X)被视为十进制。

二、使用8051单片机定时器产生1mS延迟的程序

下面的程序可用于产生1mS延迟,已被编写为子程序,以便可以在程序的任何地方调用它。也可以将其置于循环中以创建更长的时间延迟(1mS的倍数)。这里使用了8051的定时器0,它在MODE1(16位定时器)下运行。

DELAY: MOV TMOD,#00000001B // Sets Timer 0 to MODE1 (16 bit timer). Timer 1 is not used
       MOV TH0,#0FCH // Loads TH0 register with FCH
       MOV TL0,#018H // LOads TL0 register with 18H
       SETB TR0 // Starts the Timer 0
HERE: JNB TF0,HERE // Loops here until TF0 is set (ie;until roll over)
      CLR TR0 // Stops Timer 0
      CLR TF0 // Clears TF0 flag
      RET

上面的延迟例程可以循环两次以获得2毫秒的延迟,如下面的程序所示:

MAIN: MOV R6,#2D
LOOP: ACALL DELAY
      DJNZ R6,LOOP
      SJMP MAIN
DELAY: MOV TMOD,#00000001B 
       MOV TH0,#0FCH
       MOV TL0,#018H 
       SETB TR0 
HERE: JNB TF0,HERE 
      CLR TR0 
      CLR TF0 
      RET

使用定时器时要记住的几点:

(1)一旦设置了定时器标志(TF),程序员必须先将其清除,然后才能再次设置。

(2)定时器标志设置后定时器不会停止。程序员必须清除TR位才能停止定时器。

(3)一旦定时器溢出,程序员必须将初始起始值重新加载到TH和TL寄存器以开始向上计数。

(4)我们可以配置所需的计时器以在设置TF标志时创建中断。

(5)如果没有使用中断,那么我们必须使用一些条件分支指令检查定时器标志(TF)是否设置。

(6)使用单个8051定时器可能的最大延迟为65536uS,如果您使用12MHz晶体为单片机计时,则最小延迟为1uS。

三、使用8051单片机定时器生成方波

使用8051单片机定时器可以生成任何频率的方波(受控制器规格限制)。该技术非常简单。编写一个延迟子程序,延迟等于方波时间周期的一半。使任何端口引脚为高电平并调用延迟子程序。延迟子程序完成后,将相应的端口引脚拉低,调用延迟子程序增益。子程序完成后,再次重复循环。结果将是所选端口引脚上所需频率的方波。电路图如下所示,它可以用于任何方波,但程序必须相应。不同方波的程序如下图所示:

20211028110259.jpg

例1:1KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FEH
       MOV TL0,#00CH
       SETB TR0
HERE: JNB TF0,HERE
      CLR TR0
      CLR TF0
      SETB P1.0
      RET
      END

例2:2KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FCH
       MOV TL0,#018H
       SETB TR0
HERE:JNB TF0,HERE
     CLR TR0
     CLR TF0
     SETB P1.0
RET
END

例3:10KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FFH
       MOV TL0,#0CEH
       SETB TR0
HERE:JNB TF0,HERE
     CLR TR0
     CLR TF0
     SETB P1.0
RET
END
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 定时器
    +关注

    关注

    23

    文章

    3231

    浏览量

    114313
  • 8051单片机
    +关注

    关注

    5

    文章

    153

    浏览量

    25466
收藏 人收藏

    评论

    相关推荐

    等待与时间延迟

    各位老师指点一下,LABVIEW中的等待与时间延迟什么区别?
    发表于 03-26 09:18

    编程-定时之“等待”与“时间延迟”有啥区别?

    编程-定时之“等待”与“时间延迟”有啥区别?请看图片
    发表于 03-06 08:53

    关于时间延迟的问题

    通常情况下,我在3里放一个时间延迟的vi,按照程序运行顺序,先运行1,然后运行2,最后进入3激活延迟。我想当程序运行1时,3里的时间延迟vi同时被激活,开始计时。有没有可以使时间跟别的
    发表于 09-10 16:08

    8051定时器T0的定时功能自动代码生成工具

    该工程可自动生成8051系列单片机定时器0的定时功能代码,可根据设置的晶振频率和定时时间自动生成
    发表于 11-03 23:06

    相移和时间延迟滤波设计

    相移和时间延迟滤波设计内容有全通滤波,恒定时间延迟滤波或贝塞尔滤波,全通滤波
    发表于 12-01 12:53 18次下载
    相移和<b class='flag-5'>时间延迟</b>滤波<b class='flag-5'>器</b>设计

    延迟电路构成的定时器

    延迟电路构成的定时器
    发表于 04-03 09:45 734次阅读
    用<b class='flag-5'>延迟</b>电路构成的<b class='flag-5'>定时器</b>

    基于8051的Proteus仿真-定时器设计的门铃

    基于8051的Proteus仿真-定时器设计的门铃
    发表于 09-01 23:33 26次下载

    4小时顺序定时器电路图

    4小时顺序定时器在双定时器556的两个字时之间使用N8281分配器网络,不用大体积低漏电电容器,可以得到相当长的时间延迟
    发表于 05-06 16:47 3090次阅读
    4小时顺序<b class='flag-5'>定时器</b>电路图

    SAM器件上的各种定时器

    定时器是基于单片机的嵌入式应用中的基本模块。很难想象不使用定时器如何设计嵌入式应用。定时器作为外设,可生成周期性事件,用于测量时间间隔、
    发表于 03-30 15:55 6次下载
    SAM器件上的各种<b class='flag-5'>定时器</b>

    SAM系列MCU中的定时器的可能应用场景

    SAM 器件上的各种定时器 简介 定时器是基于单片机的嵌入式应用中的基本模块。很难想象不使用定时器如何设计嵌入式应用。定时器作为外设,可生成
    的头像 发表于 09-18 10:39 1805次阅读

    MCU中定时器的可能应用场景

    SAM 器件上的各种定时器 简介 定时器是基于单片机的嵌入式应用中的基本模块。很难想象不使用定时器如何设计嵌入式应用。定时器作为外设,可生成
    的头像 发表于 11-17 10:46 3257次阅读

    时间定时器开关怎样接线?

    时间定时器:又称时间定时器开关、定时器定时控制
    的头像 发表于 09-28 11:47 7767次阅读

    555定时器内部框图、工作原理和工作模式

    555定时振荡也就是通常所说的 555定时器 。 555定时器的用途非常广泛,可以 生成各种类型的脉冲 、 创建
    的头像 发表于 05-09 09:18 6148次阅读
    555<b class='flag-5'>定时器</b>内部框图、工作原理和工作模式

    STM32定时器时间计算方法

    STM32微控制定时器模块在嵌入式系统中非常常见,它被用于产生精确的时间延迟,或者用于实时时钟(RTC)等功能。为了充分利用STM32的定时器功能,理解其
    的头像 发表于 12-19 11:31 1.1w次阅读

    使用555定时器的可调双定时器电路

    定时器 IC 555 是最通用和最常用的 IC 之一,因为它的应用范围更广,如 PWM放大器、延迟定时器、开关电路、占空比选择、时钟脉冲发生
    的头像 发表于 02-25 15:16 1938次阅读
    使用555<b class='flag-5'>定时器</b>的可调双<b class='flag-5'>定时器</b>电路