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

发布者:haoying最新更新时间:2023-10-26 来源: elecfans关键字:定时器  时间延迟 手机看文章 扫描二维码
随时随地手机看文章

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


关键字:定时器  时间延迟 引用地址:如何使用8051定时器生成时间延迟?

上一篇:如何使用8051单片机控制双向直流电机
下一篇:微控制器提高基于8051的设计的电源效率

推荐阅读最新更新时间:2024-11-09 10:21

STM32F407 基本定时器配置输出PWM方波
介绍STM32F407定时器PWM波形输出配置方式。 通过逻辑分析采集波形数据进行可视化显示对比。 【1】定时器PWM功能介绍 STM32F4 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达4路的PWM输出! 【2】PWM波形输出通道介绍 ** 定时器3的硬件PWM通道:PA6 PA7 PB0 PB1** 下面截图是介绍定时器3通道的复用IO口模式配置方式 【3】配置PWM波形输出代码示例 在工程中增加pwm.c文件,写入以下代码 #include pwm.h
[单片机]
STM32F407 基本<font color='red'>定时器</font>配置输出PWM方波
通用定时器基本原理讲解
概述: STM32定时器:STM32F10x系列总共最多有8个定时器。 三种STM32定时器区别: 通用定时器功能特点描述: STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: 位于低速的APB1总线上(APB1) 16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数 为 1~65535 之间的任意数值。 4 个独立通道(TIMx_CH1~4),这些通道可以用来作为: 输入捕获 输出比较 PWM 生成(边缘或中间对齐模式) 单脉冲模式输出 可使用外部信号(
[单片机]
通用<font color='red'>定时器</font>基本原理讲解
STM32定时器(一)PWM输出
一、 STM32定时器分类众多,按照内核、外核标准分为两部分:核内定时器+核外定时器 1)核内定时器:Systick 2)外设定时器:特定应用定时器+常规定时器 3)特定应用定时器:LPTIM,RTC,WTD,HRTIM 4)常规定时器:基本定时器TIM6&TIM7)、通用定时器(TIM2TIM5,TIM9TIM14)、高级定时器(TIM1&TIM8) 【常规定时器: 基本定时器:计划没有任何对外输入/输出,常用作时基,实现基本的计数和定时功能。 通用定时器:除了基本的定时器的时基功能外,还可以对外作输入捕获、输出比较以及连接其他传感器接口(除了编码器和霍尔传感器) 高级定时器:此类的定时器功能强大,除了具备通用的定时器的功
[单片机]
STM32<font color='red'>定时器</font>(一)PWM输出
8051系列单片机软件精确延时研究(二)
  由前篇可知,在DelayX10us()函数中用for循环延时会产生10个机器周期的固定误差,其中X传值、调用函数、子函数返回共5个机器周期,这是只要调用带参数子函数都有的、固定不变的;for循环判断x 0并跳转产生额外的5个机器周期的误差。 改进   根据《在单片机KeilC开发环境中设计精确的延时函数》中提到的内容,可将for循环改为while(--x),以消除for循环产生的额外5个机器周期的误差。   注意:应使用while(--x),这样对应生成的汇编语句才是DJNZ。如果使用while(x--),将额外产生几个指令,导致此延时函数不准。   更改后的程序如下: //非精确延时10*X
[单片机]
<font color='red'>8051</font>系列单片机软件精确延时研究(二)
STM32有哪几种定时器 STM32高级定时器有哪些功能
在数字电路中时钟是整个电路的心脏,电路的的一举一动都是根据时钟节拍下进行的,随着信息量逐渐提高,对硬件信息处理能力提出了更大的需求,时钟作为数字硬件的关键成员,其性能需要我们关注,尤其在高速电路设计中对模拟转换芯片对时钟性能有很高的需求,因此正确选择时钟是很关键的一步,前提是我们要了解时钟的关键参数咯。在数字电路中最常见的时钟元件有晶振和锁相环、时钟缓冲器等,本节对外部定时器进行重点讲解。 STM32 定时器专题讲解 SysTick定时器的功能比较单一,主要是供给系统使用的,系统默认设置为1ms触发一次中断。而用户想要使用自己的定时器,STM32提供的用户定时器不但数量多且功能更加强大。不同型号的STM32提供的定时器数量不同
[单片机]
STM32有哪几种<font color='red'>定时器</font> STM32高级<font color='red'>定时器</font>有哪些功能
基于C8051F410的DHT11温湿度传感器驱动编写
这个也是在暑假培训时做的一个小东西,之前在网上买了一些传感器,还花了不少大洋,于是就拿来练手了。 这个DHT11的输出引脚还要加上拉电阻,真是麻烦,程序也比较不好,如果连线出现问题就会死机,建议参考下篇文章对AM2305的驱动编写,不过那东西可要一百多呢,这个才几块钱。 #include C8051F410.h // SFR declarations #include stdio.h #define SYSCLK 24500000 // SYSCLK frequency in Hz #define BAUDRATE 9600 // Baud rate of UART in b
[单片机]
51单片机产生PWM软件延时和定时器产生两种方法
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。但是
[单片机]
51单片机产生PWM软件延时和<font color='red'>定时器</font>产生两种方法
浅谈8051的学习方法
从大二开始学习51单片机至今已有两年多了。期间,玩过AVR,飞思卡尔,后来买了ARM9实验板,先是当做单片机在裸机上跑些简单的程序,后来上了Linux,编写一些简单的程序及QT应用;充分利用了网络上的资源,现在写写学习心得,希望对初学者有些帮助,也算上回馈互联网吧!有说得不好之处还请多多指教,欢迎大虾们拍砖。废话少说,转入主题: 一、坚定信念 学习单片机,刚开始不是一件好玩的事,甚至可以说是件痛苦的事情,就算是入门后也有不少痛苦的经历,这有待你去探索。所以,对于初学者来说必须有心理准备,不能半途而废。如果你是哪种遇到问题不能自己专研,静心解决问题的,建议你还是不要学习单片机吧。因为学习过程中会有很多很多的问题,特别是对于那
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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