在这个项目中,我将讨论一点定时器在8051单片机,也如何产生一个延迟使用8051定时器。
时延的产生是嵌入式系统中最重要的概念。大多数时候,我们需要在任何微控制器应用程序的两个动作之间产生精确的时间延迟。我们可以使用循环或在构建延迟函数中使用技术来产生时间延迟。
但是,这些不是用于产生时间延迟的精确方法,以便我们将用于定时器以产生准确的时间延迟。这个概念类似于时间延迟中继概念。
项目背后的原则
大多数控制器都有内置计时器。这些定时器不仅用于产生时间延迟,而且用于计数目的。当一个动作或一个事件发生时,计数器的值增加1。
另一方面的定时器用于生成延迟。微控制器中的定时器由SFR(特殊功能寄存器)控制。不同操作模式的定时器由特殊功能寄存器配置。
该项目背后的主要原则是在其特殊功能寄存器的帮助下使用8051定时器生成延迟。
电路图
尽管外部组件(振荡器除外)没有太大的产生延迟,但我已经制作了一个简单的电路,在那里我将闪烁一个延迟1秒的延迟延迟的LED,并且借助延迟8051定时器。
需要组件
- AT89C51微控制器
- 8051程序员
- 编程电缆
- 领导
- 330Ω电阻
- 2 - 10kΩ电阻
- 10μF/ 16V电容器
- 2 - 33PF电容器
- 11.0592 mhz的水晶
- 按钮
电路设计
该电路的主要组成部分是AT89C51控制器。8051单片机的复位电路由按钮、10KΩ电阻和10μF电容组成。
一个11.0592MHz Uartz晶体和两个33PF陶瓷电容器形成8051微控制器的振荡器电路,并连接到销18和19。
最后,一个LED通过330Ω电阻连接到P2.0来表示时间延迟。
8051定时器寄存器描述
TMOD注册
上部啃(tmod.7至tmod.4)用于配置Timer1,较低的啃(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μ11.0592MHz频率。
8位自动重新加载:在此模式下,初始值加载到高字节,并且将相同的值加载到低字节中。定时器值是从00h到ffh。此模式用于设置串行通信的波特率。
分割模式:在这种模式下,定时器分为两个8位定时器。这些8位定时器可以从00H计数到FFH。这种模式用于需要额外的8位定时器或计数器的应用程序。
TCON REGURRE.
它是寄存器的一个特殊功能,用来控制定时器的操作。在这个寄存器中,只有上层位用来控制定时器,其余位用于中断控制。
- TF1:该位在计时器1溢出时自动设置为1。
- TR1:该位用于启用定时器1.该引脚必须高电平以启用Timer1。
- TF0:当timer0溢出时自动设置为1。
- TR0.: 1位,使定时器0生效。
使用8051定时器产生精确延迟的步骤
为了准确地生产时间延迟,
- 使用定时器时钟周期划分时间延迟。
nnnn =时间延迟/1.085μs
- 从65536中减去结果值。
嗯= 65536 - nnnn
- 将差值转换为十六进制形式。
MMMMd = XXYYh
- 将这个值加载到计时器寄存器中。
th = xxh.
TL = YYh
延迟函数生成1 ms延迟
为了产生1ms的延迟,使用上述步骤的计算如下。
- nnnn = 1ms /1.085μs≈922。
- MMMM = 65536-922 = 64614
- 64614在十六进制= FC66H
- 用0xFC和TL加载0x66
以下功能将使用8051计时器0生成1 ms的延迟。
使用定时器闪烁的代码
为了展示使用8051定时器的延迟的运行,我将闪烁,闪烁的LED为2秒,即LED将在1秒钟内,关闭1秒钟。
电路模拟视频
如何操作?
- 最初将程序刻录到AT89C51控制器
- 根据电路图给出连接
- 打开电源,现在您可以观察到LED的切换,随着时间的推移。
- 如果将输出连接到示波器,则可以观察方波。
电路应用
- 用于嵌入式系统应用中,我们需要精确的延时时间。
- 该系统用于生成方波。
- 用于超声波模块应用。
3反应
今天好日子。我的问题是如何下载代码请回复
请仅需要代码为Thiis项目
我创建了1000的循环获得1秒,但它给了2sec延迟为什么如此???????????