内容正文:
5.1.1 定时/计数器的结构
1
计数器结构
计数脉冲
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
溢出
进位
翻转
8位计数器:00H~FFH,0~256
16位计数器:0000H~FFFFH,0~65535
计数器结构
计数脉冲
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
溢出
进位
翻转
定时功能:计数脉冲来自机器周期
如果晶振频率为12 MHz,机器周期为1us
1us
计数器结构
计数脉冲
0
0
0
0
0
0
0
0
1
1
0
1
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
溢出
进位
翻转
计数功能?
计数器结构
计数脉冲
0
0
0
0
0
0
0
0
1
0
1
0
1
1
1
溢出
进位
翻转
计数功能:计数脉冲来自外部引脚
计数器结构
计数脉冲
0
0
0
0
0
0
0
0
1
0
溢出标志位TF
0
计数器结构
计数脉冲
1
1
1
1
1
1
1
0
1
1
溢出标志位TF
0
0
0
0
0
0
0
0
0
1
0
1
申请
中断
单片机的定时器/计数器 示意结构
CPU
51单片机
TMOD
TCON
T1
16位加法计数器
T0
16位加法计数器
T0、T1: 两个16位的计数器。
TCON: 控制寄存器
TMOD: 方式寄存器
定时器/计数器的电路结构
每一个16位定时器都有两个8位计数器构成,
例如:T0可分为高8位TH0和低8位TL0。
16位计数器的构成
高8位
TH0
TL0
低8位
T0
CPU
内部机器周期
T1
8位
TH1
TL1
8位
T0
8位
TH0
TL0
8位
内部机器周期
计数器外部脉冲输入端P3.4
计数器外部脉冲输入端P3.5
TMOD
TCON
定时和计数功能的区别
TMOD是什么
工作方式寄存器:
1.选择定时计数器的4种工作方式
2.选择定时or计数
3.决定启动方式
TMOD
SFR 字节地址
B F0H
ACC E0H
PSW D0H
IP B8H
P3 B0H
IE A8H
P2 A0H
SBUF 99H
SCON 98H
P1 90H
TH1 8DH
TH0 8CH
TL1 8BH
TL0 8AH
TMOD 89H
TCON 88H
TMOD的格式
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
T0
T1
工作方式选择
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
T0
T1
工作方式
功能 工作方式 M1 M0
13位计数器 方式0 0 0
16位计数器 方式1 0 1
8位计数器,初值自动重装 方式2 1 0
分成两个8位计数器,仅用于T0。T1停止使用 方式3 1 1
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
T0
T1
功能选择
1 计数
0 定时
内部机器周期
T1
8位
TH1
TL1
8位
T0
8位
TH0
TL0
8位
内部机器周期
计数器外部脉冲输入端P3.4
计数器外部脉冲输入端P3.5
功能选择
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
T0
T1
门控位
1 TR0=1,INT0=1共同启动定时器
0 TR0=1启动定时器,不受INT0控制
门控位
1 TR1=1,INT1=1共同启动定时器
0 TR1=1启动定时器,不受INT1控制
启动控制的选择
7 6 5 4 3 2 1 0
GATE C/T M1 M0 GATE C/T M1 M0
0 1 1 0 0 0 0 1
具体编程应用
TMOD=0x61; 十六进制数61H(01100001)赋值给TMOD寄存器
1. 这是一个字节赋值的操作。
2. 代表什么含义呢?
小练习1:用T0设计完成一个秒表,13位定时,TR0软件启动;
小练习2:用T0做一个计步器,16位计数,TR1启动。
TCON是什么
控制寄存器:
1.启动控制
2.计满溢出控制
TCON
SFR 字节地址
B F0H
ACC E0H
PSW D0H
IP B8H
P3 B0H
IE A8H
P2 A0H
SBUF 99H
SCON 98H
P1 90H
TH1 8DH
TH0 8CH
TL1 8BH
TL0 8AH
TMOD 89H
TCON 88H
TCON可以进行
位寻址
TCON的格式
7 6 5 4 3 2 1 0
TF1 TR1 TF0 TR0
低4位:
和定时计数器无关
中断系统中才使用
高4位:
分别控制T0、T1的启动与溢出
启动控制
7 6 5 4 3 2 1 0
TF1 TR1 TF0 TR0
T1启动位 TR1=1,启动T1工作
TR1=0,停止T1工作
T0启动位 TR0=1,启动T0工作
TR0=0,停止T0工作
TR0=0 // 位操作指令,给TR0位清0
TCON
7 6 5 4 3 2 1 0
TF1 TR1 TF0 TR0
TCON
TF0:定时器T0的溢出标志位。
TF1:定时器T1的溢出标志位。
1 计数溢出,硬件自动置1
0 中断方式:硬件自动清0
查询方式:软件清0
溢出标志
溢出标志的应用
7 6 5 4 3 2 1 0
TF1 TR1 1 TR0
TCON
while(!TF0); //查询TF0,这是查询方式的应用
TF0=0; //如果计满溢出,将TF0清0
取反
7 6 5 4 3 2 1 0
TF1 TR1 TF0 TR0
中断方式下 TF0的应用
何时置1?
如何清0?
定时器/计数器的编程控制过程
写TMOD
设置工作方式
步骤一: 设置工作方式
①
①
步骤二: 初始值设置
①
①
写TMOD
设置工作方式
计算初始值并写入THx 、TLx
②
步骤三: 启动定时器
①
①
②
写TMOD
设置工作方式
计算初始值并写入THx 、TLx
启动定时器
③
步骤四: 查询是否溢出
①
①
②
③
④
数值递增
被查询
写TMOD
设置工作方式
计算初始值并写入THx 、TLx
启动定时器
查询是否溢出?
溢出标志清0
否
是
看看这段程序的过程吧
$$