1、寄存器总结

1.1 五个关键寄存器详细总结

寄存器 地址 主要功能 关键位定义(位7→位0) 复位值
TCON 0x88 定时器/计数器控制寄存器,也包含外部中断标志 TF1 (位7): T1溢出标志
TR1 (位6): T1运行控制
TF0 (位5): T0溢出标志
TR0 (位4): T0运行控制
IE1 (位3): INT1中断标志
IT1 (位2): INT1触发方式
IE0 (位1): INT0中断标志
IT0 (位0): INT0触发方式
0x00
TMOD 0x89 定时器/计数器工作模式寄存器 GATE (位7/3): 门控位
C/T (位6/2): 定时/计数选择
M1 (位5/1): 模式选择高位
M0 (位4/0): 模式选择低位
(高4位控制T1,低4位控制T0)
0x00
IE 0xA8 中断允许控制寄存器 EA (位7): 总中断允许
ES (位4): 串口中断允许
ET1 (位3): T1中断允许
EX1 (位2): INT1中断允许
ET0 (位1): T0中断允许
EX0 (位0): INT0中断允许
0x00
IP 0xB8 中断优先级控制寄存器 PS (位4): 串口中断优先级
PT1 (位3): T1中断优先级
PX1 (位2): INT1中断优先级
PT0 (位1): T0中断优先级
PX0 (位0): INT0中断优先级
0x00
SCON 0x98 串行通信控制寄存器 SM0, SM1 (位7,6): 工作模式选择
SM2 (位5): 多机通信控制
REN (位4): 接收允许
TB8 (位3): 发送第9位
RB8 (位2): 接收第9位
TI (位1): 发送中断标志
RI (位0): 接收中断标志
0x00

1.2 寄存器功能要点

  • TCON:兼具定时器控制和中断标志功能,需软件清零TFx和IEx标志
  • TMOD:不可位寻址,设置时需整体赋值,高4位控制T1,低4位控制T0
  • IE:控制中断开关,EA=1开启总中断,各中断位单独控制
  • IP:设置中断优先级,同一优先级内按自然优先级排序
  • SCON:控制串口工作模式和数据收发,TI/RI需软件清零

1.2、TCON(定时器控制寄存器)

1.2.1 TCON 寄存器概述

TCON(Timer Control Register)是 8051 单片机的定时器/计数器控制寄存器,地址为 88H,可位寻址(位地址 88H~8FH)。用于控制定时器的启动、停止,以及外部中断的触发方式和标志位。

1.2.2 TCON 寄存器位定义
位序号 位名称 位地址 功能说明
D7 TF1 8FH 定时器 T1 溢出标志:T1 计数溢出时硬件置 1,进入中断服务程序后硬件自动清零(查询方式需软件清零)
D6 TR1 8EH 定时器 T1 运行控制位:TR1=1 启动 T1,TR1=0 停止 T1
D5 TF0 8DH 定时器 T0 溢出标志:T0 计数溢出时硬件置 1,进入中断服务程序后硬件自动清零
D4 TR0 8CH 定时器 T0 运行控制位:TR0=1 启动 T0,TR0=0 停止 T0
D3 IE1 8BH 外部中断 1 请求标志:INT1(P3.3) 检测到有效中断信号时硬件置 1,CPU 响应中断后硬件自动清零
D2 IT1 8AH 外部中断 1 触发方式选择:IT1=1 下降沿触发,IT1=0 低电平触发
D1 IE0 89H 外部中断 0 请求标志:INT0(P3.2) 检测到有效中断信号时硬件置 1,CPU 响应中断后硬件自动清零
D0 IT0 88H 外部中断 0 触发方式选择:IT0=1 下降沿触发,IT0=0 低电平触发
1.2.3 TCON 寄存器位操作示例
// 启动定时器 T0
TR0 = 1;    // 或 TCON |= 0x10;

