51单片机的定时器/计数器
本文主要涉及51单片机的定时器/计数器的相关内容,主要包括定时器相关寄存器的相关配置以及定时器的配置代码参考。
文章目录
- 51单片机的定时器/计数器
- 一、 CPU 时序知识
- 二、 51 单片机定时器原理
- 三、 51 单片机定时/计数器结构
- 51单片机的定时器/计数器
- 一、 CPU 时序知识
- 二、 51 单片机定时器原理
- 三、 51 单片机定时/计数器结构
- 3.1 工作方式寄存器 TMOD
- 3.2 控制寄存器 TCON
- 四、 51 单片机定时/计数器的工作方式
- 五、 定时器配置
一、 CPU 时序知识
在了解定时器前需要先了解一下有关时序:
①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。
②状态周期:2 个振荡周期为 1 个状态周期,用 S 表示。振荡周期又称 S 周期或时钟周期。
③机器周期:1 个机器周期含 6 个状态周期,12 个振荡周期。
④指令周期:完成 1 条指令所占用的全部时间,它以机器周期为单位。
例如:外接晶振为 12MHz 时,51 单片机相关周期的具体值为:
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;
指令周期=1~4us;
二、 51 单片机定时器原理
有两个可编程的定时/计数器 T0、T1,定时/计数器的实质是加 1 计数器(16 位
),由高 8 位和低 8 位两个寄存器 THx 和 TLx 组成。它随着计数器的输入脉冲进行自加 1,也就是每来一个脉冲,计数器就自动加 1,当加到计数器为全 1 时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置 1,向 CPU 发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加 1 计数器的计数值。
T0、 T1不论是工作在定时器模式还是计数器模式,实质是对脉冲信号进行计数。
计数器
模式是对外部脉冲
进行计数
定时器
模式是对单片机内部脉冲信
号(机器周期)计数。
单片机复位时计数器初值为0。
三、 51 单片机定时/计数器结构
51单片机的定时器/计数器
一、 CPU 时序知识
在了解定时器前需要先了解一下有关时序:
①振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期)。
②状态周期:2 个振荡周期为 1 个状态周期,用 S 表示。振荡周期又称 S 周期或时钟周期。
③机器周期:1 个机器周期含 6 个状态周期,12 个振荡周期。
④指令周期:完成 1 条指令所占用的全部时间,它以机器周期为单位。
例如:外接晶振为 12MHz 时,51 单片机相关周期的具体值为:
振荡周期=1/12us;
状态周期=1/6us;
机器周期=1us;
指令周期=1~4us;
二、 51 单片机定时器原理
有两个可编程的定时/计数器 T0、T1,定时/计数器的实质是加 1 计数器(16 位
),由高 8 位和低 8 位两个寄存器 THx 和 TLx 组成。它随着计数器的输入脉冲进行自加 1,也就是每来一个脉冲,计数器就自动加 1,当加到计数器为全 1 时,再输入一个脉冲就使计数器回零,且计数器的溢出使相应的中断标志位置 1,向 CPU 发出中断请求(定时/计数器中断允许时)。如果定时/计数器工作于定时模式,则表示定时时间已到;如果工作于计数模式,则表示计数值已满。可见,由溢出时计数器的值减去计数初值才是加 1 计数器的计数值。
T0、 T1不论是工作在定时器模式还是计数器模式,实质是对脉冲信号进行计数。
计数器
模式是对外部脉冲
进行计数
定时器
模式是对单片机内部脉冲信
号(机器周期)计数。
单片机复位时计数器初值为0。
三、 51 单片机定时/计数器结构
3.1 工作方式寄存器 TMOD
工作方式寄存器 TMOD 用于设置定时/计数器的工作方式,低四位用于 T0,高
四位用于 T1。
GATE 是门控位
GATE=0 时,用于控制定时器的启动是否受外部中断源信号的影响。只要用软件使 TCON 中的 TR0 或 TR1 为 1,就可以启动定时/计数器工作;
GATA=1 时,要用软件使 TR0 或 TR1 为 1,同时外部中断引脚 INT0/1 也为高电平时,才能启动定时/计数器工作。即此时定时器的启动条件,加上了 INT0/1 引脚为高电平这一条件
C/T :定时/计数模式选择位。C/T =0 为定时模式;C/T =1 为计数模式。
M1M0:工作方式设置位。定时/计数器有四种工作方式
3.2 控制寄存器 TCON
TCON 的低 4 位用于控制外部中断。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 溢出中断请求标志位,其功能与 TF1 类同。TR0(TCON.4):T0 运行控制位,其功能与 TR1 类同.
四、 51 单片机定时/计数器的工作方式
- 方式 0
方式 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 时,外中断引脚信号引脚的高电平启动计数,外中断引脚信号引脚的低电平停止计数。这种方式常用来测量外中断引脚上正脉冲的宽度。计数模式时,计数脉冲是 T0 引脚上的外部脉冲。计数初值与计数个数的关系为:X=2^13-N。
- 方式 1:
方式 1 的计数位数是 16 位,由 TL0 作为低 8 位,TH0 作为高 8 位,组成了16 位加 1 计数器。其结构图如下所示
计数初值与计数个数的关系为:X=2^16-N。
五、 定时器配置
在使用定时器时,应该如何配置使其工作?其步骤如下(各步骤顺序可任意):
①对 TMOD 赋值,以确定 T0 和 T1 的工作方式,如果使用定时器 0 即对 T0 配置,如果使用定时器 1 即对 T1 配置。
②根据所要定时的时间计算初值,并将其写入 TH0、TL0 或 TH1、TL1。
③如果使用中断,则对 EA 赋值,开放定时器中断。
④使 TR0 或 TR1 置位,启动定时/计数器定时或计数。
void time0_init(void)
{
TMOD|=0X01;//选择为定时器 0 模式,工作方式 1
TH0=0XFC;//(65536-1000)/256 //给定时器赋初值,定时 1ms
TL0=0X18;//(65536-1000)%256
ET0=1;//打开定时器 0 中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
对于定时器 1 的使用方法是一样的,只是将上述的 0 变为 1 即可
void time0() interrupt 1 //定时器 0 中断函数
{//中断响应需要实现的内容
}