一、8051 单片机概述
理解 8051 的历史地位与核心特征
8051 是 Intel 公司于 1981 年推出的 8 位单片机,是现代 MCU 发展的重要里程碑。凭借其结构简单、资源适中、易于教学、生态丰富等特点,8051 内核及其兼容型号(如 STC89C52RC、AT89S52 等)至今仍是中职、高校单片机教学的首选平台。
8 位 CPU
数据总线宽度 8 位,ALU 一次可处理 1 字节数据,简单直观,适合初学者建立计算机底层认知。
哈佛结构
程序存储器与数据存储器分开编址,可扩展片内/片外 ROM 与 RAM,寻址空间清晰。
片上集成
集成 CPU、RAM、ROM、定时器、中断控制器、串口、I/O 口于单一芯片,构成完整最小系统。
二、内核架构与引脚功能
掌握 8051 内部功能模块与外部引脚
8051 内部由 CPU 核心、振荡器与时序电路、程序存储器接口、数据存储器接口、中断系统、定时器/计数器、串行口及 4 组并行 I/O 口组成。典型封装为 40 引脚 DIP,常见引脚功能如下:
| 引脚类别 | 引脚名称 | 功能说明 |
|---|---|---|
| 电源 | VCC / GND | +5V 电源与接地,建议就近接 0.1μF 退耦电容 |
| 时钟 | XTAL1 / XTAL2 | 外接晶振输入,本课程统一采用 12MHz |
| 复位 | RST | 高电平有效,持续 2 个机器周期以上完成复位 |
| I/O 口 | P0 ~ P3 | 32 根可编程 I/O 线,P3 口具有第二功能 |
| 控制 | ALE / PSEN / EA | 地址锁存、外部程序存储器读选通、内外 ROM 选择 |
P3 口第二功能一览
三、存储器组织
程序存储器与数据存储器独立编址
8051 采用哈佛结构,程序存储器(ROM/Flash)与数据存储器(RAM)拥有各自独立的 64KB 寻址空间。理解存储器映射是掌握汇编编程的基础。
程序存储器
- 地址范围:0000H ~ FFFFH(最大 64KB)
- 0000H:复位后 PC 初始值,必须存放跳转指令
- 0003H ~ 002BH:中断向量表,固定入口地址
- 片内 ROM:由 EA 引脚决定是否使用片内程序存储器
数据存储器
- 片内 RAM:00H ~ 7FH(128B),部分型号扩展至 256B
- 工作寄存器区:00H ~ 1FH,分 4 组 R0~R7
- 位寻址区:20H ~ 2FH,共 128 个可位寻址位
- 通用 RAM:30H ~ 7FH,用户变量与堆栈区
| 地址区间 | 用途 | 说明 |
|---|---|---|
| 00H ~ 1FH | 工作寄存器组 | 4 组 R0~R7,由 PSW 的 RS0、RS1 选择 |
| 20H ~ 2FH | 位寻址区 | 位地址 00H~7FH,支持位操作指令 |
| 30H ~ 7FH | 通用 RAM | 用户数据、中间变量、堆栈 |
| 80H ~ FFH | SFR 区 | 特殊功能寄存器,离散分布 |
四、特殊功能寄存器(SFR)
控制单片机各功能模块的核心寄存器
SFR 位于片内 RAM 的 80H~FFH 区间,用于配置和控制 CPU、定时器、中断、串口、I/O 等模块。绝大多数 SFR 支持字节寻址,部分还支持位寻址。
| 符号 | 地址 | 名称 | 主要功能 |
|---|---|---|---|
| ACC | E0H | 累加器 | 运算核心,多数指令的操作数与结果存放处 |
| B | F0H | B 寄存器 | 乘除法辅助寄存器,也可作通用寄存器 |
| PSW | D0H | 程序状态字 | 保存 CY、AC、OV、P 等标志位及寄存器组选择 |
| SP | 81H | 堆栈指针 | 指向堆栈顶部,复位初值 07H |
| DPTR | 82H/83H | 数据指针 | DPL/DPH 组成 16 位指针,用于访问片外存储器 |
| P0~P3 | 80H/B0H A0H/90H | 并行端口 | 4 组 8 位 I/O 口锁存器 |
| TCON | 88H | 定时器控制 | 定时器运行、溢出标志、外部中断触发方式 |
| TMOD | 89H | 定时器模式 | 设置定时器/计数器工作模式 |
| TL0/TH0 TL1/TH1 | 8AH/8CH 8BH/8DH | 定时器初值 | 定时器 0/1 的 16 位计数初值寄存器 |
| SCON | 98H | 串口控制 | 串行口工作方式、接收发送标志 |
| SBUF | 99H | 串口缓冲 | 读 SBUF 为接收,写 SBUF 为发送 |
| IE | A8H | 中断允许 | 总中断及各类中断源使能控制 |
| IP | B8H | 中断优先级 | 设置中断源为高优先级或低优先级 |
| PCON | 87H | 电源控制 | 波特率倍增、空闲/掉电模式控制 |
PSW 程序状态字各位含义
进位/借位标志
辅助进位标志
用户标志
寄存器组选择
溢出标志
保留位
累加器奇偶标志
五、寻址方式
8051 支持的七种操作数寻址方式
| 寻址方式 | 描述 | 示例 |
|---|---|---|
| 立即寻址 | 操作数直接包含在指令中 | MOV A, #55H |
| 直接寻址 | 操作数为 8 位直接地址 | MOV A, 30H |
| 寄存器寻址 | 操作数为 R0~R7 或 A、B、DPTR | MOV A, R0 |
| 寄存器间接寻址 | 以 R0/R1/DPTR 内容为地址 | MOV A, @R0 |
| 变址寻址 | 基址寄存器 DPTR/PC 加 ACC 偏移 | MOVC A, @A+DPTR |
| 相对寻址 | 以当前 PC 值为基址加 8 位偏移 | SJMP LOOP |
| 位寻址 | 对可位寻址区域单独操作 | SETB P1.0 |
; 寻址方式示例 MOV A, #0FFH ; 立即寻址,A = 0FFH MOV A, 30H ; 直接寻址,A = (30H) MOV A, R0 ; 寄存器寻址 MOV A, @R0 ; 寄存器间接寻址,A = ((R0)) MOVC A, @A+DPTR ; 变址寻址,查表 SETB P1.0 ; 位寻址,置位 P1.0
六、指令系统
按功能分类的 8051 指令集
8051 指令系统共 111 条指令,按功能可分为数据传送、算术运算、逻辑运算、控制转移和位操作五大类。指令长度 1~3 字节,执行周期 1~4 个机器周期。
数据传送类
MOV、MOVX、MOVC、PUSH、POP、XCH、XCHD 等,负责在寄存器、RAM、SFR、片外存储器之间搬运数据。
算术运算类
ADD、ADDC、SUBB、INC、DEC、MUL、DIV、DA 等,影响 PSW 标志位。
逻辑运算类
ANL、ORL、XRL、CLR、CPL、RL、RLC、RR、RRC、SWAP 等,用于位运算与移位。
控制转移类
AJMP、LJMP、SJMP、JZ/JNZ、CJNE、DJNZ、ACALL、LCALL、RET、RETI 等。
位操作类指令
8051 支持对位寻址区的独立操作,这是其区别于普通 8 位机的重要特性。
置 1
清 0
取反
位为 1/0 跳转
为 1 跳转并清 0
位与进位
位或进位
位传进位
七、中断系统
5 个中断源、2 级优先级、固定入口地址
8051 具有 5 个中断源:2 个外部中断(INT0、INT1)、2 个定时器溢出中断(TF0、TF1)和 1 个串行口中断(RI/TI)。中断系统通过 IE、IP、TCON、SCON 等寄存器进行管理。
| 中断源 | 入口地址 | 触发条件 | 标志位 |
|---|---|---|---|
| 外部中断 0 | 0003H | INT0 引脚低电平或下降沿 | IE0 |
| 定时器 0 | 000BH | T0 计数溢出 | TF0 |
| 外部中断 1 | 0013H | INT1 引脚低电平或下降沿 | IE1 |
| 定时器 1 | 001BH | T1 计数溢出 | TF1 |
| 串行口 | 0023H | 接收完成 RI 或发送完成 TI | RI / TI |
IE 中断允许寄存器
EA — 总中断允许位,EA=1 才允许各中断源单独使能
ES — 串行口中断允许
ET1 / ET0 — 定时器 1/0 中断允许
EX1 / EX0 — 外部中断 1/0 允许
IP 中断优先级寄存器
PS / PT1 / PT0 / PX1 / PX0
置 1 为高优先级,清 0 为低优先级。同一优先级内按自然优先级排队,外部中断 0 最高,串行口最低。
八、定时器/计数器
T0/T1 的四种工作模式与初值计算
8051 内部集成两个 16 位定时器/计数器 T0 和 T1,既可对内部机器周期计数(定时模式),也可对外部脉冲计数(计数模式)。通过 TMOD 设置工作方式,通过 TCON 控制启停与溢出标志。
| M1 M0 | 模式 | 说明 |
|---|---|---|
| 0 0 | 模式 0 | 13 位定时器,THx 8 位 + TLx 低 5 位 |
| 0 1 | 模式 1 | 16 位定时器,最常用 |
| 1 0 | 模式 2 | 8 位自动重装,TLx 计数,THx 保存初值 |
| 1 1 | 模式 3 | T0 拆成两个 8 位定时器,T1 作波特率发生器 |
定时初值计算公式
; 模式 1(16 位)定时初值计算 ; 初值 X = 65536 - (定时时间 × 晶振频率) / 12 ; 例:晶振 12MHz,定时 1ms ; X = 65536 - (0.001 × 12000000) / 12 = 64536 = 0FC18H
TMOD 的 GATE 位决定定时器是否受外部中断引脚控制;C/T 位选择定时(0)或计数(1)模式。
九、串行通信接口
UART 全双工异步串行通信
8051 内置一个全双工异步串行口,通过 P3.0(RXD)和 P3.1(TXD)进行数据收发。可工作于 4 种方式,最常用的是方式 1(10 位异步)和方式 3(11 位异步,带第 9 位校验)。
SCON 寄存器
SM0/SM1 — 工作方式选择
SM2 — 多机通信控制位
REN — 接收允许位
TB8 / RB8 — 发送/接收第 9 位数据
TI / RI — 发送/接收中断标志
波特率设置
方式 0:固定 fosc/12
方式 2:fosc × 2^SMOD / 64
方式 1/3:由 T1 溢出率决定
Baud = (2^SMOD / 32) × (T1 溢出率)
; 串口初始化示例:方式 1,波特率 2400,晶振 12MHz MOV SCON, #50H ; 方式 1,允许接收 MOV TMOD, #20H ; T1 方式 2 自动重装 MOV TH1, #0F3H ; 2400bps 初值(误差约 0.16%) MOV TL1, #0F3H SETB TR1 ; 启动 T1
十、并行 I/O 端口
P0 ~ P3 口的结构与驱动特性
8051 提供 4 组 8 位双向 I/O 口,每组端口均由锁存器、输出驱动器和输入缓冲器组成。不同端口因第二功能、内部上拉结构差异,使用时需注意驱动能力。
P0 口
开漏输出,内部无上拉电阻。作为通用 I/O 时需外接上拉电阻;作为地址/数据复用总线时无需外接。
P1 口
内部带弱上拉,为准双向口。通用 I/O 使用最方便,可直接驱动 LED(需限流电阻)。
P2 口
内部带弱上拉。通用 I/O 外接高 8 位地址总线时输出地址码,否则可作为普通 I/O。
P3 口
内部带弱上拉,除通用 I/O 外还具有丰富的第二功能,如串口、中断、定时器输入等。
使用注意
- 作为输入口前,必须先向对应锁存器写 1,关闭输出驱动管。
- P0 口驱动能力最强,但需外接上拉电阻;P1~P3 内部上拉较弱,不适合直接驱动大电流负载。
- 读取端口时应区分读锁存器(读-修改-写指令)与读引脚。