// 停止定时器 T0
TR0 = 0;    // 或 TCON &= ~0x10;

// 设置外部中断 0 为下降沿触发
IT0 = 1;    // 或 TCON |= 0x01;

// 设置外部中断 0 为低电平触发
IT0 = 0;    // 或 TCON &= ~0x01;

// 软件查询 T0 是否溢出(查询方式)
if (TF0) {
    // T0 已溢出,处理定时事件
    TF0 = 0;  // 软件清零
}
1.2.4 TCON 与 TMOD 配合使用
寄存器 地址 功能 位寻址
TCON 88H 定时器启停控制 + 溢出标志 + 外部中断控制 是(88H~8FH)
TMOD 89H 定时器工作模式选择(M1M0 位) + 功能选择(C/T 位) + 门控位(GATE) 否(只能字节操作)

注意:TMOD 不可位寻址,必须用字节操作赋值;TCON 可位寻址,建议用位操作提高代码可读性。

2、中断总结

2.1 外部中断

2.1.1 外部中断概述

8051 单片机有两个外部中断源:INT0(P3.2 引脚)和 INT1(P3.3 引脚),分别对应中断号 0 和中断号 2(中断号 1 为定时器 T0)。

2.1.2 外部中断触发方式
触发方式 ITx 位值 触发条件 电平要求 适用场景
低电平触发 0 引脚检测到低电平时触发 低电平需保持到 CPU 响应中断 按键按下持续低电平
下降沿触发 1 引脚从高电平跳变到低电平时触发 高→低跳变,无需保持低电平 脉冲信号、按键按下再松开
2.1.3 外部中断相关寄存器
寄存器 功能 说明
TCON.0 IT0 INT0 触发方式 0=低电平触发,1=下降沿触发
TCON.1 IE0 INT0 中断请求标志 检测到有效信号硬件置 1,响应中断后硬件清零
TCON.2 IT1 INT1 触发方式 0=低电平触发,1=下降沿触发
TCON.3 IE1 INT1 中断请求标志 检测到有效信号硬件置 1,响应中断后硬件清零
IE.0 EX0 INT0 中断允许位 1=允许 INT0 中断
IE.2 EX1 INT1 中断允许位 1=允许 INT1 中断
IE.7 EA 总中断允许位 1=开放所有中断,0=屏蔽所有中断
IP.0 PX0 INT0 中断优先级 0=低优先级,1=高优先级
IP.2 PX1 INT1 中断优先级 0=低优先级,1=高优先级
2.1.4 外部中断初始化流程
void External_Interrupt_Init() {
    // 1. 设置触发方式:下降沿触发
    IT0 = 1;   // INT0 下降沿触发
    IT1 = 1;   // INT1 下降沿触发
    
    // 2. 允许外部中断
    EX0 = 1;   // 允许 INT0 中断
    EX1 = 1;   // 允许 INT1 中断
    
    // 3. 设置中断优先级(可选)
    PX0 = 0;   // INT0 低优先级
    PX1 = 1;   // INT1 高优先级
    
    // 4. 开启总中断
    EA = 1;    // 开放所有中断
}

// INT0 中断服务函数
void INT0_ISR() interrupt 0 {
    // 外部中断 0 处理代码
    // IE0 由硬件自动清零
}

// INT1 中断服务函数
void INT1_ISR() interrupt 2 {
    // 外部中断 1 处理代码
    // IE1 由硬件自动清零
}
2.1.5 外部中断应用场景
应用场景 推荐触发方式 说明
按键检测 下降沿触发 按键按下时产生一次跳变,避免低电平持续触发
传感器信号 下降沿触发 脉冲型传感器(如霍尔传感器)输出跳变信号
紧急停止 低电平触发 持续低电平可确保 CPU 不会漏掉信号
编码器输入 下降沿触发 旋转编码器输出脉冲信号
2.1.6 外部中断注意事项
  1. 低电平触发:中断服务程序返回前必须撤销低电平信号,否则会再次触发中断
  2. 下降沿触发:CPU 在每个机器周期采样引脚电平,需保证高→低跳变至少维持 1 个机器周期
  3. 中断优先级:同级中断按 INT0 > T0 > INT1 > T1 > 串口 的优先级顺序响应
  4. 中断嵌套:低优先级中断可被高优先级中断打断,同级中断不能互相打断

