51单片机期末复习笔记:寄存器、中断与IO端口详解
·
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 外部中断注意事项
- 低电平触发:中断服务程序返回前必须撤销低电平信号,否则会再次触发中断
- 下降沿触发:CPU 在每个机器周期采样引脚电平,需保证高→低跳变至少维持 1 个机器周期
- 中断优先级:同级中断按 INT0 > T0 > INT1 > T1 > 串口 的优先级顺序响应
- 中断嵌套:低优先级中断可被高优先级中断打断,同级中断不能互相打断
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 端口应用注意事项
- P0口作为通用IO:需外接上拉电阻(通常4.7kΩ~10kΩ)
- 读引脚操作:必须先向端口写1,才能正确读取外部引脚电平
- 第二功能使用:当使用P3口第二功能时,相应引脚不能再作为通用IO
- 驱动能力:P0口驱动能力最强,可直接驱动LED;其他端口需考虑负载电流
- 准双向口特性:输出0时为强下拉,输出1时为弱上拉
3.6 IO 端口典型应用电路
3.6.1 LED驱动电路
3.6.2 按键输入电路
3.6.3 P0口上拉电阻连接
复习要点总结:
- 寄存器:重点掌握TCON、TMOD、IE、IP、SCON五个关键寄存器的地址、功能和位定义
- 中断:理解外部中断的两种触发方式、初始化流程和应用场景
- IO端口:掌握四个端口的特性差异、操作方法和典型应用电路
- 代码实践:熟练使用位操作和字节操作控制寄存器和端口
更多推荐

所有评论(0)