51单片机——定时器/计数器

发布者:不懂之人最新更新时间:2022-05-31 来源: eefocus关键字:51单片机  定时器  计数器 手机看文章 扫描二维码
随时随地手机看文章

1.概述

        8051单片机内部有T0和T1两个定时器/计数器。它们既可用作定时器,也可用作计数器,可以通过编程来设置其使用方法。


2.定时器/计数器

2.1 定时功能

2.2.1 定时功能的用法

        当定时器/计数器用作定时器时,可以用来计算时间。如果要求单片机在一定的时间后产生某种控制,可将定时器/计数器设为定时器。单片机定时器/计数器的定时功能用法如图1所示。

图1 定时器/计数器的定时功能用法  


        要将定时器/计数器 T0设为定时器,实际上就是将定时器/计数器与外部输入断开,而与内部信号接通,对内部信号计数来定时。单片机的时钟振荡器可产生12MHz的时钟脉冲信号,经12分频后得到1MHz的脉冲信号,1MHz信号每个脉冲的持续时间为1μs,如果定时器T0对1MHz的信号进行计数,若从0计到65536,将需要65536μs,也即65.536ms。65.536ms后定时器计数达到最大值,会溢出而输出一个中断请求信号去中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将P1.0端口置“0”,该端口外接的发光二极管点亮。


2.1.2 任意定时方法

        在图1中,定时器只有在65.536ms 后计数达到最大值时才会溢出,如果需要不到65.536ms定时器就产生溢出,比如1ms后产生溢出,可以对定时器预先进行置数。将定时器初始值设为64536,这样定时器就会从64536开始计数,当计到65536时,定时器定时时间就为1ms而产生一个溢出信号。


2.2 计数功能

2.2.1 计数功能的用法

        当定时器/计数器用作计数器时,可以用来计数。如果要求单片机计数达到一定值时产生某种控制,可将定时器/计数器设为计数器。单片机定时器/计数器的计数功能用法如图2所示。

图2 定时器/计数器的计数功能用法


        用编程的方法将定时器/计数器T0设为一个16位计数器,它的最大计数值为216=65536。T0端(即P3.4引脚)用来输入脉冲信号。当脉冲信号输入时,计数器对脉冲进行计数,当计到最大值65536时,计数器溢出,会输出一个中断请求信号到中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将P1.0端口置“0”,该端口外接的发光二极管点亮。


2.2.2 任意计数方法

        在图2中,只有在T0端输入65536个脉冲时,计数器计数达到最大值才会溢出,如果希望输入100个脉冲时计数器就能溢出,可以在计数前对计数器预先进行置数,将计数器初始值设为65436,这样计数器就会从65436开始计数,当输入100个脉冲时,计数器的计数值就达到65536而产生一个溢出信号。


2.3 定时器/计数器的结构原理

2.3.1 定时器/计数器的结构

        8051单片机内部定时器/计数器的结构如图3所示。单片机内部与定时器/计数器有关的部件主要有以下几种:


        ① 两个定时器/计数器(T0和 T1)。每个定时器/计数器都是由两个8位计数器构成的16位计数器。


        ② TCON寄存器。TCON为控制寄存器,用来控制两个定时器/计数器的启动/停止。


        ③ TMOD寄存器。TMOD为工作方式控制寄存器,用来设置定时器/计数器的工作方式。两个定时器/计数器在内部还通过总线与CPU连接,CPU可以通过总线对它们进行控制。

图3 定时器/计数器的结构


2.3.2 定时器/计数器的工作原理

        由于定时器/计数器是在寄存器TCON和TMOD的控制下工作的,要让定时器/计数器工作,必须先设置寄存器 TCON 和 TMOD(可编写程序来设置)。单片机内部有2个定时器/计数器,它们的工作原理是一样的,这里以定时器/计数器T0为例进行说明。


