在这个项目中,我将讨论有关计时器的一点点8051微控制器以及如何使用8051个计时器生成延迟。
时间延迟的产生是嵌入式系统中最重要的概念。大多数情况下,我们需要在任何微控制器应用程序中的两个操作之间生成精确的时间延迟。我们可以使用诸如循环或使用内置延迟功能之类的技术生成时间延迟。
但是,这些不是生成时间延迟的精确方法,因此我们将进入计时器以产生准确的时间延迟。这个概念类似于时间延迟继电器概念。
项目背后的原理
大多数控制器都有内置的计时器。这些计时器不仅用于生成时间延迟,而且用于计数目的。当操作或事件发生时,计数器的值会增加1。
另一方面,计时器用于生成延迟。微控制器中的计时器由SFRS(特殊功能寄存器)控制。以不同操作方式的计时器由特殊功能寄存器配置。
该项目的主要原则是在其特殊功能寄存器的帮助下,使用8051个计时器生成延迟。
电路原理图
即使外部组件(振荡器除外)在产生延迟方面并没有太多,但我制作了一个简单的电路,在这里,我将以1秒的延迟打开和关闭LED,并在此延迟借助下生成此延迟8051计时器。
需要组件
- AT89C51微控制器
- 8051程序员
- 编程电缆
- 引领
- 330Ω电阻
- 2 - 10kΩ电阻
- 10μF/16V电容器
- 2 - 33pf电容器
- 11.0592MHz晶体
- 按钮
电路设计
该电路中的主要组件是AT89C51控制器。8051微控制器的重置电路由按钮,10kΩ电阻和10μF电容器组成。
11.0592MHz UARTZ晶体和两个33PF陶瓷电容器形成了8051微控制器的振荡器电路,并连接到第18和19销。
最后,通过330Ω电阻将LED连接到P2.0,以指示时间延迟。
8051计时器注册说明
TMOD寄存器
上部nibble(TMOD.7至TMOD.4)用于配置Timer1,并且使用下部nibble(TMOD.3至TMOD.0)来配置Timer0。
门:如果此引脚很高,则在微控制器的相应int引脚处中断时,将启用相应的计时器。
C/T:该引脚用于选择计时器或计数器。如果此引脚很高,则用作计数器来计算外部事件。如果此引脚很低,则用作产生时间延迟的计时器。
M1和M0:这些位用于选择不同的计时器模式。
13位计时器:该模式使用来自高字节的8位,其余5位来自低字节。在此模式下计时器的值是0000h到1FFFH
16位计时器:此模式最常用于产生时间延迟。在此模式下,所有16位用于计时器,值从0000H到FFFFH不等。
如果将值xxxxh加载到计时器寄存器中,则产生的时间延迟等于[(FFFFH - XXXXH+1)*(一个时钟脉冲的周期)]。
一个时钟脉冲的时间段等于1.085μs11.0592 MHz频率。
8位自动重新加载:在此模式下,将初始值加载到高字节中,并将相同的值加载到低字节中。计时器值从00h到FFH。此模式用于设置串行通信的波特率。
拆分模式:在此模式下,计时器分为两个8位计时器。这8位计时器可以计数从00h到FFH。此模式用于我们需要附加8位计时器或计数器的应用程序。
TCON寄存器
这是用于控制计时器操作的特殊功能寄存器。在此寄存器中,仅使用上部nibble来控制计时器,其余部分用于中断。
- TF1:该位在计时器1溢出上自动设置为1。
- TR1:该位用于启用计时器1.必须高才能启用Timer1。
- TF0:当timer0溢出时,将自动设置为一个。
- TR0:将1放在此位中以启用计时器0。
使用8051个计时器生成精确延迟的步骤
为了准确产生时间延迟,
- 将时间延迟分为计时器时钟周期。
nnnn =时间延迟/1.085μs
- 从65536中减去结果值。
mmmm = 65536-nnnn
- 将差异值转换为Hexa小数形式。
mmmmd = xxyyh
- 将此值加载到计时器寄存器。
th = xxh
tl = yyh
延迟功能生成1 ms延迟
为了生成1ms的延迟,使用上述步骤的计算如下。
- nnnn = 1ms/1.085μs≈922。
- mmmm = 65536-922 = 64614
- 64614在十六进制中= fc66h
- 用0xFC和TL加载TH,并用0x66加载
以下功能将使用8051计时器0生成1 ms的延迟。
使用计时器的LED闪烁代码
为了证明使用8051个计时器的延迟功能,我将闪烁2秒钟的LED,即LED将持续1秒和关闭1秒。
电路模拟视频
如何操作?
- 最初将程序刻录到AT89C51控制器
- 根据电路图给出连接
- 打开电源,现在您可以在某个时间延迟下观察到LED的切换。
- 如果将输出连接到示波器,则可以观察方波。
电路应用
- 用于嵌入式系统应用中,我们需要精确的时间延迟。
- 该系统用于生成方波。
- 用于超声模块应用。
3个回应
今天对您来说美好的一天。我的问题是如何下载代码,请回复
请我只需要用于Thiis项目的代码
我创建了1000个循环以获得1秒,但它给出了2秒延迟为什么为什么要?