首页 百科知识 定时器计数器的基本结构及工作原理

定时器计数器的基本结构及工作原理

时间:2022-10-22 百科知识 版权反馈
【摘要】:本章主要讲解定时/计数器的定时方法和功能,以及定时/计数器的工作方式,从而掌握单片机内部定时器/计数器的控制方法,并能够应用定时中断进行程序设计。定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号。目前常用的单片机中往往都配备了定时器/计数器。

第5章 AT89S52单片机定时器/计数器

【教学目的】

本章主要讲解定时/计数器的定时方法和功能,以及定时/计数器的工作方式,从而掌握单片机内部定时器/计数器的控制方法,并能够应用定时中断进行程序设计。

【教学要求】

本章要求了解可编程定时器的优点及AT89S52单片机内部定时器的特点,初步掌握AT89S52单片机内部定时器/计数器的结构,掌握单片机内部定时器/计数器的控制方法,掌握定时器/计数器几种工作方式的特点及差异。

【重点难点】

本章的重点是单片机内部定时器/计数器的结构及特点,定时器/计数器的控制方法;定时器/计数器几种工作方式的特点。难点是定时中断程序设计。

【知识要点】

本章的重要知识点有定时器的结构、定时器控制、定时器的工作模式及应用、定时中断程序设计。

5.1 定时器/计数器基本原理

定时器/计数器(timer/counter)是单片机硬件结构中一个重要组成部分,定时器主要完成系统运行过程中的定时功能,而计数器主要用于对外部事件的计数,在工业检测、自动控制以及智能仪器等方面起着重要的作用。

5.1.1 定时/计数的基本概念

定时和计数是日常生活和生产中最常见和最普遍的问题。在计算机系统、工业控制领域都存在定时、计时和计数问题。一天24小时的计时称为日时钟,长时间的计时(日、月、年直至世纪的计时)称为实时钟。生活中定时/计数的例子也有很多:汽车上的里程表、水电气表的度量、上下课的铃声等等。

总结以上的各种实例,我们发现在定时/计数的过程中,都有一个标准的问题,比如1小时是3600秒,如果把“秒”作为一个标准量程的话,只要计数3600个,就是1小时。在工业生产中,我们也有这样的办法,电缆厂对电缆长度的度量,通常情况下用一个周长是1米的轮子,将电缆绕在上面一周,由电缆带动轮子转动,这样轮转一周就是线长1米,所以只要记下轮子转了多少圈,就能知道走过的电缆线有多长了。

定时器和计数器功能基本上都是使用相同的逻辑实现的,而且这两个功能都包含输入的计数信号。计数器用来计数并指示在任意间隔内输入信号(事件)的个数,而定时器则对规定间隔内输入的信号个数进行计数,用来指示经历的时间。换句话说,定时器和计数器功能在使用对象和输入的信号方面不相同,定时器是对计算机内部的基准时钟源产生的脉冲进行计数,计数器是对外部脉冲计数,定时与计数本质上都是对脉冲计数。因此,人们就统称它们为定时/计数器。

定时器由数字电路中的计数电路构成,通过记录高精度晶振脉冲信号的个数输出准确的时间间隔。计数电路在记录外设提供的具有一定随机性的脉冲信号时,主要反映脉冲的个数(进而获知外设的某种状态),又称为计数器。例如,微机控制系统中往往使用计数器对外部事件计数。

在单片机中,定时/计数器作定时功能用时,对机器周期计数(由单片机的晶体振荡器经过12分频后得到),因每次计数的周期是固定的,所以根据它计数的多少就可以很方便地计算出它计数的时间,单片机中的定时器/计数器的基本原理如图5-1所示。

图5-1 定时器/计数器的基本原理

5.1.2 溢出的基本概念

从一个生活中的例子看起:一个水盆在水龙头下,水龙头没关紧,水一滴滴地滴入盆中。盆的容量是有限的,水滴持续落下,盆中的水慢慢变满,最终有一滴水使得盆中的水满了,这就是“溢出”。单片机中的定时器/计数器由两个8位的RAM单元组成,即每个计数器都是16位的计数器,最大的计数量是65 536,当计数计到65 536就会产生溢出,这时就会产生中断,完成定时/计数的任务。

