定时器和计数器
几个概念
时钟周期:单片机时许中的最小单位,具体计算的方法就是时钟源分之一。时钟源可以理解为晶振,如晶振是12M,时钟周期(1/12M )S。
机器周期:单片机完成一个操作的最短时间。主要针对汇编,每条指令执行时间固定,C语言不固定,知道级别就行(是微妙还是毫秒)。51标准架构1机器周期=12个时钟周期。
定时器:打开定时器后,定时器”存储计时器“的值经过一个机器周期自动加1,也就是说机器周期是定时器的计数周期
标准51有两个定时器,定时0和定时器1(用法一样):
名称 | 描述 | SFR地址 | 复位值 |
TH0 | 定时器 | 0x8C | 0x00 |
TL0 | 定时器 | 0x8A | 0x00 |
TH1 | 定时器 | 0x8D | 0x00 |
TL1 | 定时器 | 0x8B | 0x00 |
后边标0就是定时器0,带1就是定时器1.
比如TH0和TL0都是定时器0.
H高8位,L低8位。开始TL0为0,当TL0为255后,再加一,TL0变为0,TH0变为1。
TCON:定时器控制寄存器的位分配(地址0x88,可位寻址)
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
符号 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
复位值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
位 | 符号 | 描述 | |
7 | TF1 | 定时器1溢出标志。一旦定时器1发生溢出时硬件置1。两种清零方式:1、软件清零;2、进入定时器中断时硬件清零。 | |
6 | TR1 | 定时器1运行控制位。软件置零/清零来进行启动/停止定时器。 | |
5 | TF0 | 同定时器1 | |
4 | TR0 | ||
3 | IE1 | 外部中断部分,与定时器无关 | |
2 | IT1 | ||
1 | IE0 | ||
0 | IT0 |
说明:硬件置1,自动;软件清0,即手动,用代码。
运行控制:为0,计时器不再计数,相当于我们的秒表暂停。
TMOD:打开关闭定时器
位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
符号 | GATE(T1) | C/T(T1) | M1(T1) | M0(T1) | GATE(T0) | C/T(T0) | M1(T0) | M0(T0) |
复位值 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
符号 | 描述 |
T1/T0 | 标T1的表示控制定时器1的位,标T0的表示控制器0的位 |
GAME | 该位被置1时为门控位。仅当\’INT0\’脚为高并且TR0控制位被置1时能使定时器0定时器开始计时,当该位被清0时,只要TR0位被置1,定时器0就使能开始计时,不受到单片机引脚INT0外部信号干扰,常用来测量外部信号脉冲宽度。这是定时器一个额外功能。 |
C/T | 定时器或计数器选择位。该位被清零时用作定时器功能(内部系统时钟),被置1时用作计数器功能。 |
M1 | M0 | 工作模式 | 描述 |
0 | 0 | 0 | 兼容8048单片机的13位定时器,THn的8位和TLn的5位组成一个13位定时器。 |
0 | 1 | 1 | THn和TLn组成一个16位的定时器 |
1 | 0 | 2 | 8位自动重装模式,定时器溢出THn重装到TLn中 |
1 | 1 | 3 | 禁用定时器1,定时器0变成2个8位定时器 |
这两位重要,决定了定时器的工作模式。工作模式1,2比较重要,模式0基本不应用了。
工作模式2:
假如现在使用定时器0: 令 TH0=0x55; TL0=0x00; TR0=1; 当TL0计数到0xff,继续计数将溢出,此时首先不会产出溢出,正常情况TL0应该变成0x00;
但是在工作模式2,自动重装模式将使TH0自动将自己的值给TL0,即此时TL0的值不是0x00,而是0x55。
模式1示意图
注解:
- 下边部分控制上边部分
- osc时钟源,d分频值,一般位12
- 接Tn脚为计数器
- 详细说明如下图
其他模式可以看手册自己分析
定时器使用方法:
- 设置工作模式(设置特殊功能寄存器TMOD)
- 设置计数寄存器处置
- 设置TCON,通过TR0置1使计时器开始计数
- 判断TCON寄存器TF0位,检测定时器溢出情况