8051单片机内部定时器/计数器的结构如图7-3所示。单片机内部与定时器/计数器有关的部件主要有以下几种:
1)两个定时器/计数器(T0和T1)。每个定时器/计数器都是由两个8位计数器构成的16位计数器。
2)TCON寄存器。TCON为控制寄存器,用来控制两个定时器/计数器的启动/停止。
3)TMOD寄存器。TMOD为工作方式控制寄存器,用来设置定时器/计数器的工作方式。
两个定时器/计数器在内部通过总线与CPU连接,CPU也可以通过总线对它们进行控制。
由于定时器/计数器是在寄存器TCON和TMOD的控制下工作的,要让定时器/计数器工作,必须先设置寄存器TCON和TMOD(可编写程序来设置)。单片机内部有2个定时器/计数器,它们的工作原理是一样的,这里以定时器/计数器T0为例进行说明。
1.定时器/计数器T0用作计数器
要将定时器/计数器T0当作计数器使用,须设置寄存器TCON和TMOD,让它们对定时器/计数器T0进行相应的控制,然后定时器/计数器T0才开始以计数器的形式工作。
图7-3 8051单片机内部定时器/计数器的结构
(1)寄存器TCON和TMOD的设置
将T0用作计数器时TCON、TMOD寄存器的设置内容主要有
1)将寄存器TMOD的 位置“1”,如图7-3所示,该位发出控制信号让开关S0置“1”,定时器/计数器T0与外部输入端T0(P3.4)接通。
2)设置寄存器TMOD的M0、M1位,让它控制定时器/计数器T0的工作方式,比如让M0=1、M1=0,可以将定时器/计数器T0设为16位计数器。
3)将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。
(2)定时器/计数器T0的工作过程
定时器/计数器T0用作计数器的工作过程有以下几步:
1)计数。定时器/计数器T0启动后,开始对外部T0端(P3.4)输入的脉冲进行计数。
2)计数溢出,发出中断请求信号。当定时器/计数器T0计数达到最大值65536时,会溢出产生一个信号,该信号将寄存器TCON的TF0位置“1”,寄存器TCON立刻向CPU发出中断请求信号,CPU便执行中断子程序。
2.定时器/计数器T0用作定时器
要将定时器/计数器T0当作定时器使用,同样也要设置寄存器TCON和TMOD,然后定时器/计数器T0才开始以定时器形式工作。
(1)寄存器TCON和TMOD的设置
将T0用作定时器时TCON、TMOD寄存器的设置内容主要有
1)将寄存器TMOD的 位置“0”,该位发出控制信号让开关S0置“2”,定时器/计数器T0与内部振荡器接通。
2)设置寄存器TMOD的M0、M1位,让它控制定时器/计数器T0的工作方式,如让M0=0、M1=0,可以将定时器/计数器T0设为13位计数器。
3)将寄存器TCON的TR0位置“1”,启动定时器/计数器T0开始工作。
(2)定时器/计数器T0的工作过程
定时器/计数器T0用作定时器的工作过程有以下几步:
1)计数。定时器/计数器T0启动后,开始对内部振荡器产生的信号(要经12分频)输入的脉冲进行计数。
2)计数溢出,发出中断请求信号。定时器/计数器T0对内部脉冲进行计数,由0计到最大值8192(2 13 )时需要8.192ms的时间,8.192ms后定时器/计数器T0会溢出从而产生一个信号,该信号将TCON寄存器的TF0位置“1”,TCON寄存器马上向CPU发出中断请求信号,CPU便执行中断子程序。