51单片机定时器-计数器
定时/计数器的控制寄存器TCON
TCON
(88H)
D7
TF1
D6
TR1
D5
TF0
D4
TR0
D3
IE1
D2
IT1
D1
IE0
D0
IT0
其中: TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由 硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬 件电路自动清除。 TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时 启动;TR1=0时停止。
定时时间常数初值X: 方式0 X=8192-T(fosc/12) 方式1 X=65536-T(fosc/12) 方式2、方式3 X=256-T(fosc/12) 其中T是需要定时的时间,单位是微秒;fosc是晶振
计数时间常数X: 方式0 X=8192-S 方式1 X=65536-S 方式2、方式3 X=256-S 说明:式中S是需要计数的次数
2)定时初值计算
定时就是定时间,假设晶振频率为f,定时时间为T,对 应的计数值为X,此时计数器是将系统时钟12分频后作为 计数脉冲,则以下等式成立。
n 要装入的计数器初值 CI= 2 -T· fosc/12。 例如:已知晶振的频率为 6 MHz,要求定时为2 ms,则 当为方式0时,应装入的计数初值为; 3 6 8192-2×10 ×6×10 /12 = 8192-1000 = 7192
此外,T1还可以作为串行接口的波特率发生器。
定时/计数器的结构
1.定时和计数的原理
单片机是对脉冲个数计数,计数器 (1)计数 每接收到一个脉冲,计数值加1, 定时/计数器的实质是在处置基础上的加1计数 器(16位), 当接收满65535个脉冲后,再 来一个脉冲,计数值清0表明 这一轮计数结束,同时将标 志位TF0或TF1置1。
定财器/计数器初始化步骤
1)确定工作方式:把工作方式控制字写入到TMOD中; 2)设置定时或计数的初值:根据问题要求,求出定时或计 数的初值,写入到寄存器THO、TLO或THI、TLI中。 3)如果需要中断,使定时器中断允许位ET0或ETI置位, 如果要求中断嵌套,还应设置相应的中断优先级,然后置 位EA,使CPU开放中断;如果不需要中断,仅以软件方式 对计数器溢出标志TFO或TFI进行查询,则可略去此步骤; 4)启动定时器/计数器:将 TRO或 TRI置 1即可启动定时 器/计数器。
(3) C/T * ——计数器模式和定时器模式选择 位
0:定时器模式。 1:计数器模式。来自定时/计数器的工作方式
一.方式0
方式0是13位的定时/计数方式,因而最大计数值为 2的13次幂,等 于8192。如计数值为N,则置入的初值X为: X=8192-N 例如定时/计数器T0的计数值为1000,则初值为7192,转换成二进 制数为1110000011000B,则TH0=11100000B,TL0=00011000B。
89C51 单片机原理及应用
89C51单片机
定时器/计数器
单片机的定时/计数器
单片机应用系统中定时计数的需求:
如用单片机控制的打铃器、空调的定时开关、啤酒自动生产 线上对酒瓶的计数装置等。
89C51单片机片内的定时/计数器:
两个16位可编程的定时/计数器:T0和T1,都能定时和对 外部事件进行计数。
获得标准时间
由单片机的晶振经过12分频后得到。由于晶振的频率很准, 所以这个时钟脉冲的时间间隔也很准。当单片机采用12MH z的晶振时,它提供给计数器的脉冲频率是12MHz/1 单片机内部的标准时钟 2=1MHz,脉冲周期就是1微秒。 脉冲是如何获得的呢?
定时/计数器T0的结构示意图
定时/计数器的结构
2.T0工作在方式3下T1的各种工作方式 当T1用作串行口的波特率发生器时, T0才工作 在方式3。 T0处于方式3时, T1可定为方式0、方式1和方 式2,用来作为串行口的波特率发生器,或不需要 中断的场合。
定时器/计数器对输入信号的要求 外部计数脉冲的最高频率为系统振荡器频率的1/24, 例如选用12MHz频率的晶体,则可输入500KHz的外部脉冲。 输入信号的高、低电平至少要保持一个机器周期。
单片机复位时,两个寄存器的所有位都被清0。
定时器/计数器控制寄存器TCON
低4位与外部中断有关,已介绍。高4位的功能如下: (1) TF1、TF0——计数溢出标志位 (2) TR1、TR0——计数运行控制位
1:启动定时器/计数器工作 0:停止定时器/计数器工作
工作方式控制寄存器TMOD
8位分为两组,高4位控制T1,低4位控制T0。 (1)GATE——门控位 0:以TRX(X=0,1)来启动定时器/计数器运行。 1:用外中断引脚 (INT0* 或 INT1* )上的高电平和 TRX 来启动 定时器/计数器运行。 (2)M1、M0——工作方式选择位 M1 M0 工 作 方 式 0 0 方式0,13位定时器/计数器。 0 1 方式1,16位定时器/计数器。 1 0 方式2,8位常数自动重新装载 1 1 方式3,仅适用于T0,T0分成 两个8 位计数器,T1停止计数。
三.方式2
方式2,16位的计数器只用了8位来计数,用的是TL0(或TL1)的 8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1) 计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会 触发三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或 TL1)。 TLX作为常数缓冲器,当TLX计数溢出时,在置“1”溢出标志
M1 0 0 1 1 M0 0 1 0 1 工作方式 0 1 2 3 方式说明 13位定时/计数器 16位定时/计数器 8位自动重置定时/计数器 两个8位定时/计数器(只有T0有)
C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0 时工作于定时方式。 GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号 的影响。
定时器/计数器的编程和应用 4种工作方式中,方式0与方式1基本相同,由于方式0是为 兼容MCS-48而设,初值计算复杂,在实际应用中,一般不用 方式0,而采用方式1。 方式1应用 例1 假设系统时钟频率采用6MHz,要在P1.0上输出一个周 期为2ms的方波,如图所示。
方波的周期用T0来确定,让T0每隔1ms计数溢出1次(每 1ms产生一次中断),CPU响应中断后,在中断服务程序中对 P1.0取反。 (1)计算初值X 设初值为X,则有:
如图所示,图中Tcy为机器周期。
定时器/计数器的初始化
定时/计数器的方式寄存器TMOD
TMOD D7 GATE ← D6 C/T 定时器1 D5 M1 D4 M0 → D3 GATE ← D2 C/T 定时器0 D1 M1 D0 M0 →
(89H)
其中: M1、M0为工作方式选择位 ,用于对T0的四种工作方式,T1的三 种工作方式进行选择,选择情况如下
工作方式3相当于增加一个附加的8位定时器/计数器,从 而具有3个定时器/计数器。 只适用于定时器/计数器T0。T1不能工作在方式3, T1方式3时相当于TR1=0,停止计数(此时T1可用来作串 行口波特率产生器)。
1.工作方式3下的T0
T0分为两个独立的8位计数器:TL0和TH0 。TL0使用T0的状态 控制位C/T*、GATE、TR0、,而TH0被固定为一个8位定时器 (不能作外部计数模式),并使用定时器T1的状态控制位 TR1和TF1,同时占用定时器T1的中断请求源TF1。
单片机内部的16位定时/计数器由高8位和低8位两个寄存 器组成: T0由TH0和TL0组成, T1由TH1和TL1组成, 定时/计数器的计数值就存放在这里面。定时/计数器T1的 结构与T0相同。 定时器/计数器的控制寄存器 TMOD:选择定时器/计数器T0、T1的工作模式和工作 方式。 TCON:控制T0、T1的启动和停止计数,同时包含了 T0、T1的状态。
二、方式1
方式1是16位的定时/计数方式,因而最大计数值为 2的16次幂, 等于65536。如计数值为N,则置入的初值X为: X=65536-N 如定时/计数器T0的计数值为1000,则初值为655361000=64536,转换成二进制数为1111110000011000B,则 TH0=11111100B,TL0=00011000B。
定时器初值的设置
在时钟频率为12MHz的情况下,每个时钟脉冲是1微 秒,则计满65536个脉冲需65.536毫秒,如要定时10毫秒 则存入初值55536,(10毫秒是10000微秒,需计数 10000个脉冲)。可见, 定时器的定时时间长短与系统时钟和定时器初值有关。 说明 1. 当定时/计数器用作计数器时,通过引脚P3.4、P3.5 对外部输入脉冲计数。 2 . 定时/计数器T0(T1)启动运行后,会按设定的工作方 式独立进行计数,不再占用CPU时间。当计数器T0(T1)计 满溢出时,TF0(TF1)置1,向CPU发出中断请求信号。
四、方式3
方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器 T0工作于方式3,定时/计数器T0被分为两个部分TL0和TH0,其中, TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、 TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数, 这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。
定时器/计数器初值计算
定时器/计数器用于定时或计数时,必须按照需要给计数 器设置初值。定时器/计数器在计数初值的基础上以加1 的方式进行计数,在计数器从全1变为全0时,将自动产生 溢出中断请求。 (1)计数初值计算 假设要计数的值为X,由于计数器是加工计数器,所以 n 定时器/计数器的初值为 2 -X: 其中n的值依赖于工作方式, 对于方式 0,n= 13;即初值=8192-X 对于方式 1,n= 16;即初值=65536-X 对于方式 2和方式 3,n=8;即初值= 256-X