第四节 定时器/计数器

MCS-51系列单片机典型产品8051等有两个16位定时器/计数器T0、T1;8052等单

片机有三个16位定时器/计数器T0、T1和T2。它们都可以用作定时器或外部事件计数器。

一、定时器/计数器T0和T1

MCS-51系列的单片机内,与16位定时器/计数器T0、T1有关的特殊功能寄存器有

以下几个:TH0、TL0、TH1、TL1、TMOD、TCON。

TH0、TL0为T0的16位计数器的高8位和低8位,TH1、TL1为T1的16位计数器的高8位和低8位,TMOD为T0、T1的方式寄存器,TCON为T0、T1的状态和控制

寄存器,存放T0、T1的运行控制位和溢出中断标志位。

通过对TH0、TL0和TH1、TL1的初始化编程来设置T0、T1计数器初值,通过对

TCON和TMOD的编程来选择T0、T1的工作方式和控制T0、T1的运行。

1.方式寄存器TMOD

特殊功能寄存器TMOD为T0、T1的工作方式寄存器,其格式如下:

GATE

C/T

M1

M0

GATE

C/T

M1

M0

T1方式控制

T0方式控制

TMOD的低4位为T0的方式字段,高4位为T1的方式字段,它们的含义是完全相同的。

(1)工作方式选择位M1、M0。定时器工作方式由M1、M0两位状态确定,对应关系如表2-8所示。

表2-8

定时器的方式选择

(2)定时和外部事件计数方式选择位C/T。C/T=0为定时方式。在定时方式中,以振荡器输出时钟脉冲的十二分频信号作为计数信号,也就是每一个机器周期定时器加“1”,定时器从初值开始加“1”计数直至定时器溢出所需的时间是固定的。

C/T=1为外部事件计数方式,这种方式采用外部引脚(T0为P3.4,T1为P3.5)上的输入脉冲作为计数脉冲。内部硬件在每个机器周期的S5P2采样外部引脚的状态,当一个机器周期采样到高电平,接着的下一个机器周期采样到低电平时计数器加1,也就是外部输入电平发生负跳变时加1。外部事件计数时最高计数频率为晶振频率的二十四分之一,外部输入脉冲高电平和低电平时间必须在一个机器周期以上。

(3)门控位GATE。GATE=1时,定时器的计数受外部引脚输入电平的控制(INT0控制T0的运行,INT1 控制T1的运行);GATE=0时,定时器计数不受外部引脚输入电平的控制。

2.控制寄存器TCON

特殊功能寄存器TCON的高4位存放定时器的运行控制位和溢出标志位,低4位存放外部中断的触发方式控制位和锁存外部中断请求源(详见本章第六节“中断系统”)。

TCON格式如下:TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

(1)定时器运行控制位TR0、TR1。定时器T0运行控制位TR0由软件置位和清

“0”。门控位GATE为0时,T0的计数仅由TR0控制,TR0为1时允许T0计数,TR0为0时禁止T0计数;门控位GATE为1时,仅当TR0等于1且INT0(P3.2)输入为高

电平时T0才计数,TR0为0或INT0输入低电平时都禁止T0计数。

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

(2)定时器溢出标志位TF0、TF1。TF0为定时器T0溢出标志位。当T0被允许计数以后,T0从初值开始加“1”计数,最高位产生溢出时置“1”TF0。TF0可以由程序查询和清“0”。TF0也是中断请求源,当CPU响应T0中断时由硬件清“0”TF0。

TF1为定时器T1溢出标志位。其功能及操作情况同TF0。3.定时器的工作方式

MCS-51的定时器T0有四种工作方式:方式0、方式1、方式2和方式3;而定时器T1有三种工作方式:方式0、方式1、方式2。下面对各种工作方式的定时器结构和功能加以详细讨论。

(1)方式0。当M1、M0为00时定时器工作于方式0。定时器T0方式0的结构如图

2-11所示。方式0为13位的计数器,由TL0的低5位和TH0的8位组成,TL0低5位

计数溢出时向TH0进位,TH0计数溢出时置“1”溢出标志TF0。

图2-11 T0方式0结构

