单片机STC89C52学习——17 定时器和计数器
汇总:00 单片机STC89C52学习
参考教程:普中科技
1 定时器的原理
1.1 时序
单片机工作的基本时序: | |
---|---|
振荡周期 | 亦为时钟周期,单片机提供时钟脉冲信号的振荡源的周期,该开发板为12MHz |
状态周期 | 1个状态周期 = 1个时钟周期 * 2,是振荡源周期经过二分频得到的 |
机器周期 | 1个机器周期 = 6个状态周期S1~S6 = 12个时钟周期。在一个机器周期内,CPU可以完成一个独立操作 |
指令周期 | 指CPU完成一条操作所需要的全部时间,1个指令周期 = 1个或几个机器周期 |
外接晶振为12MHz时,51单片机相关周期的具体值为:
- 振荡周期 = 1/12 μs
- 状态周期 = 1/6 μs
- 机器周期 = 1μs
- 指令周期 = 1~4μs
1.2 定时/计数器的基本情况
- 51单片机有两组定时器/计数器,因为既可以定时又可以计数,故称之为定时器/计数器,一般直接称为定时器。
- 定时器/计数器与单片机的CPU相互独立。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。
- 51单片机中的定时器/计数器根据机器内部的时钟或者外部的脉冲信号对寄存器中的数据加1。
- 作用:增加单片机的效率,一些简单的重复加1的工作可以交给定时器/计数器处理,CPU转而处理一些复杂的事情;实现精确定时
1.3 定时/计数器的工作原理
定时/计数器实质上是一个加1计数器。它随着计数器的输入脉冲进行自加1,也就是每来一个脉冲,计数器就自动加1,当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置1,向CPU发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。
可见,由溢出时计数器的值减去计数初值才是加1计数器的计数值。
1.4 51单片机定时器结构
定时/计数器的实质是加1计数器(16位,2Byte),由高8位和低8位两个寄存器THx和TLx组成。TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。1.5 定时器的控制
51单片机定时/计数器的工作由两个特殊功能寄存器控制。工作方式寄存器TMOD用于设置其工作方式;控制寄存器TCON用于控制其启动和中断申请。
-
工作方式寄存器TMOD
工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1
-
GATE:门控位
用于控制定时器的启动是否受外部中断源信号的影响。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATE=1时,要用软件使TR0或TR1为1,同时外部中断引脚INT0/1也为高电平时,才能启动定时/计数器工作,即此时定时器的启动条件增加了INT0/1引脚为高电平这一条件。故通常使GATE = 0。 -
C/T:定时/计数模式选择位
C/T = 0为定时模式;C/T = 1为计数模式 -
M1M0:工作方式设置位
定时/计数器有4种工作方式:
(通常使用方式1;方式2为计算频率或串口通信使用;通常不使用方式0和3)
-
控制寄存器TCON
TCON的高4位用于控制定时/计数器的启动和中断申请:
-
TF1 (TCON.7) :T1溢出中断请求标志位
T1计数溢出时由硬件自动置TF1为1;CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态,故TF1可用作查询测试的标志。TF1也可以用软件置1或清0,与硬件置1或清0的效果一样。 -
TR1 (TCON.6) :T1运行控制位
TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0,故用软件可控制定时/计数器的启动与停止。 -
TF0 (TCON.5) :T0溢出中断请求标志位
同上 -
TR0 (TCON.4) :T0运行控制位
同上
1.6 定时器工作方式详解(T0为例)
计数个数X与计数初值N的关系:X = 2^位数 - N
-
方式0:13位计数
由TL0的低5位(高3位未用)和TH0的8位组成。TL0的低5位溢出时向TH0进位,TH0溢出时,置位TCON中的TF0标志,向CPU发出中断请求。
(门控位GATE具有特殊的作用。当GATE=0时,经反相后使或门输出为1,此时仅由TR0控制与门的开启,与门输出1时,控制开关接通,计数开始;当GATE=1时,由外中断引脚信号控制或门的输出,此时控制与门的开启由外中断引脚信号和TR0共同控制,当TR0=1时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数,这种方式常用来测量外中断引脚上正脉冲的宽度。) -
方式1:16位计数
由TL0作为低8位,TH0作为高8位,组成了16位加1计数器 。 -
方式2:8位计数
自动重装初值的8位计数方式
(TL0满后,不向TH0进位,而是自动装载初值继续累加,特别适合于用作较精确的脉冲信号发生器) -
方式3:独立8位计数
只适用于定时/计数器T0,定时器T1处于方式3时相当于TR1=0,停止计数
1.7 使用定时器时需要做的工作
- 初始化
- (TMOD)确定T0 / T1的工作方式,并对TMOD赋值
- (赋初值)计算初值,并将其写入TH0、TL0 / TH1、TL1
- (IE)使用中断方式时,开放总中断允许,开放定时器中断允许
- (TCON)置位TR0 / TR1以启动
- 计数器初值的计算
- 机器周期也就是CPU完成一个基本操作所需要的时间。
- 机器周期 = 1/单片机的时钟频率。
- 51单片机内部时钟频率是外部时钟的12分频。也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如用12MHZ的晶振,那么单片机内部的时钟频率就是12/12MHZ,当使用12MHZ的外部晶振时,机器周期 = 1/1M=1us。
- 若定时1ms,因1ms/1us=1000,即计数1000个,初值 = 65535-1000+1(因为实际上计数器计数到66636才溢出)= 64536 = FC18H
接下篇:18 定时器中断