开发者-导航 猿导航

MCS-51 特殊功能寄存器

发布时间:

目录

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 = 1INT0 = 1TR1 = 1INT1 = 1 时定时器才能工作

C/T̅ 工作模式选择位 #

为定时器/计数器的工作模式选择位。T̅ 逻辑非(NOT)

GATE 说明
0 TR0 或 TR1 等于 1 定时器工作(启停只受 TRx 控制)
1 TR0 = 1INT0 = 1TR1 = 1INT1 = 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

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 为串行接口的中断优先级控制位。

PT1 #

PT1 为定时器/计数器 T1 的中断优先级控制位。

PX1 #

PX1 为外部中断 1(INT1) 的优先级控制位

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

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