1.定时器/计数器T0用作计数器


        要将定时器/计数器T0当作计数器使用,须设置寄存器TCON和TMOD,让它们对定时器/计数器T0进行相应的控制,然后定时器/计数器T0才开始以计数器的形式工作。


        (1)寄存器TCON和TMOD的设置将T0用作计数器时TCON、TMOD寄存器的设置内容主要有:


        ① 将寄存器TMOD的C/T位置“1”,如图8-3所示,该位发出控制信号让开关S0置“1”,定时器/计数器T0与外部输入端T0(P3.4)接通。


        ② 设置寄存器TMOD的M0、M1位,让它控制定时器/计数器T0的工作方式,比如让M0=1、M1=0,可以将定时器/计数器T0设为16位计数器。


        ③ 将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。


        (2)定时器/计数器T0的工作过程定时器/计数器T0用作计数器的工作过程有以下几步:


        ① 计数。定时器/计数器T0启动后,开始对外部T0端(P3.4)输入的脉冲进行计数。


        ② 计数溢出,发出中断请求信号。当定时器/计数器T0计数达到最大值65536时,会溢出产生一个信号,该信号将寄存器TCON的TF0位置“1”,寄存器TCON立刻向CPU发出中断请求信号,CPU便执行中断子程序。


2.定时器/计数器T0用作定时器


        要将定时器/计数器T0当作定时器使用,同样也要设置寄存器TCON和TMOD,然后定时器/计数器T0才开始以定时器形式工作。


        (1)寄存器TCON和TMOD的设置将T0用作定时器时TCON、TMOD寄存器的设置内容主要有:


        ① 将寄存器TMOD的C/T位置“0”,如图8-3所示,该位发出控制信号让开关S0置“2”,定时器/计数器T0与内部振荡器接通。


        ② 设置寄存器 TMOD 的 M0、M1位,让它控制定时器/计数器 T0的工作方式,如让M0=0、M1=0,可以将定时器/计数器T0设为13位计数器。


        ③ 将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。


        (2)定时器/计数器T0的工作过程定时器/计数器T0用作定时器的工作过程有以下几步:


        ① 计数。定时器/计数器T0启动后,开始对内部振荡器产生的信号(要经12分频)输入的脉冲进行计数。


        ② 计数溢出,发出中断请求信号。定时器/计数器T0对内部脉冲进行计数,由0计到最大值8192(213)时需要8.192ms的时间,8.192ms后定时器/计数器T0会溢出而产生一个信号,该信号将TCON寄存器的TF0位置“1”,TCON寄存器马上向CPU发出中断请求信号,CPU便执行中断子程序。


2.4 定时器/计数器的控制寄存器与四种工作方式

        定时器/计数器是在TCON寄存器和TMOD寄存器的控制下工作的,设置这两个寄存器相应位的值,可以对定时器/计数器进行各种控制。


2.4.1 定时器/计数器的控制寄存器TCON

        TCON寄存器的功能主要是接收外部中断源(INT0、INT1)和定时器/计数器(T0、T1)送来的中断请求信号,并对定时器/计数器进行启动/停止控制。TCON的字节地址是88H,它有8位,每位均可直接访问(即可位寻址)。TCON的字节地址、各位的位地址和名称功能如图4所示。

图4 TCON寄存器的字节地址、各位的位地址和名称功能


        TCON寄存器的各位功能在前面已介绍过,这里仅对与定时器/计数器有关的位进行说明。


        ① TF0位和TF1位:分别为定时器/计数器0和定时器/计数器1的中断请求标志位。当定时器/计数器工作产生溢出时,会将TF0或TF1位置“1”,表示定时器/计数器T0或T1有中断请求。


        ② TR0和TR1:分别为定时器/计数器0和定时器/计数器1的启动/停止位。在编写程序时,若将TR0或TR1设为“1”,那么T0或T1定时器/计数器开始工作;若设置为“0”,T0或T1定时器/计数器则会停止工作。 


2.4.2 定时器/计数器工作方式控制寄存器TMOD

        TMOD寄存器的功能是控制定时器/计数器T0、T1的功能和工作方式。TMOD寄存器的字节地址是89H,不能进行位操作。在上电(给单片机通电)复位时,TMOD寄存器的初始值为00H。TMOD的字节地址和各位名称功能如图5所示。