在图211的T0计数脉冲控制电路中,有一个方式电子开关和计数控制电子开关。C/T=0时,方式电子开关打在上面,以振荡器的十二分频信号作为 T0的计数信号;C/T=1时,方式电子开关打在下面,此时以T0(P3.4)引脚上的输入脉冲作为T0的计数脉冲。当GATE为0时,只要TR0为1,计数控制开关的控制端即为高电平,使开关闭合,计数脉冲加到T0,允许T0计数。当GATE为1时,仅当TR0为1且INT0引脚上输入高电平时控制端才为高电平,才使控制开关闭合,允许T0计数,TR0为“0”或INT0输入低电平都使控制开关断开,禁止T0计数。

若T0工作于方式0定时,计数初值为a,则T0从初值a加1计数至溢出的时间为

t=f1o2sc*(213-a)μs。

(2)方式1。方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位的定时器/计数器。定时器T0工作于方式1的逻辑结构如图2-12所示。T0工作于方式1时,由TH0作为高8位,TL0作为低8位,构成一个16位计数器。

图2-12 T0方式1结构

(3)方式2。M1、M0为10时,定时器/计数器工作于方式2,方式2为自动恢复初值的8位计数器。定时器T0工作于方式2时的逻辑结构如图2-13所示。T0工作于方式2时,TL0作为8位计数器,TH0作为计数初值寄存器。当TL0计数溢出时,一方面置“1”溢出标志TF0,同时将TH0中的计数初值送至TL0,使TL0从初值开始重新加1计数。

图2-13 T0方式2结构

上面以T0为例,说明了定时器/计数器方式0、方式1、方式2的工作原理,T1和T0的这三种方式是完全相同的。

(4)方式3。方式3只适用于T0,若T1设置为工作方式3时,则使T1停止计数。定时器T0工作于方式3时的逻辑结构如图2-14所示,T0分为两个独立的8位计数器

TL0和TH0。TL0使用T0的所有状态控制位GATE、TR0、INT0(P3.2)、T0

(P3.4)、TF0等,TL0可以作为8位定时器或外部事件计数器,TL0计数溢出时置“1”溢出标志TF0,TL0计数初值必须由软件每次设定。

TH0被固定为一个8位定时器方式,并使用T1的状态控制位TR1、TF1。一般情况图2-14 T0方式3结构

下,只有当T1用于串行口的波特率发生器或不需要中断的场合,T0才在需要时选工作方式3,以增加一个计数器。这时T1的运行由方式来控制,方式3停止计数,方式0~2允许计数,计数溢出时并不置“1”标志TF1。

二、定时器/计数器T2

80C52中有一个功能较强的定时器/计数器T2,T2和T1、T0一样,可用于定时或外部事件计数。它具有三种工作方式:捕捉方式、常数自动再装入方式和串行口的波特率发生器方式。

1.T2的特殊功能寄存器

8052中与T2相关的特殊功能寄存器有以下五个:TH2、TL2、RCAP2H、RCAP2L、T2CON。TH2、TL2组成16位计数器,RCAP2H、RCAP2L组成一个16位寄存器。在捕捉

方式中,当外部输入T2EX(P1.1)发生负跳变时,将TH2、TL2的当前计数值锁存到

RCAP2H、RCAP2L中,在常数自动再装入方式中,RCAP2H、RCAP2L作为16位计数初值

常数寄存器。

T2CON为T2的状态控制寄存器,其格式如下:

D7

D6

D5

D4

D3

D2

D1

D0

TF2

EXF2

RCLK

TCLK EXEN2

TR2

C/T2 CP/RL2

定时器/计数器的工作方式由T2CON的D0、D2、D4、D5位控制,对应关系如表2

-9所示。

表2-9

定时器T2方式选择

TF2:T2的溢出中断标志。在捕捉方式和常数自动再装入方式中,T2加1计数溢出时,置“1”中断标志TF2,CPU响应中断转向T2中断入口(002BH)时,并不清“0”TF2,

TF2必须由用户程序清“0”。当T2作为串行口波特率发生器时,TF2不会被置“1”。

EXF2:定时器T2外部中断标志。EXEN2为1时,当T2EX(P1.1)发生负跳变时置“1”中断标志EXF2,CPU响应中断转T2中断入口(002BH)时,并不清“0”EXF2,EXF2必须由用户程序清“0”。

