发布时间:
目录
TMOD 定时器/计数器工作方式控制寄存器 #
英文全称:Timer/Counter Mode Control Register
逐位定义的 8 位寄存器,TMOD
是定时器、计数器模式控制寄存器,它是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H。
位 序 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位符号 | GATE | C/T̅ | M1 | M0 | GATE | C/T̅ | M1 | M0 |
控制 T1 | 控制 T0 |
GATE 门控位 #
控制定时器启动操作方式, 即定时器的启动是否受外部脉冲控制
GATE | 说明 |
---|---|
0 | TR0 或 TR1 等于 1 定时器工作(启停只受 TRx 控制) |
1 | TR0 = 1 和 INT0 = 1 或 TR1 = 1 和 INT1 = 1 时定时器才能工作 |
C/T̅ 工作模式选择位 #
为定时器/计数器的工作模式选择位。T̅ 逻辑非(NOT)
GATE | 说明 |
---|---|
0 | TR0 或 TR1 等于 1 定时器工作(启停只受 TRx 控制) |
1 | TR0 = 1 和 INT0 = 1 或 TR1 = 1 和 INT1 = 1 时定时器才能工作 |
M1,M0 工作方式控制位 #
为定时器/ 计数器 T0 和 T1 的工作方式控制位
M1 | M0 | 工作方式 | 功能 |
---|---|---|---|
0 | 0 | 方式0 | 13 位计数,有 THx 的 8 位和 TLx 的 5 位组成 |
0 | 1 | 方式1 | 16 位计数,有 THx 的 8 位和 TLx 的 8 位组成 |
1 | 0 | 方式2 | 利用 TLx 的 8 位计数,当 TLx 计数溢出时,自动重装 Thi 的数据,TLx 在次基础上继续计数 |
1 | 1 | 方式3 | 两个 8 位计数器,仅适用 T0,T1 停止计数 |
TCON 定时器/计数器控制寄存器 #
英文全称:Timer Control Register
TCON
是定时器/计数器控制寄存器, 也是 8 位寄存器, 其中高 4 位用于定时器/计数器; 低 4 位用于单片机的外部中断。 TCON
支持位操作, 其格式为:
TCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位名称 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |
TR1 #
为定时器 T1 的启停控制位。 TR1 由指令置位和复位, 以启动或停止定时器/ 计数器开始定时或计数。
TF1 #
为定时器 T1 的溢出中断标志位。 在 T1 计数溢出时, 由硬件自动将 TF1 置 1, 向 CPU 请求中断。 CPU 响应时, 由硬件自动将 TF1 清零。 TF1 的结果可用程序查询, 但在查询方式中, 如果 T1 不产生中断, TF1 置 1 后需要在程序中用软件将其清零。
TR0 #
为 T0 的计数启停控制位, 功能同 TR1。 当 GATE = 1 时, T0 受 TR0 和外部中断引脚 INT0 的双重控制。
TF0 #
为 T0 的溢出中断标志位, 功能同 TF1。
IE 中断允许寄存器 #
8051 单片机的 CPU 对中断源的开放或屏蔽 (即关闭), 是由片内的中断允许寄存器 IE (也称为中断控制寄存器或中断屏蔽寄存器) 控制的。 IE 的字节地址是 A8H, 既支持字节操作, 又支持位操作。 位地址的范围是 A8H ~ AFH。 8 位中有 6 位与中断有关, 剩下的两位没有定义。 其格式如下
IE | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位地址 | AFH | AEH | ADH | ACH | ABH | AAH | A9H | A8H |
位名称 | EA | ~ | ~ | ES | ET1 | EX1 | ET0 | EX0 |
- EX0:外部中断 0 中断允许位
- ET0:定时器/计数器 0 中断允许位
- EX1:外部中断 1 中断允许位
- ET1:定时器/计数器 1 中断允许位
- ES:串口中断允许位
- ET2:定时器/计数器 2 中断允许位(进行52系列)
- EA:中断总开关
IP 中断优先级控制寄存器 #
IP | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位地址 | BFH | BEH | BDH | BCH | BBH | BAH | B9H | B8H |
位名称 | - | - | - | PS | PT1 | PX1 | PT0 | PX0 |
PS #
PS 为串行接口的中断优先级控制位。
PS = 1
时, 串行接口被定义为高优先级中断源。PS = 0
时, 串行接口被定义为低优先级中断源。
PT1 #
PT1 为定时器/计数器 T1 的中断优先级控制位。
PT1 = 1
, T1 被定义为高优先级中断源。PT1 = 0
, T1 被定义为低优先级中断源。
PX1 #
PX1 为外部中断 1(INT1) 的优先级控制位
PX1 = 1
, T1 外部中断 1 被定义为高优先级中断源。PX1 = 0
, T1 外部中断 1 被定义为低优先级中断源。
PT0 #
PT0 为定时器/计数器 T0 的中断优先级控制位。 其功能与 PT1 相同。
PX0 #
PX0 为外部中断 0(INT0) 的优先级控制位。 其功能与 PX1 相同。
中断优先级控制寄存器 IP 的各位都由用户置位或复位, 可用位操作指令或字节操作指令更新 IP 的内容, 以改变各中断源的中断优先级, 单片机复位后 IP 全为 0, 各个中断源均为低优先级中断。
SCON 串行口控制寄存器 #
SCON 为串行通信控制寄存器,主要用于设置串行接口的工作方式,同时也用于保存串行接口的接收中断和发送中断标志。其字节地址是 98H, 既支持字节操作, 又支持位操作。 位地址的范围是 98H ~ 9FH。 8 位中只有最低的两位与中断有关, 其格式如下:
SCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
位地址 | 9FH | 9EH | 9DH | 9CH | 9BH | 9AH | 99H | 98H |
位名称 | SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |
SM0 和 SM1 #
串行口方式选择
SM0 | SM1 | 方式 | 说明 | 波特率 |
---|---|---|---|---|
0 | 0 | 0 | 8位数据发送 | fosc/12 |
0 | 1 | 1 | 10位数据发送,包括起始位,停止位 | 可变 |
1 | 0 | 2 | 11位数据发送,包括起始位,停止位 ,校验位 | fosc/64 |
1 | 1 | 3 | 同方式2 |
- SM2:多机通信使能位。在方式2或方式3中,若SM2=1,则只有当接收到的第9位数据(RB8)为1时,才能将接收到的数据送入SBUF,并使接收中断标志RI置位向CPU申请中断,否则数据丢失;若SM2=0,则不论接收到的第9位数据为1还是为0,都将会把前8位数据装入SBUF中,并使接收中断标志RI置位向CPU申请中断。在方式1,如SM2=1,则只有收到有效的停止位时才会使RI置位。在方式0时,SM2必须为0。
- REN:串口数据接收允许位,1允许,0禁止
- TB8:在方式2和方式3中,这位发送的是第9位。在多机通信中,常以该位的状态来表示主机发送的是地址还是数据。通常规定:TB8为“0”表示主机发送的是数据,为“1”表示发送的是地址。
- RB8:在方式2和方式3中,这位发送的是第9位。它和SM2、TB8一起用于通信控制。
TI 串行通信的发送中断标志位 #
要发送的数据一旦写入串行接口的数据缓冲器SBUF, 单片机的硬件电路就立即启动发送器进行发送。 CPU 响应中断时并不清零 TI, 同样要在程序中用软件来清零。
发送完成手动清零 TI(TI=1
),如下代码:
// 发送AT命令
void SendCmd(uchar *cmd) {
uchar i = 0;
while(cmd[i] != '\0') {
SBUF = cmd[i];
while(!TI);
TI = 0;
i++;
}
}
RI 串行接口的接收中断标志位 #
简单地说,串行接口在接收完一帧数据时自动将 RI
置位(RI=1
), 向CPU 申请中断。
接收完成手动清零 RI,如下代码:
// 串口中断服务函数
void Uart() interrupt 4 {
if(RI) {
RI = 0;
// ... 读取数据等等
}
}
PCON 电源控制寄存器 #
PCON 中的最高位 SMOD 是与串口的波特率设置有关的选择位, 其余 7 位都和串行通信 无关。
SMOD = 1 时, 方式 1、 2、 3 的波特率加倍。 PCON 格式为
PCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
名称 | SMOD |
SCON 波特率倍增控制位 #
串行通信的波特率是由单片机的定时器 T1 产生, 并且串行通信占用一个单片机的一个中断。
简单理解,一般情况 51 系列只要串口通信就会用到占用 T1 定时器,固定写法 T1 定时器和串口没有直接关系。
SCON = 0x50; // 8位数据,可变波特率
TMOD |= 0x20; // 设置定时器1为8位自动重装方式
TH1 = 0xFD; // 波特率9600
TL1 = 0xFD;
中断对应信息 #
中断名称 | 中断标志位 | 中断号 | 默认优先级 | 中断入口地址 |
---|---|---|---|---|
外部中断0 | IE0 | 0 | 高 | 0003H |
定时/计数器0溢出中断 | TF0 | 2 | ↓ | 000BH |
外部中断1 | IE1 | 1 | ↓ | 0013H |
定时/计数器1溢出中断 | TF1 | 3 | ↓ | 001BH |
串口发送或接收中断 | RI/TI | 4 | 低 | 0023H |