如果一个空的盆要10 000滴水滴进去才会满,开始滴水之前可以先放入一部分水,叫做计数初值。如果现在要计数10 000,那么可以先放入1 000滴水,也就是计数初值为1 000,再计数9000就可以溢出产生中断。

单片机中通常采用计数初值的办法,如果每个脉冲是1μs,则计满65 536个脉冲需时65.536ms,如果现在要定时10ms(10 000μs),只要在计数器里面放进55 536就可以了。

5.1.3 定时/计数的主要方法

单片机实现定时或计数,主要有三种方法。

1.软件延时

软件延时利用微处理器执行一个延时程序段实现。因为微处理器执行每条指令都需要一定时间,通过指令的循环实现软件延时。软件定时具有不使用硬件的特点,但却占用了大量CPU时间。另外,软件定时精度不高,在不同系统时钟频率下,执行一条指令的时间不同,同一个软件延时程序的定时时间也会不同。

2.硬件定时

硬件定时采用数字电路中的分频器将系统时钟进行适当分频产生需要的定时信号,也可以采用单稳电路或简易定时电路(如常用的555定时器)由外接RC(电阻、电容)电路控制定时时间。这样的定时电路较简单,利用不同分频倍数或改变电阻阻值、电容容值使定时时间在一定范围内改变。

3.可编程的硬件定时

可编程定时器/计数器最大特点是可以通过软件编程来实现定时时间的改变,通过中断或查询方法来完成定时功能或计数功能。这种电路不仅定时值和定时范围可用程序改变,而且具有多种工作方式,可以输出多种控制信号,具备较强的功能。

5.2 定时器/计数器的基本结构及工作原理

目前常用的单片机中往往都配备了定时器/计数器。在AT89S52芯片内包含有三个16位的定时器/计数器:T0、T1和T2。在这里不详细讲解T2定时/计数器,如果需要可以参考AT89S52的相关资料。

5.2.1 定时器/计数器功能

AT89S52单片机定时器/计数器的基本部件是两个8位的计数器(T1计数器分为高8 位TH1和低8位TL1,T0计数器的高8位是TH0,低8位是TL0)。

定时器/计数器的核心是一个加1计数器,在作定时器使用时,它对机器周期进行计数,每过一个机器周期计数器加1,直到计数器计满溢出。输入的时钟脉冲是由晶体振荡器的输出经12分频后得到的,因此,时钟脉冲频率为晶振频率的1/12,所以定时器也可看做是对单片机机器周期的计数器。由于一个机器周期由12个振荡周期组成,定时器的定时时间不仅与计数器的初值即计数长度有关,而且还与系统的时钟频率有关,如果晶振频率为12MHz,则定时器每接收一个输入脉冲的时间为1µs。

当它用作对外部事件计数时,计数器接相应的外部输入引脚T0(P3.4)或T1(P3.5)。在每个机器周期的S5P2时采样外部输入,计数器加1操作发生在检测到这种跳变后的下一个机器周期的S3P1期间,因此需要两个机器周期(24个振荡周期)来识别一个从“1”到“0”的跳变,当采样值在这个机器周期为1,在下一个机器周期为0时,则计数器加1,最高计数频率为晶振频率的1/24。对外部输入信号的占空比没有特别的限制,但必须保证输入信号电平在它发生跳变前至少被采样一次,因此输入信号的电平至少应在一个完整的机器周期中保证不变。

5.2.2 定时器/计数器的结构

AT89S52单片机内部的定时/计数器的结构如图5-2所示。定时器T0由特殊功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特殊功能寄存器TL1(低8位)和TH1(高8位)构成,其访问地址依次为8AH~8DH。每个寄存器均可单独访问,这些寄存器是用于存放定时或计数初值的。AT89S52的定时器/计数器是一种可编程部件,在定时器/计数器开始工作之前,CPU必须将一些命令(控制字)写入定时/计数器。特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。程序开始时需对TMOD和TCON进行初始化编程,以定义它们的工作方式和控制T0和T1的计数。将控制字写入定时/计数器的过程叫定时器/计数器初始化。在初始化过程中,要将工作方式控制字写入方式寄存器,工作状态字写入控制寄存器,CPU就会按设定的工作方式独立运行。

图5-2 AT89S52定时器/计数器结构框图

1.定时器/计数器方式寄存器TMOD