图5 TMOD的字节地址和各位名称功能


        在TMOD寄存器中,高4位用来控制定时器/计数器T1,低4位用来控制定时器/计数器T0,两者对定时器/计数器的控制功能一样,下面以TMOD寄存器高4位为例进行说明。


        ① GATE位:门控位,用来控制定时器/计数器的启动模式。当GATE=0时,只要TCON寄存器的TR1位置“1”,就可启动T1开始工作;当GATE=1时,除了需要将 TCON 寄存器的 TR1 位置“1”外,还要使引脚为高电平,才能启动T1工作。


        ② 位:定时、计数功能设置位。当时,将定时器/计数器设置为定时器工作模式;当时,将定时器/计数器设置为计数器工作方式。


        ③ M1、M0位:定时器/计数器工作方式设置位。M1、M0位取不同值,可以将定时器/计数器设置为不同的工作方式。TMOD寄存器高4位中的M1、M0用来控制T1的工作方式,低4位中的M1、M0用来控制T0的工作方式。M1、M0位不同取值与定时器/计数器工作方式的关系见表1。


表1 TMOD寄存器的M1、M0位值与定时器/计数器工作方式

2.4.3 定时器/计数器的工作方式

        在TMOD寄存器的M1、M0位的控制下,定时器/计数器可以工作在4种不同的方式下,不同的工作方式适用于不同的场合。


1.方式0


        当M1=0、M0=0时,定时器/计数器工作在方式0,它被设成13位计数器。在方式0时,定时器/计数器由TH、TL两个8位计数器组成,使用TH的8位和TL的低5位。


        (1)定时器/计数器工作在方式0时的电路结构与工作原理


        定时器/计数器T0、T1工作在方式0时的电路结构与工作原理相同。以T0为例,将TMOD寄存器的低4位中的M1、M0位均设为“0”,T0工作在方式0。定时器/计数器T0工作在方式0时的电路结构如图6所示。

图6 定时器/计数器T0工作在方式0时的电路结构 


        当T0工作在方式0时,T0是一个13位计数器(TH0的8位+TL0的低5位)。位通过控制开关S1来选择计数器的计数脉冲来源。当时,计数脉冲来自单片机内部振荡器(经12分频);当时,计数脉冲来自单片机T0引脚(P3.4引脚)。GATE位控制T0的启动方式。GATE位与引脚、TR0位一起经逻辑电路后形成CON电平,再由CON电平来控制开关S2的通断。当CON=1时,S2闭合,T0工作;当CON=0时,S2断开,T0停止工作(S2断开后无信号送给T0)。


        当GATE=0时,CON的值与TR0的值一致,TR0可直接控制T0的启动/停止。


        当GATE=1时,CON 的值由 TR0、两个值决定,其中TR0的值由编程来控制(软件控制),而的值由外部引脚的电平控制,只有当它们的值都为“1”时,CON的值才为“1”,定时器/计数器T0才能启动。 


        (2)定时器/计数器初值的计算若定时器/计数器工作在方式0,当其与外部输入端(T0引脚)连接时,可以用作13位计数器;当与内部振荡器连接时,可以用作定时器。


        ① 计数初值的计算。


        当定时器/计数器用作13位计数器时,它的最大计数值为8192(),当T0引脚输入8192个脉冲时,计数器就会产生溢出而发出中断请求信号。如果希望不需要输入8192个脉冲,计数器就能产生溢出,可以给计数器预先设置数值,这个预先设置的数值称为计数初值。


       在方式0时,定时器/计数器的计数初值可用下式计算:


        计数初值=−计数值


        比如希望输入1000个脉冲计数器就能产生溢出,计数器的计数初值应设置为7192 (8192−1000)。


        ② 定时初值的计算。


        当定时器/计数器用作定时器时,它对内部振荡器产生的脉冲(经12分频)进行计数,该脉冲的频率为fosc/12,脉冲周期为12/fosc,定时器的最大定时时间为·12/fosc,若振荡器的频率fosc为12MHz,定时器的最大定时时间为8192μs。如果不希望定时这么长,定时器就能产生溢出,可以给定时器预先设置数值,这个预先设置的数值称为定时初值。


        在方式0时,定时器/计数器的定时初值可用下式计算:


        定时初值=−定时值=−t·fosc/12


        比如单片机时钟振荡器的频率为12MHz(即12×106Hz),现要求定时1000μs(即1000 ×10−6s)就能产生溢出,定时器的定时初值应为


定时初值=−t·fosc/12=8192−1000×10−6×12×106/12=7192


