定时计数器
# 定时计数器
- SOC固件配置 : STM32 , AVR32 SOC(System On Chip)
- 操作单片机的本质:操作/设置寄存器
- 中断(定时/计数器的中断)
# 应用
定时或延时控制、对外部事件的检测、计数等
**有两个16位定时/计数器(T0和T1) 8053有额外T2 **
所谓计数器就是对外不输入脉冲的计数
所谓定时器也是对脉冲进行计数完成的,计数的是MCS-51内部产生的标准脉冲,通过计数脉冲个数实现定时
所以本质上是一致的统称为定时器
定时:看不见的,没有引脚相关
# 定时器的结构
**组成:**两个16位的定时器T0和T1,以及他们的工作方式寄存器
TMOD
和控制寄存器TCON
等组成。内部通过总线与CPU相连定时器
T0
和T1
各由两个 8 位特殊功能寄存器TH0、TL0、TH1、TL1
工作方式寄存器 TMOD : 用于设置定时器的工作模式和工作方式
控制寄存器
TCON
: 用于启动和停止定时器的计数,并控制定时器的状态
单片机复位时,两个寄存器的所有位都被清零
# TMOD
设置定时计数器的模式和工作方式
模式:定时模式 / 计数模式
工作方式 : 三种(0,1,2)
# TCON
控制定时计数器的启停
# 运行
每个定时器内部结构实际上就是一个可编程的加法计数器,
由编程来设置它工作在定时状态还是计数状态
补充:
- 通过
TCON
和TMOD
设置定时计数器的工作方式以及工作模式 - 设置定时计数器
T0
和T1
这两个 16 位定时计数器寄存器的一个初值
T0 (16bit) TH0(8) TL0(8)
T1 (16bit) TH1(8) TL1(8)
在每个机器周期到来时,T0就会自动加 1 ,
当TL0
加到 0xff 时,就会使 TH0
加1 ,
当 TH0 = 0xff
,并且 TL0 = 0xff
这种情况就被称为 溢出中断
# 两种工作模式
计数器工作模式
就是对外部事件进行计数。计数脉冲来自相应的外部输入引脚 T0
或 T1
当输入信号发生由 1 至 0 的负跳变(下降沿)时,计数器(TH0,TL0或HT1,TL1)的值增1。计数器的最高频率一般为震荡频率的 1/24
定时器工作模式
也是通过计数实现的。计数脉冲来自内部时钟脉冲,每个机器周期计数值增1,每个机器周期 = 12 个震荡周期,因此计数频率为震荡频率的 1/12
所以定时事件 = 计数值 X 机器周期
4种工作方式(0-3)
# 原理(12MHZ的晶振电路)
假设我们机器周期 是 1us
,那定时 1ms
,相当于让我们的定时计数器加
1ms / 1us = 1000
需要加让计数器计数1000次
设置初值为 T0溢出值 - 计数的次数
6个状态周期就是一个机器周期 === 12个震荡周期
12MHZ的晶振 === 1/12M
分频 12MHZ / 12 = 1MHZ
GATE - 门控位
以TRX(X=0,1) 来启动定时/计数器运行
C/T*- 计数器模式和定时器模式选择位
0:定时器模式
1:计数器模式
M1、M2 - 工作方式选择
M1 M0 工作方式
0 0 方式0 , 13位定时计数器
0 1 方式1 , 16位定时计数器
1 0 方式2 , 8位常数自动重新装载
1 1 方式3 , 仅适用于 T0 (T0分为两个8 位计数器,T1停止计数)
TF1、TF0 : 计数溢出标志位
定时器T0或T1 计数溢出时,由硬件自动将此位置 “1”
TFx 可以由程序查询,也是定时中断的请求源
TR1、TR0 : 计数运行控制位
TRx=1:启动定时器/计数器工作
TRx=0:停止定时器/计数器工作