学习嵌入式系统,从经典的8051单片机入门是一个很好的起点。本文将从其系统结构、引脚定义、存储器模型和中断系统等方面进行梳理,为初学者构建清晰的知识框架。
下图展示了一个典型的8051单片机引脚排列:

引脚功能详解
采用HMOS工艺的MCS-51单片机通常为40引脚双列直插封装。其指令周期由1至4个机器周期组成,每个机器周期包含12个时钟振荡周期。
1. 电源与时钟引脚
- Vcc (Pin 40): 接+5V电源。
- Vss (Pin 20): 接地。
- XTAL1 (Pin 19) & XTAL2 (Pin 18): 用于外接晶体振荡器,为芯片提供时钟信号。
2. 控制引脚
- RST/Vpd (Pin 9): 复位信号输入脚/备用电源输入。
- ALE/PROG (Pin 30): 地址锁存允许信号输出/编程脉冲输入。
- PSEN (Pin 29): 外部程序存储器读选通信号。
- EA/Vpp (Pin 31): 内部/外部程序存储器选择端/编程电压输入。
3. I/O口引脚
8051共有4个8位并行I/O口(P0, P1, P2, P3)。
- P0口: 真正的双向8位三态口。访问外部存储器时,复用为低8位地址总线和数据总线。
- P1口: 准双向口,无高阻状态。对于增强型型号(如8052),P1.0和P1.1有第二功能。
- P2口: 准双向口。访问外部存储器时,输出高8位地址。
- P3口: 准双向口,且每个引脚均有第二功能,详见下表:
| 引脚 |
第二功能 |
说明 |
| P3.0 |
RXD |
串行数据接收 |
| P3.1 |
TXD |
串行数据发送 |
| P3.2 |
INT0 |
外部中断0输入 |
| P3.3 |
INT1 |
外部中断1输入 |
| P3.4 |
T0 |
定时器/计数器0外部输入 |
| P3.5 |
T1 |
定时器/计数器1外部输入 |
| P3.6 |
WR |
外部数据存储器写选通 |
| P3.7 |
RD |
外部数据存储器读选通 |
存储器结构
1. 程序存储器 (ROM)
程序计数器(PC)从地址0000H开始执行。通常在该处放置一条跳转指令,转向用户主程序。中断服务程序的入口地址是固定的,例如外部中断0位于0003H,定时器0溢出中断位于000BH等。
2. 内部数据存储器 (RAM)
地址空间00H~7FH,分为三个区域:
- 工作寄存器区 (00H~1FH): 分为4组(组0~组3),每组包含R0~R7共8个寄存器,由程序状态字(PSW)的RS0和RS1位选择当前使用组。
- 位寻址区 (20H~2FH): 这16个字节的每一位都有一个独立的位地址(00H~7FH),方便进行位操作。
- 用户RAM区 (30H~7FH): 用作堆栈区和数据缓存。复位后堆栈指针(SP)指向07H,初始化时通常将SP设为更高地址(如60H)。
3. 特殊功能寄存器 (SFR)
地址空间80H~FFH,用于控制定时器、串口、中断等核心功能。复位后,关键寄存器如PC=0000H, PSW=00H, SP=07H, P0~P3=FFH。
4. 外部数据存储器与I/O
MCS-51可外扩最多64KB的RAM和I/O口,它们统一编址,通过MOVX指令访问。
中断系统
8051提供了5个中断源和2个可编程的优先级,其结构如下图所示:

中断相关寄存器
1. 定时器/计数器控制寄存器 (TCON)
| 位 |
符号 |
功能说明 |
| IT0 |
中断0触发方式 |
0=电平触发, 1=下降沿触发 |
| IE0 |
中断0请求标志 |
硬件置1, CPU响应后硬件清0 |
| IT1 |
中断1触发方式 |
同IT0 |
| IE1 |
中断1请求标志 |
同IE0 |
| TF0 |
定时器0溢出标志 |
溢出时硬件置1,响应中断后硬件清0 |
| TR0 |
定时器0运行控制 |
软件置1启动,清0停止 |
| TF1 |
定时器1溢出标志 |
同TF0 |
| TR1 |
定时器1运行控制 |
同TR0 |
2. 串口控制寄存器 (SCON)
- TI (SCON.1): 串行发送中断请求标志。发送完一帧数据后由硬件置1,必须由软件清0。
- RI (SCON.0): 串行接收中断请求标志。接收完一帧数据后由硬件置1,必须由软件清0。
3. 中断允许寄存器 (IE)
| 位 |
符号 |
功能说明 (1=允许, 0=禁止) |
| EA |
总中断允许 |
所有中断的总开关 |
| ES |
串口中断允许 |
|
| ET1 |
定时器1中断允许 |
|
| EX1 |
外部中断1允许 |
|
| ET0 |
定时器0中断允许 |
|
| EX0 |
外部中断0允许 |
|
4. 中断优先级寄存器 (IP)
对应位设置为1,则将该中断源设置为高优先级;为0则为低优先级。优先级顺序为:PS (串口) > PT1 (定时器1) > PX1 (外部中断1) > PT0 (定时器0) > PX0 (外部中断0)。
了解这些底层硬件知识是进行有效单片机编程的基础。在实际开发中,虽然多数时候使用更高效的C语言进行单片机程序开发,但掌握其系统结构与中断机制,对于调试复杂问题和优化性能至关重要,这也是深入理解计算机体系结构的重要一环。
|