TCLK:串行接口的发送时钟选择标志。TCLK=1时,T2工作于波特率发生器方式,使定时器T2的溢出脉冲作为串行口方式1、方式3时的发送时钟。TCLK=0时,定时器T1的溢出脉冲作为串行口方式1、方式3时的发送时钟。

RCLK:串行接口的接收时钟选择标志位。RCLK=1时,T2工作于波特率发生器方式,使定时器T2的溢出脉冲作为串行口方式1、方式3时的接收时钟,RCLK=0时,定时器T1的溢出脉冲作为串行口方式1、方式3时的接收时钟。

EXEN2:T2的外部允许标志。T2工作于捕捉方式,EXEN2为1时,T2EX(P1.1)

输入端发生高到低的跳变时,TL2和TH2的当前值自动地捕捉到RCAP2L和RCAP2H中,同时还置“1”中断标志EXF2;T2工作于常数自动装入方式时,EXEN2为1时,当

T2EX(P1.1)输入端发生高到低的跳变时,常数寄存器RCAP2L,RCAP2H的值自动装入TL2、TH2,同时置“1”中断标志EXF2,向CPU申请中断。EXEN2=0时,T2EX

输入电平的变化对定时器T2没有影响。

C/T2:外部事件计数器/定时器选择位。C/T2=1时,T2为外部事件计数器,计数脉冲来自T2(P1.0);C/T2=0时,T2为定时器,振荡脉冲的十二分频信号作为计数信号。

TR2:T2的计数控制位。TR2为1时允许计数,为0时禁止计数。

CP/RL2:捕捉和常数自动再装入方式选择位。CP/RL2为1时工作于捕捉方式,CP/

RL2为0时T2工作于常数自动再装入方式。当TCLK或RCLK为1时CP/RL2被忽略,

T2总是工作于常数自动恢复的方式,常用来做波特率发生器。

2.T2的工作方式

(1)常数自动再装入方式。T2的16位常数自动再装入方式的逻辑结构如图2-15所示,这种方式主要用于定时。C/T2为0时为定时方式,以振荡器的十二分频信号作为T2的计数信号;C/T2为1时为外部事件计数方式,外部引脚T2(P1.0)上的输入脉冲作为T2的计数信号。

图2-15 T2常数自动再装入方式结构

TR2置“1”后,T2从初值开始加1计数,计数溢出时将RCAP2H、RCAP2L中的

计数初值常数自动再装入TH2、TL2,使T2从该初值开始重新加1计数,同时置“1”溢出标志TF2,向CPU请求中断(TF2也可以由程序查询)。

当EXEN2为1时,除上述功能外,还有一个附加的功能。当T2EX(P1.1)引脚输

入电平发生“1”~“0”跳变时,也将RCAP2H、RCAP2L中常数重新装入到TH2、

TL2,使T2重新从初值开始计数,同时置“1”标志EXF2,向CPU请求中断。

T2的16位常数自动再装入方式是一种高精度的16位定时器/计数器工作方式,计数初值由初始化程序一次设定后,在计数过程中不需要由软件再设定。若计数初值为a,则

定时时间等于f1o2sc*(216-a)μs。

(2)16位捕捉方式。T2的16位捕捉方式的逻辑结构如图2-16所示。16位捕捉方式的计数脉冲也由C/T2选择,C/T2为0时以振荡器的十二分频信号作为T2的计数信号,

C/T2为1时以T2(P1.0)引脚上的输入脉冲作为T2的计数信号。置“1”TR2后,T2

从初值开始加1计数,计数溢出时仅置“1”溢出标志TF2,而RCAP2H、RCAP2L的内

容并不送至TH2和TL2,T2的计数初值必须由软件每次设定。

EXEN2为1时除上述功能外,另外有一个附加的功能:当T2EX(P1.1)输入电平

发生负跳变时,将TH2、TL2的当前计数值锁存到RCAP2H、RCAP2L,并置“1”中断标志EXF2,向CPU请求中断。

T2的16位捕捉方式主要用于测试外部事件的发生时间,如可用于测试两路脉冲之间的频率关系或输入脉冲的频率、周期等。

图2-16 T2捕捉方式结构

(3)串行口的波特率发生器方式。T2的串行口波特率发生器方式将在串行接口一节详细讨论。