【51单片机】定时/计数器
1. 定时/计数器结构
简介
- 用途:定时器和计数器
- 核心:加1计数器
- 原理:每来一个脉冲,加1计数器加1,当加到全1时再来一个脉冲使加1计数器归零,同时加1计数器的溢出使TCON寄存器中的TF0(或TF1)置1,向CPU发出中断请求
- 脉冲来源:
定时器:由单片机内部时钟晶振器输出脉冲源提供
计数器:由T0或T1引脚输入的外部脉冲源提供(8051的是P3.4或P3.5引脚) - 注意:T0或T1都不能同时既做定时器也做计数器
补充:
- 计数的工作原理
通过引脚P3.2(T0)或P3.5(T1)对外部脉冲信号进行计数。
当输入脉冲信号产生由 1 到 0 的下降沿时,定时器的值加 1,在每个机器周期,CPU采样引脚 P3.4 和 P3.5 的输入电平。若前一个机器周期采样值为高,下一个机器周期采样值为低,则计数器加 1。
由于检测一个 1 到 0 的跳变需要2个机器周期,故最高计数频率为振荡频率的二十四分之一。
虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次,要求电平保持时间至少是一个完整的机器周期。
两个定时器的区别
- T0可分成2个独立的8位定时器,而T1不能
- T1可作为串口的波特率发生器,而T0不能
2.相关寄存器
项目 | 说明 |
---|---|
TF1 | T1计数溢出时,硬件自动置TF1 = 1。故只编写溢出判断和TF1 = 0即可。在中断允许下,该位发出中断请求并进入中断后,其由硬件自动置零。在中断屏蔽下,该位可用作查询方式,此时由编程置零。 |
TR1 | GATE = 1,INT1=1时,软件置TR1=1,启动T1。GATE = 0,软件置TR1 = 1,启动T1 |
- GATE = 0 不受外部控制
GATE = 1 计数器T0和T1分别受P3.2和P3.3引脚上的电平控制。当P3.2(或P3.3)为高电平,同时TR0(或TR1)为1,计数器T0(或T1)开始计数;当P3.2(或P3.3)为低电平,计数器T0(或T1)停止计数。
3.几种工作方式的初值计算
方式0
- 工作原理:13位计数器,使用TL0的低5位和TH0的高8位组成,TL0的低5位溢出时向TH0进位。TH0溢出时发出中断请求。
- 初值计算公式:
方式1
- 工作原理:16位计数器,TL0作为低8位,TH0作为高8位
- 初值计算公式:
方式2
-
工作原理:计数器溢出后,计数器自动将上次设置的初值重装。
-
初值计算公式:
注意:晶振频率必须选择12的整数倍,因为定时器的频率是晶振频率的1/12。
-
优点:
适合做比较精准的脉冲信号发生器 -
缺点:
只有8位计数器,当定时较长时间时会带来麻烦和影响精度。最多经过256个机器周期,该计数器就会溢出,若使用12MHz晶振也只有256us的时间。
方式3
- 工作原理:
将T0分成两个独立的8位定时/计数器TL0和TH0。
TL0为正常的8位定时/计数器,计数器溢出后置位TF0,申请中断,之后重装初值。
TH0也是8位定时/计数器,但由于TL0占用了TF0和TR0,因此TH0占用定时器TF1和TR1(所以T1不能用)
注意:只能用于定时/计数器T0,T0工作在方式3时,T1不要使用在有中断的场合。通常该种情况下T1用作串口波特率发生器。
4.时钟周期与机器周期的相关计算
5.编程流程
参考文章
https://blog.csdn.net/weixin_42625444/article/details/93471117