定时器/计数器方式控制寄存器TMOD在特殊功能寄存器中,字节地址为89H。TMOD不能进行位寻址,只能用字节传送指令设置定时器工作方式,低半字节定义为定时器/计数器0,高半字节定义为定时器/计数器1。复位时,TMOD所有位均为0。TMOD的格式如表5-1所示。

表5-1 TMOD寄存器各位定义

M1、M0:工作方式选择位。M1、M0用来定义定时器/计数器的四种工作方式,如表5-2所示。

表5-2 定时/计数器工作方式选择表

C/:功能选择位:C/位为定时器方式或计数器方式选择位。C/=1时,为计数器方式;C/=0时,为定时器方式。

GATE:门控制位,确定定时器的开启与关闭。当GATE=0时,只要定时器控制寄存器TCON中的TR0(或TR1)被置1时,T0(或T1)被允许开始计数(TCON各位含义见后面叙述)。

当GATE=1时,外部中断引脚的输入电平控制T0或T1的开启与关闭。

例:设置定时器1为定时工作方式,要求软件启动定时器1,按方式2工作。定时器0为计数方式,要求由软件启动定时器0,按方式1工作。设定控制字,并进行初始化。

解:C/位(D6)是定时或计数功能选择位,定时/计数器1工作在定时器方式,D6为0。

定时/计数器1工作在方式2,M0(D4)M1(D5)的值必须是1 0。

设定定时器0为计数方式。定时/计数器0的工作方式选择位C/=1

软件启动定时器0,当门控位GATE=0时,定时/计数器的启停就由软件控制。

定时/计数器0工作在方式1,M0(D0)M1(D1)的值必须是0 1。最后各位的情况如下:

D7 D6 D5 D4 D3 D2 D1 D0

0  0 1  0  0 1  0  1    25H

执行MOV TMOD,#25H这条指令就可以实现上述要求。

2.定时器/计数器控制寄存器TCON

TCON是定时器/计数器0和1(T0,T1)的控制寄存器,它同时也用来锁存T0、T1的溢出中断请求源和外部中断请求源。TCON寄存器复位时为00H,可以进行位寻址。定时器/计数器控制寄存器TCON字节地址为88H,其各位定义如表5-3所示。

表5-3 TCON寄存器各位定义

TCON中与中断相关的标志位定义如下:

TF1:定时器1溢出标志位。当T1计满溢出时,由硬件使TF1置1,申请中断。进入中断服务程序后,由硬件自动清0,在查询方式下用软件清0。

TR1:定时器1运行控制位。TR1置1,启动定时器1;TR1置0则停止工作。TR1由软件置1或清零。

TF0:定时器0溢出标志。其功能及操作情况同TF1。

TR0:定时器0运行控制位。其功能及操作情况同TR1。

IE1:外部中断1中断请求标志。IT1=1时,外部中断1引脚上的电平由1变0时,IE1由硬件置位,外部中断1请求中断。当CPU响应中断并转向该中断服务程序执行时,由内部硬件自动清0。

IT1:外部中断1()电平触发方式或者脉冲触发方式控制位。IT1=1时,外部中断1为负边沿触发方式,引脚上的电平从高到低负跳变有效。IT1=0时,外部中断1为电平触发方式。上输入低电平有效。

IE0:外部中断0中断请求标志。如果IT0置1,则当上的电平由1变0时,IE0由硬件置位。在CPU把控制转到中断服务程序时由硬件使IE0复位。

IT0:外部中断源0触发方式控制位,其含义同IT1。

5.3 AT89S52单片机定时器/计数器的工作方式

AT89S52单片机内有四种工作方式,其控制字和状态均在相应的特殊功能寄存器中,通过对控制寄存器的编程,就可方便地选择适当的工作方式。

5.3.1 定时器/计数器的初始化

定时器/计数器是一种可编程部件,功能是由软件编程确定的,使用定时/计数器前需要对其进行初始化,使其按设定的功能工作。初始化的一般步骤如下:

(1)确定工作方式(即对TMOD赋值)。

(2)预置定时或计数的初值(可直接将初值写入TH0、TL0或TH1、TL1)。

(3)根据需要开放定时器/计数器的中断。

(4)启动定时器/计数器。

5.3.2 工作方式0~13位定时器/计数器