2.方式1


        当M1=0、M0=1时,定时器/计数器工作在方式1,它为16位计数器。除了计数位数不同外,定时器/计数器在方式1的电路结构与工作原理与方式0完全相同。定时器/计数器工作在方式1时的电路结构(以定时器/计数器T0为例)如图7所示。


        定时器/计数器工作在方式1时的计数初值和定时初值的计算公式分别如下:


计数初值=−计数值


定时初值=−定时值=−t·fosc/12

图7 定时器/计数器在方式1时的电路结构


3.方式2


        定时器/计数器工作方式0和方式1时适合进行一次计数或定时,若要进行多次计数或定时,可让定时器/计数器工作在方式2。当M1=1、M0=0时,定时器/计数器工作在方式2,它为8位自动重装计数器。定时器/计数器工作在方式2时的电路结构(以定时器/计数器T0为例)如图8所示。

图8 定时器/计数器T0在方式2时的电路结构


        工作在方式2时,16位定时器/计数器T0分成TH0、TL0两个8位计数器,其中TL0用来对脉冲计数,TH0用来存放计数器初值。在计数时,当TL0计数溢出时会将TCON寄存器的TF0位置“1”,同时也控制TH0重装开始,将TH0中的初值重新装入TL0中,然后TL0又开始在初值的基础上对输入脉冲进行计数。


        定时器/计数器工作在方式2时的计数初值和定时初值的计算分别如下:


计数初值=−计数值


定时初值=−定时值=−t·fosc/12 


4.方式3


        定时器/计数器T0有方式3,而T1没有(T1只有方式0~2)。当TMOD寄存器低4位中的M1=1、M0=1时,T0工作在方式3。


        在方式3时,T0用作计数器或定时器。


        (1)T0工作在方式3时的电路结构与工作原理


        在方式3时,定时器/计数器T0用作计数器或定时器,在该方式下T0的电路结构如图9所示。

图9 T0工作在方式3时的电路结构


        在方式3时,T0被分成TL0、TH0两个独立的8位计数器,其中TL0受T0的全部控制位控制(即原本控制整个T0的各个控制位,在该方式下全部用来控制T0的TL0计数器),而TH0受T1的部分控制位(TCON的TR1位和TF1位)控制。


        在方式3时,TL0既可用作8位计数器(对外部信号计数),也可用作8位定时器(对内部信号计数);TH0只能用作8位定时器,它的启动受TR1的控制(TCON的TR1位原本用来控制定时器/计数器T1)。当TR1=1时,TH0开始工作,当TR1=0时,TH0停止工作,当TH0计数产生溢出时会向TF1置位。


        (2)T0工作在方式3时T1的电路结构与工作原理


        当T0工作在方式3时,它占用了T1的一些控制位,此时T1还可以工作在方式0~2(可通过设置TMOD寄存器高4位中的M1、M0的值来设置),T1在这种情况下一般用作波特率发生器。当T0工作在方式3时,T1工作在方式1和方式2的电路结构分别如图10(a)、(b)所示。

图10 T0在方式3时T1工作在方式1和方式2的电路结构


        图10(a)是T0在方式3时T1工作在方式1(或方式0)时的电路结构。在该方式下,T1是一个16位计数器,由于TR1控制位已被借用来控制T0的高8位计数器TH0,所以T1在该方式下无法停止,一直处于工作状态,另外由于TF1位也借给了TH0,所以T1溢出后也不能对TF1进行置位产生中断请求信号,T1溢出的信号只能输出到串行通信口,此方式下的T1为波特率发生器。


        图10(b)是T0在方式3时T1工作在方式2时的电路结构。在该方式下,T1是一个8位自动重装计数器,除了具有自动重装载功能外,其他与方式1相同。 

关键字:51单片机  定时器  计数器 引用地址:51单片机——定时器/计数器

上一篇:51单片机——中断系统结构
下一篇:KEIL 中C51编译器的限制

推荐阅读最新更新时间:2024-11-13 23:49

