目录
7.1 定时器/计数器
7.1.1 定时器/计数器的组成
7.1.2 定时器/计数器的工作原理
7.1.3 定时器/计数器的控制
7.2 定时器/计数器的工作方式
7.2.1 工作方式0
7.2.2 工作方式1
7.2.3 工作方式2
7.2.4 工作方式3
7.3 定时器/计数器初始化和应用举例
7.3.1 定时器/计数器初始化
7.3.2 定时器/计数器应用举例
1、定时方式
定时方式时,T记录80C51内部振荡器输出的脉冲(机器周期信号)个数。
每一个机器周期使T0或T1的计数器增加1,直至计满回零自动产生溢出中断请求。
2、计数方式
计数方式时,T的功能是计来自T0(P3.4)T1(P3.5)的外部脉冲信号的个数。
定时器/计数器是一种可编程的部件,在其工作之前必须将控制字写入工作方式和控制寄存器,用以确定工作方式,这个过程称为定时器/计数器的初始化。
1、工作方式寄存器TMOD (89H)
(2) C/(/T):计数器/定时器方式选择位
(3) GATE:门控位
2、控制寄存器TCON(88H)
TCON的高4位:定时器的运行控制位和溢出标志位;
低4位:外部中断触发方式控制位和锁存外部中断请求源;
(1) 定时器T0运行控制位TR0
TR0由软件置位和清零来启动或关闭T0。
(2) 定时器T0溢出标志位TF0
当T0被允许计数以后,T0从初值开始加1计数,当T0溢出时,由硬件自动使中断触发器TF0置1,并向CPU申请中断。当CPU响应中断进入中断服务程序后,TF0又被硬件自动清0。TF0也可以用软件清0。
(3) TR1:定时器T1运行控制位。其功能与TR0相同。
(4) TF1:定时器T1溢出标志位。其功能与TF0相同。
(5) IE1: 外部中断1请求标志位。
(6) IT1: 外部中断1触发方式控制位。
(7) IE0: 外部中断0请求标志位。
(8) IT0: 外部中断0触发方式控制位。
T0分为两个独立的8位计数器TL0和TH0。TL0可以作为8位定时器或外部事件计数器,TH0被 固定为一个8位定时器方式。
1、初始化的步骤
(1) 确定工作方式,即根据题目要求先给TMOD送一个方式控制字;
(2) 计算计数初值/定时初值,并写入TH0、TL0或TH1、TL1中;
(3) 根据需要给中断允许寄存器IE选送中断控制字和中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。
(4) 给TCON送命令控制字,以启动或禁止定时器/计数器的运行。
2、计数器初值的计算
x0 = M-C
M-计数器模式:
3、定时器初值的计算
定时时间T的计算公式:T=XxTm =(M-x0)xTm
定时初值:x0=M-T/Tm
1、方式0的应用
例:利用T0方式0产生1 ms的定时,在P1.2 引脚上输出周期为2ms的方波。设单片机晶振频率fosc=12MHz。
解:
(1) 确定工作方式:(TMOD)=00H
(2) 计算1 ms定时时T0的初值
机器周期:T= 1 / foscX12 = 1us,
计数个数:X =1ms/lus = 1000
设T0的计数初值为,则
X0= (213-X)
= 8192-1000
= 7192 D
解得: T0初值=7192=1C18H=0001 1100 0001 1000
11100000 B=E0H赋给TH0,低5位00011000=18H赋给TL0。
ORG 0000H
AJMP MAIN ; 转主程序MAIN
ORG 000BH
AJMP IT0P ; 转T0中断服务程序IT0P
ORG 1000H
MAIN: MOV SP, #60H ; 设堆栈指针
MOV TH0 , #0E0H ; 给定时器T0送初值
MOV TL0 , #18H ; 送定时初值
MOV TMOD, #00H ; 设置T0为方式0, 定时
SETB EA ; CPU开中断
SETB ET0 ; T0允许中断
SETB TR0 ; 启动T0定时
HERE: SJMP HERE ; 等待中断
2、方式1的应用
方式1中,寄存器是以全部16位参与操作。
3、方式2的应用
当T0(P3.4)引脚每输入一个负脉冲时,使P1.0输出一一个500us的同步脉冲。设晶振频率为6MHz,请编程实现该功能。
(1) 确定工作方式
计数时:(TMOD) = 0000 0110B = 06H
定时时:(TMOD) = 0000 0010B = 02H
(2) 计算初值
机器周期T= 12 / fosc = 12/6MHZ = :2μs
计数时:计数个数X= 1
计数初值:X0= (256-X)= (256-1) =255=0FFH,
(TH0)=(TL0)=0FFH
定时时:计数个数X=T/ Tm= 500μs / 2μs =250
定时初值=256- X=256 - 250= 6,
(TH0) = (TL0)= 06H
START: MOV TMOD, #06H ; T0方式2, 外部计数方式
MOV TH0, #0FFH ; T0计数初值
MOV TL0, #0FFH
SETB TR0 ; 启动T0计数
LOOPl: JBC TF0, PTF01; 查询T0溢出标志, TF0= 1时转移, 且TF0= 0(查P3.4负跳变)
SJMP LOOPl
PTF01: CLR TR0 ; 停止计数
MOV TMOD, #02H ; T0方式2, 定时
MOV TH0, #06H ; T0定时500μs初值
MOV TL0, #06H
CLR P1.0 ; P1.0清0
SETB TR0 ; 启动定时500μs
LOOP2: JBC TF0, PTF02 ; 定时到TF0=l 转移, 且TF0= 0(第一个500μs到否?)
SJMP LOOP2
PTF02: SETB P1.0 ; P1.0置1(到了第一个500μs)
CLR TR0 ; 停止计数
SJMP START
4、方式3的应用
5、GATE位的应用
例:利用GATE门控位测量从/I/N/T/1引脚输入的正脉冲宽度。
6、扩大计数个数和定时时间
例:利用MCS-51单片机的定时器/计数器,产生电.子时钟的1s基时,并且由P1.7输出2s的方波。fosc=12MHz。