3、IO 端口总结

3.1 8051 单片机 IO 端口概述

8051 单片机有 4 个 8 位并行 I/O 端口:P0、P1、P2、P3,共 32 个 I/O 引脚。每个端口对应一个特殊功能寄存器(SFR),可进行字节操作或位操作。

3.2 各 IO 端口功能对比

端口 地址 准双向口 内部上拉 第二功能 驱动能力
P0 80H 无(需外接上拉电阻) 地址/数据总线复用(AD0~AD7) 可驱动 8 个 LSTTL 负载
P1 90H 部分引脚有第二功能(如 52 系列) 可驱动 4 个 LSTTL 负载
P2 A0H 高 8 位地址总线(A8~A15) 可驱动 4 个 LSTTL 负载
P3 B0H 各引脚均有第二功能(见下表) 可驱动 4 个 LSTTL 负载

3.3 P3 口第二功能详解

P3 引脚 第二功能 功能说明
P3.0 RXD 串行口数据接收端
P3.1 TXD 串行口数据发送端
P3.2 INT0 外部中断 0 输入
P3.3 INT1 外部中断 1 输入
P3.4 T0 定时器 T0 外部计数输入
P3.5 T1 定时器 T1 外部计数输入
P3.6 WR 外部数据存储器写选通信号
P3.7 RD 外部数据存储器读选通信号

3.4 IO 端口操作示例

// 字节操作
P1 = 0x0F;      // P1 高 4 位输出 0,低 4 位输出 1

// 位操作
P1_0 = 1;       // P1.0 输出高电平
P1_1 = 0;       // P1.1 输出低电平

// 读引脚(必须先写 1 到锁存器)
P1 = 0xFF;      // 准备读 P1 引脚
unsigned char val = P1;  // 读取 P1 引脚电平

// 读锁存器(读-改-写操作)
P1 &= 0xF0;     // 读 P1 锁存器 → 与操作 → 写回 P1

// 端口位定义(使用 sbit)
sbit LED = P1^0;    // 定义 P1.0 为 LED
sbit KEY = P3^2;    // 定义 P3.2 为按键输入
LED = 0;            // 点亮 LED(假设低电平有效)

3.5 IO 端口应用注意事项

  1. P0口作为通用IO:需外接上拉电阻(通常4.7kΩ~10kΩ)
  2. 读引脚操作:必须先向端口写1,才能正确读取外部引脚电平
  3. 第二功能使用:当使用P3口第二功能时,相应引脚不能再作为通用IO
  4. 驱动能力:P0口驱动能力最强,可直接驱动LED;其他端口需考虑负载电流
  5. 准双向口特性:输出0时为强下拉,输出1时为弱上拉

3.6 IO 端口典型应用电路

3.6.1 LED驱动电路

单片机P1.0

限流电阻220Ω

LED阳极

LED阴极

GND

3.6.2 按键输入电路

VCC

上拉电阻10kΩ

按键一端

按键另一端

GND

单片机P3.2

3.6.3 P0口上拉电阻连接

单片机P0.x

上拉电阻4.7kΩ

VCC

外部负载


复习要点总结

  1. 寄存器:重点掌握TCON、TMOD、IE、IP、SCON五个关键寄存器的地址、功能和位定义
  2. 中断:理解外部中断的两种触发方式、初始化流程和应用场景
  3. IO端口:掌握四个端口的特性差异、操作方法和典型应用电路
  4. 代码实践:熟练使用位操作和字节操作控制寄存器和端口
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