定时/计数器0的工作方式0电路逻辑结构如图5-3(定时/计数器1与其完全一致)所示。工作方式0是13位计数结构的工作方式,其计数器由TH的全部8位和TL的低5位构成,TL的高3位没有使用。当C/=0时,多路开关接通振荡脉冲的12分频输出,13位计数器以此进行计数,这就是定时工作方式。当C/=1时,多路开关接通计数引脚(T0),外部计数脉冲由引脚T0输入,当计数脉冲发生负跳变时,计数器加1,这就是计数工作方式。

图5-3 定时/计数器0工作方式0逻辑结构

在方式0下,当为计数工作方式时,计数值的范围是:1~8192(213);当为定时工作方式时,定时时间的计算公式为:

(213-计数初值)×晶振周期×12

(213-计数初值)×机器周期

其时间单位与晶振周期或机器周期相同。

例:当某单片机系统的外接晶振频率为6MHz时,计算系统的最大、最小定时时间。

系统的最小定时时间为:

  [213-(213-1)]×[1/(6×106)]×12=2×10-6=2(µs)

最大定时时间为:

  (213-0)×[1/(6×106)]×12=16 384×10-6=16 384(µs)

5.3.3 工作方式1~16位的定时/计数器

当M1M0=01时,定时/计数器处于工作方式1,此时,定时/计数器的等效电路如图5-4所示,仍以定时器0为例,定时器1与之完全相同。

图5-4 定时器/计数器0工作方式1逻辑结构

可以看出,方式0和方式1的区别仅在于计数器的位数不同,方式0为13位,而方式1则为16位,由TH0作为高8位,TL0为低8位,有关控制状态字(GATA、C/、TF0、TR0)和方式0相同。