AT89S51单片机串行口的内部结构及功能介绍
AT89S51单片机串行口的内部结构如下图所示。它有两个物理上独立的接收、发送缓冲器SBUF(属于特殊功能寄存器),可同时发送、接收数据。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入,两个缓冲器共用一个特殊功能寄存器字节地址(99H)。 串行口的控制寄存器共有两个:特殊功能寄存器SCON和PCON。下面介绍这两个特殊功能寄存器各位的功能。 1、串行口控制寄存器SCON 串行口控制寄存器SCON,字节地址988H,可位寻址,位地址为98H~9FH。SCON的格式如下图所示。 下面介绍SCON中各位的功能。 (1) SM0、SMl:串行口4种工作方式选择位。 SM0、SM1两位的编码所对应的4种工作方式见下表。 表
[单片机]
AT89S<font color='red'>51单片机</font>串行口的内部结构及功能介绍
51单片机的串行口通信方式
介绍:串行口是单片机与外界进行信息交换的工具。 8051单片机的通信方式有两种: 并行通信:数据的各位同时发送或接收。 串行通信:数据一位一位次序发送或接收。参看下图: 单片机串行通信 并行通信 串行通信的方式: 异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下: 在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。 在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由
[单片机]
<font color='red'>51单片机</font>的串行口通信方式
ARM裸机之定时器中断
本文开发环境mini2440,实现目标:裸机实现定时器中断使LED0以1秒闪烁。 int.c函数 /* * init.c: 进行一些初始化 */ #include s3c24xx.h void disable_watch_dog(void); void clock_init(void); void memsetup(void); void copy_steppingstone_to_sdram(void); void init_led(void); void timer0_init(void); void init_irq(void); /* * 关闭WATCHDOG,否则CPU会不断重启 */ void disa
[单片机]
8051单片机指令系统按功能可分为几类?具有几种寻址方式?
MCS-51单片机 指令 系统按功能可分为5类: (1)数据传送指令  (2)算术运算指令   (3)逻辑运算和移位指令   (4)控制转移指令 (5)位操作指令 MCS-51单片机的指令系统提供了七种寻址方式,其对应的寻址范围如下表: 立即寻址 程序存储器 直接寻址 内部RAM低128个字节; 特殊功能寄存器SFR 寄存器寻址 R0~R7;A、B、DPTR、C 寄存器间接寻址 @R0、@R1、SP 内部RAM、堆栈指针SP @R0、@R1、@DPTR 外部RAM 变址寻址 @A+PC、@A+DPTR 程序存储器 相对寻址 P
[单片机]
51单片机CO2检测显示程序资料
这是一款51单片机CO2检测显示程序资料,二氧化碳传感器MH-Z19模块的T(TXD)接单片机的RXD, R(RXD)接单片机的TXD,V+连接单片机5v正极,V-连接单片机的地(串口TTL通信就需要连接这四根线);测量电压选用5V;单片机型号STC89C52,液晶显示屏型号LCD1602,电路连接按照那个测试图的;串口通信波特率9600,注意晶振要是11.0592M,否则会引起通信失败;传感器上电需要预热3分钟。 #include reg52.h #include stdio.h #include intrins.h #include lcd1602.H #define uchar unsigned char
[单片机]
<font color='red'>51单片机</font>CO2检测显示程序资料
51单片机矩阵键盘扫描和显示按下的次数
KEYCARD BIT 00H ;用于标志是否有键按下 KEYCOU EQU 5AH ;用于记录按下键的次数 ORG 0000H ;程序开始 AJMP START ORG 30H ;为避免占用中断向量区,主程序从30H开始 START: MOV SP,#5FH ;设置堆栈的初始地址 MOV P3,#0FH ;P3,P2,P0的初始化 MOV P2,#00H MOV P0,#0FFH CLR KEYCARD ;有按键标志清0 MOV KEYCOU,#0 ;计数初值赋0 LOOP: ;循环扫描键盘 ACALL KEY
[单片机]
单片机计数器计数脉冲检测汇编程序
4位数码管用2个573接到p0口,位选p2 段选P0口,电路详见单片机开发板的原理图: 点这里 采用定时器来记录脉冲 并用数码管输出 以下是源代码: ;********51hei单片机 计数脉冲检测汇编程序,数码管显示脉冲的的次数 ********************************** ORG 0000H JMP MAIN ORG 000BH JMP TT0 ORG 001BH JMP TT1 MOV 23H,#300 MOV 20H,#00H MOV SP,70H ;============================
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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