一.定时/计数器的结构及工作原理
定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1)
定时功能----计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1。所以,计数频率是振荡频率的1/12。
计数功能----计数脉冲来自相应的外部输入引脚,对负跳变脉冲计数,计数溢出可申请中断,标志位TFX,T0为P3.4,T1为P3.5。
在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。
单片机内部的定时/计数器是一种可编程器件,可设置为四种工作方式,
由两个8位专用寄存器TMOD和TCON进行管理与控制。
二、定时/计数器计数初始化
1. 定时/计数器的初始化方法
初始化的主要内容是对TCON和TMOD编程,计算和装载T0和T1的计数初值。
(1)初始化
1)分析定时器/计数器的工作方式,将方式字写入TMOD寄存器;
( 定/计、内/外启动、工作方式)
2)计算T0或T1中的计数初值,并将其写入TH0、TL0或TH1、TL1;
3)根据需要开放CPU和定时/计数器的中断,即对IE和IP寄存器编程;
4)启动定时器/计数器工作:若要求用软件启动,编程时对TCON中的TR0或TR1置位即可启动;若由外部中断引脚电平启动,则对TCON中的TR0或TR1置位后,还需给外引脚加启动电平。
(2)计数器初值的计算
1)计数器模式时的计数初值
TC=2M-N (M为计数器位数,N为要求的计数值)
方式0:M=13,计数器的最大计数值213=8192。方式1:M=16,计数器的最大计数值216=65536;方式2:M=8,计数器的最大计数值28=256;方式3同方式2。
例如,设T0工作在计数器方式2,求计数10个脉冲的计数初值,
TC=28 -10=246=(11110101)B=0F5H
2)定时器模式时的计数初值
在定时器方式下,定时器T0(或T1)是对机器周期进行计数的。定时时间为:t=(2M-计数初值X)×机器周期
则计数初值X= 2M-(t/12*T osc )
在应用定时/计数器时,溢出标志TFx置位后既可由硬件向CPU申请中断,也可通过用户程序查询TFx的状态,因此对计数溢出信息的处理有以下两种方法。
中断法:在定时器初始化时要开放对应的源允许(ET0或ET1)和总允许,在启动后等待中断。当计数器溢出中断,CPU将程序转到中断服务程序入口,因此应在中断服务程序中安排相应的处理程序。
采用中断方式时的一般编程模式:
ORG 0000H
SJMP MAIN
ORG 000BH (001BH)
LJMP T0S
ORG 0030H
MAIN: MOV TMOD,#——
MOV TH0,#——
MOV TL0,#——
SETB ET0;
SETB EA;
------------------;置其他初值
SETB TR0;
SJMP $
T0S: ------------- ; 重装初值
-------------- ;处理程序
RETI
查询法:既在定时器初始化并启动后,在程序中安排指令查询TFx的状态。
LP:JBC TF0,NEXT;TF0为1,转后面的处理程序,并将TF0复位
SJMP LP ;TF0为0,继续查询
NEXT:┋
采用查询方式时的一般编程模式:
ORG 0030H
MAIN: MOV TMOD,#——
MOV TH0,#——
MOV TL0,#——
--------------
SETB TR0
WAIT: JBC TF0,NEXT;
SJMP WAIT;
NEXT:MOV TH0,#——;重装
MOV TL0,#—— ;初值
- --------- ;处理程序
SJMP WAIT
注意问题:
1)方式0、1、3溢出后要重装初值,方式2可自动重装初值。
2)方式 0时TH为8位,TL为5位。
|