跳转至

特殊功能寄存器(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 口)

地址:80H / 90H / A0H / B0H / E8H
功能:每个位控制对应 I/O 引脚的输出电平
位寻址:✅

PSW — 程序状态字(D0H)

  D7    D6    D5    D4    D3    D2    D1    D0
 CY    AC    F0    RS1   RS0   OV    —     P
| 位 | 名称 | 功能 | |:--:|:----:|------| | 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    D6    D5    D4    D3    D2    D1    D0
 TF1   TR1   TF0   TR0   IE1   IT1   IE0   IT0
| 位 | 名称 | 功能 | |:--:|:----:|------| | 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)

  D7    D6    D5    D4    D3    D2    D1    D0
 GATE  C/T   M1    M0   GATE  C/T   M1    M0
 ───── 定时器1 ─────   ───── 定时器0 ─────
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)

  D7    D6    D5    D4    D3    D2    D1    D0
 EA    —     ET2   ES    ET1   EX1   ET0   EX0
- EA:总中断使能(1=开,0=关所有中断) - ET2:定时器 2 中断使能 - ES:串行口中断使能 - ET1/ET0:定时器 1/0 中断使能 - EX1/EX0:外部中断 1/0 使能

IP — 中断优先级(B8H)

  D7    D6    D5    D4    D3    D2    D1    D0
  —     —     PT2   PS    PT1   PX1   PT0   PX0
每个位对应一个中断源的优先级。1=高优先级,0=低优先级。 STC89C52 支持 4 级优先级(通过 AUXR 扩展)。

SCON — 串行口控制(98H)

  D7    D6    D5    D4    D3    D2    D1    D0
 SM0   SM1   SM2   REN   TB8   RB8   TI    RI
- SM0/SM1:工作模式选择 - REN:允许接收(1=使能) - TI:发送中断标志 - RI:接收中断标志

PCON — 电源控制(87H)

  D7    D6    D5    D4    D3    D2    D1    D0
 SMOD  —     —     —     GF1   GF0   PD    IDL
- SMOD:串口波特率加倍 - PD:Power Down 模式(1=进入掉电模式) - IDL:空闲模式(1=进入空闲模式)

AUXR — 辅助寄存器(8EH)

  D7    D6    D5    D4    D3    D2    D1    D0
 T0x12 T1x12  —     —     —     —     —     —
- 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