特殊功能寄存器(SFR)
特殊功能寄存器(Special Function Register,SFR)是 8051 单片机操作硬件外设的"开关墙"。通过读写 SFR,可以控制 GPIO、定时器、串口、中断等所有硬件模块。
地址范围:80H ~ FFH(与高 128 字节内部 RAM 地址重叠,通过寻址方式区分)
SFR 映射表(STC89C52 全部)
| 地址 | 寄存器 | 名称 | 可位寻址 |
|---|---|---|---|
| 80H | P0 | P0 口数据锁存器 | ✅ |
| 81H | SP | 堆栈指针 | |
| 82H | DPL | 数据指针低字节 | |
| 83H | DPH | 数据指针高字节 | |
| 84H | - | 保留 | |
| 85H | - | 保留 | |
| 86H | - | 保留 | |
| 87H | PCON | 电源控制寄存器 | |
| 88H | TCON | 定时器控制寄存器 | ✅ |
| 89H | TMOD | 定时器模式寄存器 | |
| 8AH | TL0 | 定时器 0 低字节 | |
| 8BH | TL1 | 定时器 1 低字节 | |
| 8CH | TH0 | 定时器 0 高字节 | |
| 8DH | TH1 | 定时器 1 高字节 | |
| 8EH | AUXR | 辅助寄存器 | |
| 8FH | INT_CLKO | 外部中断与时钟输出 | |
| 90H | P1 | P1 口数据锁存器 | ✅ |
| 91H~97H | - | 保留 | |
| 98H | SCON | 串行口控制寄存器 | ✅ |
| 99H | SBUF | 串行口数据缓冲器 | |
| 9AH~A7H | - | 保留 | |
| A0H | P2 | P2 口数据锁存器 | ✅ |
| A1H~A7H | - | 保留 | |
| A8H | IE | 中断使能寄存器 | ✅ |
| A9H~AFH | - | 保留 | |
| B0H | P3 | P3 口数据锁存器 | ✅ |
| B1H~B7H | - | 保留 | |
| B8H | IP | 中断优先级寄存器 | ✅ |
| B9H~BFH | - | 保留 | |
| C0H~C7H | - | 保留 | |
| C8H | T2CON | 定时器 2 控制寄存器 | ✅ |
| C9H | T2MOD | 定时器 2 模式寄存器 | |
| CAH | RCAP2L | 定时器 2 捕获/重载低字节 | |
| CBH | RCAP2H | 定时器 2 捕获/重载高字节 | |
| CCH | TL2 | 定时器 2 低字节 | |
| CDH | TH2 | 定时器 2 高字节 | |
| CEH~CFH | - | 保留 | |
| D0H | PSW | 程序状态字 | ✅ |
| D1H~D7H | - | 保留 | |
| E0H | ACC | 累加器 | ✅ |
| E1H~E7H | - | 保留 | |
| E8H | P4 | P4 口(44 脚封装) | ✅ |
| E9H~EFH | - | 保留 | |
| F0H | B | B 寄存器 | ✅ |
| F1H~FFH | - | 保留 |
核心 SFR 详解
P0~P4 (I/O 口)
PSW — 程序状态字(D0H)
| 位 | 名称 | 功能 | |:--:|:----:|------| | D7 | CY | 进位/借位标志(布尔处理器中的"累加器") | | D6 | AC | 辅助进位标志(用于 BCD 调整) | | D5 | F0 | 用户标志位 | | D4 | RS1 | 工作寄存器组选择位(高位) | | D3 | RS0 | 工作寄存器组选择位(低位) | | D2 | OV | 溢出标志 | | D1 | — | 保留 | | D0 | P | 奇偶校验位(ACC 中 1 的个数为奇数时置 1) |RS1/RS0 寄存器组选择: | RS1 | RS0 | 寄存器区 | 地址范围 | |:---:|:---:|:--------:|:--------:| | 0 | 0 | 区 0 | 00H~07H(默认) | | 0 | 1 | 区 1 | 08H~0FH | | 1 | 0 | 区 2 | 10H~17H | | 1 | 1 | 区 3 | 18H~1FH |
TCON — 定时器控制(88H)
| 位 | 名称 | 功能 | |:--:|:----:|------| | D7 | TF1 | 定时器 1 溢出标志 | | D6 | TR1 | 定时器 1 运行控制(1=启动) | | D5 | TF0 | 定时器 0 溢出标志 | | D4 | TR0 | 定时器 0 运行控制(1=启动) | | D3 | IE1 | 外部中断 1 请求标志 | | D2 | IT1 | 外部中断 1 触发方式(1=下降沿,0=低电平) | | D1 | IE0 | 外部中断 0 请求标志 | | D0 | IT0 | 外部中断 0 触发方式(1=下降沿,0=低电平) |TMOD — 定时器模式(89H)
M1/M0 模式选择: | M1 | M0 | 模式 | 说明 | |:--:|:--:|:----:|------| | 0 | 0 | 0 | 13 位定时器/计数器(TLx 低 5 位 + THx 8 位) | | 0 | 1 | 1 | 16 位定时器/计数器(常用) | | 1 | 0 | 2 | 8 位自动重载(TLx 计数,THx 存重载值) | | 1 | 1 | 3 | 定时器 0:拆为两个 8 位定时器;定时器 1:停止 |C/T:1=计数器模式(外部脉冲),0=定时器模式(内部时钟)
IE — 中断使能(A8H)
- EA:总中断使能(1=开,0=关所有中断) - ET2:定时器 2 中断使能 - ES:串行口中断使能 - ET1/ET0:定时器 1/0 中断使能 - EX1/EX0:外部中断 1/0 使能IP — 中断优先级(B8H)
每个位对应一个中断源的优先级。1=高优先级,0=低优先级。 STC89C52 支持 4 级优先级(通过 AUXR 扩展)。SCON — 串行口控制(98H)
- SM0/SM1:工作模式选择 - REN:允许接收(1=使能) - TI:发送中断标志 - RI:接收中断标志PCON — 电源控制(87H)
- SMOD:串口波特率加倍 - PD:Power Down 模式(1=进入掉电模式) - IDL:空闲模式(1=进入空闲模式)AUXR — 辅助寄存器(8EH)
- T0x12/T1x12:定时器速度控制(1=1T 模式,0=12T 模式)常用 SFR 操作速查
// 点亮 LED(P1.0 输出低电平)
P1 = 0xFE; // 或 P1_0 = 0;
// 配置定时器 0 为 16 位模式,1ms 定时(12MHz,12T)
TMOD = 0x01; // 定时器 0,模式 1(16 位)
TH0 = 0xFC; // 高 8 位初值
TL0 = 0x18; // 低 8 位初值
TR0 = 1; // 启动定时器
// 使能外部中断 0(下降沿触发)
IT0 = 1; // 下降沿触发
EX0 = 1; // 使能外部中断 0
EA = 1; // 开总中断
// 串口初始化(9600bps,11.0592MHz)
SCON = 0x50; // 模式 1(8 位 UART),允许接收
TMOD = 0x20; // 定时器 1 模式 2(8 位自动重载)
TH1 = 0xFD; // 波特率初值
TR1 = 1; // 启动定时器 1