在工作方式1下,计数器的计数值范围是:1~65 536(216

当为定时工作方式1时,定时时间的计算公式为:

(216-计数初值)×晶振周期×12

(216-计数初值)×机器周期,

其时间单位与晶振周期或机器周期相同。

例:设定时器T0以方式1工作,现在需要延时1s,试计算计数初值,并编写中断程序,fosc=12MHz。

解:

(1)计算计数初值

用定时器获得100ms的定时时间再加10次循环得到1s的延时,可算得100ms定时的定时初值。

(216-TC0)×2µs=100ms

TC0=216-50 000=15 536=3CB0H

TH0=3CH,TL0=B0H

(2)TMOD寄存器初始化

M1M0=01,C/=0,GATE=0

因此

TMOD=01H

(3)程序设计

5.3.4 工作方式2~8位自动重装的定时/计数器

当M1M0=10时,定时/计数器处于工作方式2。以定时/计数器0为例,此时定时器的等效电路如图5-5所示,构成自动重新装入计数初值。

图5-5 定时/计数器工作方式2等效电路

工作方式2中,16位计数器分为两部分,TLx为8位加1计数器,THx为8位初值暂存器,即以TL0为计数器,以TH0作为预置寄存器。初始化时把计数初值分别加载至TL0 和TH0中,当计数溢出时,由预置寄存器TH以硬件方法自动给计数器TL0重新加载,这种工作方式适合于重复计数的应用场合。

在工作方式2下,计数器的计数值范围是:1~256(28

当定时器工作在方式2时,定时时间的计算公式为:

(28-计数初值)×晶振周期×12

或 (28-计数初值)×机器周期,

其时间单位与晶振周期或机器周期相同。

例:用定时器1以工作方式2实现计数,每计数100次进行累加器加1操作。

(1)计算计数初值

计数初值=28-100=156D=09CH

TH1=09CH,TL1=09CH

(2)TMOD寄存器初始化

M1M0=10,C/=1,GATE=0

因此

TMOD=60H

(3)程序设计

5.3.5 工作方式3

当M1M0=11时,定时/计数器处于工作方式3,此时定时器的等效电路如图5-6所示。在工作方式3模式下,定时/计数器1的工作方式与之不同。方式3对定时器T0和定时器T1是不相同的。若T1设置为方式3,则停止工作(其效果与TR1=0相同)。所以方式3只适用于T0。

图5-6 定时/计数器工作方式3等效电路

当T0工作在方式3时,TH0和TL0分成2个独立的8位计数器。其中,TL0既可用作定时器,又可用作计数器,并使用原T0的所有控制位及其定时器中断标志和中断源。TH0只能用作定时器,并使用T1的控制位TR1、中断标志TF1和中断源。

例:某用户系统中已使用了2个外部中断,并置定时器T1工作于模式2,作串行口波特率发生器用。现要求再增加一个外部中断源并由P1.2输出一个5kHz的方波。fosc=12MHz。

解:为了不增加其他硬件开销,可设置T0工作于模式3计数方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚由1至0的负跳变时,TL0立即产生溢出,申请中断,相当于边沿触发的外部中断源。

T0模式3下,TL0作计数用,而TH0可用作8位的定时器,定时控制P1.2输出5kHz方波信号。

TL0的计数初值为FFH。

TH0的计数初值:

P1.2的方波频率为5kHz,故周期T=1/5kHz=0.2ms=200µs。

所以用TH0定时100µs,计数初值T0=256-100×12/12=156。

程序如下:

MOV TMOD,#27H     ;T0模式3,计数;T1模式2,定时

MOV TL0,#0FFH     ;TL0计数初值

MOV TH0,#156      ;TH0计数初值

MOV TH1,#data     ;data是根据波特率要求设置的常数

MOV TL1,#data

MOV TCON,#55H     ;外部中断0、1边沿触发,启动T0、T1

MOV IE,#9FH      ;开放全部中断

TL0溢出中断服务程序(由000BH转来);

TL0INT:

MOV TH0,#156      ;TH0重赋初值

CPL P1.2        ;P1.2取反输出

5.4 AT89S52单片机定时器/计数器的应用

例1:AT89S52单片机的LED控制。利用定时器/计数器控制端口P1或者P2引脚相连的LED以1s为间隔循环闪亮。

解:

(1)原理分析

LED是常用的一种电子器件,主要有两种接法:共阴和共阳。西南科技大学计算机学院研制的CS-III.实验板采用的是共阳接法,在这种状态下,如果PORT1或者PORT2输出为低电平0,则LED点亮;如果PORT1或者PORT2输出为高电平1,LED灭。LED状态灯的原理如图5-7所示。

图5-7 LED状态灯原理图

单片机内部定时器采用加法计数,原理上就是计算标准时钟的个数。AT89S52系统外部时钟采用24MHz,经2分频后成为内部时钟信号,定时器的时钟采用内部时钟信号,因此,每定时1s时间需要计系统内部时钟12 000 000个,即为2 000 000个机器周期。需要定时多长就定时多少个机器周期即可,基本原理如图5-8所示。

图5-8 定时器程序的编写与执行基本原理

(2)单片机控制LED闪亮(程序流程图如图5-11所示)

图5-9 单片机控制LED闪亮的程序流程图

(3)程序设计

例2:数码管显示控制。在数码管的各位每隔1s显示0~F这16个数。

解:

(1)原理分析

数码管内部为8个发光二极管,并排列为8字形,同时加一个位表示小数点,通过这8个发光二极管的合理组合,可以构成不同的数字字形和简单的字母字形。数码管引脚如图5-10所示。同时数码管还有一个位选信号,即8个数码管的公共端。数码管分为共阳和共阴两种,也就是说高电平选中或低电平选中。

图5-10 数码管引脚图

(2)数码管显示(控制流程图如图5-11所示)

图5-11 数码管显示控制流程图

(3)程序设计

【本章小结】

单片机的定时/计数器是单片机常用的一个重要功能。在日常生活中,比如LED显示器的控制、家用电器的控制、电子时钟的控制,都要用到这个功能。学习完这一章,在掌握了定时/计数器的基本原理后,能够熟练编写定时/计数程序,做到学以致用。

5.5 习题

1.AT89S52单片机内设有几个定时/计数器?它们由哪些专用寄存器构成?其地址分别是多少?

2.定时/计数器用作定时器时,其计数脉冲由谁提供?定时时间与哪些因素有关?定时/计数器用作定时器时,对外界计数频率有何限制?

3.一个定时器的定时时间有限,如何实现两个定时器的串行定时,来实现较长时间的定时?

4.AT89S52单片机的定时/计数器有哪几种工作方式?各有什么特点?

5.如果采用晶振的频率为6MHz,定时器/计数器工作在方式0、1、2下,其最大的定时时间为多少?

6.编写程序,要求使用T0,采用方式2定时,在P1.0输出周期为400μs,占空比为10∶1的矩形脉冲。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