产品概述

51单片机计数程序 51单片机中的定时器和计数器

小编 2024-11-24 产品概述 23 0

51单片机中的定时器和计数器

从上面定时器/计数器的结构图中我们可以看出,16位的定时/计数器分别由两个8位专用寄存器组成,即:T0由TH0和TL0构成;T1由TH1和TL1 构成。其访问地址依次为8AH-8DH。每个寄存器均可单独访问。这些寄存器是用于存放定时或计数初值的。此外,其内部还有一个8位的定时器方式寄存器 TMOD和一个8位的定时控制寄存器TCON。这些寄存器之间是通过内部总线和控制逻辑电路连接起来的。TMOD主要是用于选定定时器的工作方式; TCON主要是用于控制定时器的启动停止,此外TCON还可以保存T0、T1的溢出和中断标志。当定时器工作在计数方式时,外部事件通过引脚T0 (P3.4)和T1(P3.5)输入。

定时计数器的原理:

一、定时器/计数器为定时工作方式时,

计数器的加1信号由振荡器的12分频信号产生,即每过一个机器周期,计数器加1,直至计满溢出为止。显然,定时器的定时时间与系统的振荡频率有关。因一个机器周期等于12个振荡周期,所以计数频率fcount=1/12osc。如果晶振为12MHz,则计数周期为:

T=1/(12×106)Hz×1/12=1μs

这是最短的定时周期。若要延长定时时间,则需要改变定时器的初值,并要适当选择定时器的长度(如8位、13位、16位等)。

二、定时器/计数器为计数工作方式时,

通过引脚T0和T1对外部信号计数,外部脉冲的下降沿将触发计数。计数器在每个机器周期的S5P2期间采样引脚输入电 平。若一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。此后的机器周期S3P1期间,新的计数值装入计数器。所以检测一个由1至0的跳 变需要两个机器周期,故外部事件的最高计数频率为振荡频率的1/24。例如,如果选用12MHz晶振,则最高计数频率为0.5MHz。虽然对外部输入信号 的占空比无特殊要求,但为了确保某给定电平在变化前至少被采样一次,外部计数脉冲的高电平与低电平保持时间均需在一个机器周期以上。

当CPU用软件给定时器设置了某种工作方式之后,定时器就会按设定的工作方式独立运行,不再占用CPU的操作时间,除非定时器计满溢出,才可能中断CPU 当前操作。CPU也可以重新设置定时器工作方式,以改变定时器的操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。

综上所述,我们已知定时器/计数器是一种可编程部件,所以在定时器/计数器开始工作之前,CPU必须将一些命令(称为控制字)写入定时/计数器。将控制字写入定时/计数器的过程叫定时器/计数器初始化。在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字(或相关位)写入控制寄存器,赋定时/计 数初值。下面我们就提出的控制字的格式及各位的主要功能与大家详细的讲解。

控制寄存器 定时器/计数器T0和T1有2个控制寄存器-TMOD和TCON,它们分别用来设置各个定时器/计数器的工作方式,选择定时或计数功能,控制启动运行,以及作为运行状态的标志等。其中,TCON寄存器中另有4位用于中断系统。

单片机计数功能的实现

单片机计数功能的实现方法有很多种,这里提供一种基于51单片机的计数器实现方法。51单片机内部有两个定时器,两个定时器的本质还是加一计数器,只不过作为定时器是计数内部脉冲,而作为计数器时是对外部脉冲计数。在计数模式下,P3.4端口是T0计数器的外部脉冲输入口,P3.5端口是T1计数器的外部脉冲输入口。

以下是一个简单的例子:

```c

#include <reg51.h>

sbit key_pin = P3^2; // 定义按键连接的端口和引脚

unsigned char count = 0; // 存储计数值的变量

void delay(unsigned int xms) // 延时函数

{

unsigned int i, j;

for (i = xms; i > 0; i--)

for (j = 112; j > 0; j--);

}

void main() // 主函数

{

while (1) // 无限循环

{

if (key_pin == 0) // 检测按键是否按下

{

delay(10); // 延时消抖

if (key_pin == 0)

{

count++; // 计数值加1

while (!key_pin); // 等待按键释放

}

}

}

}

```

相关问答

51单片机计数 器怎么用?

首1、先将定时器设置为计数器模式。2、其次,将外部脉冲接入到相应定时器的输入端。3、这样就可以使用计数器了。4、可以通过外部引脚对外部的脉冲信号进行...

51单片机 中定时器 计数 器使用方法?

先说下定时器使用方法:定时器使用方法:设置工作模式(设置特殊功能寄存器TMOD)设置计数寄存器处置设置TCON,通过TR0置1使计时器开始计数判断TCON寄存器T...

mcs- 51单片机计数 器最大计数值怎么算?

MCS-51单片机的计数器最大计数值取决于其位宽。对于8位计数器,最大计数值为2^8-1=255;对于16位计数器,最大计数值为2^16-1=65535。计数器从0开始计数,逐次增...

单片机计数 值怎么算?

一般最直接的想法就是,指定一个计时值x,然后从0开始累加计数,计数到x表示时间到,可以处理事务了。这种处理方法,需要一个数值比较器,每计一次数,就比较一...

51单片机 对外 计数 频率有何限制?

单片机的计数器最高频率收到单片机内核总线频率限制,因此对外技术频率不能超过晶振乘以倍频单片机的计数器最高频率收到单片机内核总线频率限制,因此对外技术...

单片机计数 值问题,注意不是计数初值.已知晶振频率为12MHz,...

[最佳回答]可以采用方式1公式为:定时时间=(65536-X)微妙可以计算1毫妙=1000微妙=65536-X则X=645362如果是1微妙可以采用方式2公式为:定时时间=(256-X)...

51单片机 如何定义t0为计时器t1为 计数 器?

常规方法测量脉冲的频率,利用51单片机的两个定时器来测量,一个定时器0来定时,一个定时器1作为计数方式voidTimer0Init()//2毫秒@12.000MHz{...常规方法测...

51单片机 怎么多任务通信?

1、51单片机无法实现多线程任务,只能实现单线程。这是由51单片机的硬件决定的,否则多线程芯片就没有必要设计出来了。2、51单片机的硬件资源,如:定时器、计...

单片机 定时/ 计数 器工作于定时和 计数 方式时有何异同点?

定时工作模式和技术工作模式的工作原理相同,只是计数脉冲来源有所不同:处于计数工作模式时,加法计数器对芯片端子T0(P3.4)或T1(P3.5)上的输入脉冲计数;处于...

51单片机 用C语言产生一个100以内的随机数,怎么生成?

C语言本身并不能产生随机数。介绍一个比较简单的随机数获取方法:启动单片机的定时器,让它自己跑不要发生溢出中断,用户操作时直接读计数器数值,那基本上就是...

猜你喜欢