阅读前提醒: 文中提到的8051指的是8051微控制器,即51单片机
在上一篇文章51单片机的存储结构中,提到8051微控制器的RAM被划分为通用寄存器、按位寻址寄存器、寄存器组、以及特殊功能寄存器。
这里讲一下特殊功能寄存器(SFR)。
8051的特殊功能寄存器用于控制各种外围硬件设备,包括定时器、串行端口、I/O端口。也可以用于更改和获取微处理器的运行模式。
1 8051的特殊功能寄存器(SFR)
8051的特殊功能寄存器就像是一个控制台,通过它既可以监控8051微控制器的运行状态,课可以控制8051微处理器的功能。
如本文第一张图所示,在8051微控制器的内存结构中,从80H到FFH的128字节被分配给了SFR,但是只有21个位置是真正分配。每一个SFR都有一个一字节地址和一个独一无二的名字,这个名字同时也会指出该SFR的功能。
因为SFR是RAM的一部分,所以也可以像访问内部RAM一样访问SFR。两者仅仅是地址存在不同,00H到7FH是常规RAM,80H到FFH是SFR。
但是,由于128个SFR中仅有21个被分配,建议不要访问其他的SFR。
1.1 SFR的分类
这21个SFR分别是
- A or ACC
- B
- DPL
- DPH
- IE
- IP
- P0
- P1
- P2
- P3
- PCON
- PSW
- SCON
- SBUF
- SP
- TMOD
- TCON
- TL0
- TH0
- TL1
- TH1
1.2 SFR的分类
下图列出了所有SFR的名字、功能、地址。
- 数学运算寄存器: ACC和B
- 状态字寄存器: PSW(Program Status Word)
- 指针寄存器: 数据指针(DPL、DPH),和栈指针(SP)
- I/O端口锁存器:P0,P1,P2,P3
- 外设控制寄存器: PCON, SCON, TCON, TMOD, IE and IP
- 外设数据寄存器:TL0, TH0, TL1, TH1 and SBUF
1.2.1 数学运算寄存器
AAC (累加器)
这个应该不需要多介绍,CPU的几乎每次操作都需要用到累加器。
B(乘商寄存器)
B寄存器用于乘除等运算,配合ACC使用。
1.2.2 PSW(程序状态字)
顾名思义,适用于保存当前程序运行状态的。程序员可以通过浏览其中的信息。
下图列出了每个标志位所对应的信息
1.2.3 指针寄存器
数据指针(DPTR: DPL和DPH)
DPL和DPH共同组成了一个16位的寄存器。它的主要作用是存储外接存储器的地址。
栈指针
栈指针指向堆栈的顶部,可以使用PUSH,POP,CALL,SET等指令来对其进行操作。
初始状态下栈指针内容为07H。
向栈指针中写数据后栈指针所存储的地址+1,读数据后地址-1。
1.2.4 I/O 端口寄存器
8051有4个用作I/O的端口,这四个端口分别是P0,P1,P2,P3。每一个端口都对应一个名字相同的寄存器。四个寄存器的地址分别是P0 – 80H, P1 – 90H, P2 – A0H 以及P2 – B0H。
SFR的每一个比特位都对应着8051微控制器的一个引脚,每一个端口寄存器都可以按字节寻址或者按位寻址。如果在端口寄存器上的某一个比特位上写入1或0,那么对应的引脚上电压也会产生相应的变化(5V或者0V)。
1.2.5 外设控制寄存器
PCON 电源控制(power control)
顾名思义,电源控制寄存器用于控制8051的电源模式。使用PCON寄存器中的两个比特,可以将8051设置为空闲模式和掉电模式。
注意:PCON寄存器不支持按位寻址
SCON 串行控制
SCON用于控制8051的串行端口。使用SCON,可以控制串口的操作模式、串口的波特率以及使用串口发送或接收数据。
TCON 定时器控制
TCON寄存器用于启动或停止8051单片机的定时器。它还包含指示定时器是否溢出的位。TCON SFR还包括与中断相关的位。
TMOD 定时器模式
定时器模式SFR用于设置定时器T0和T1的操作模式。较低的四位用于配置定时器0,较高的四位用于配置定时器1。
1.2.5 外设数据寄存器
SBUF 串行数据缓冲区
用于串行通信时存储串行数据。
TL0/TH0
定时器0由两个SFR组成:TL0和TH0。TL0是低位字节,TH0是高位字节,它们共同构成一个16位定时器0寄存器。
TL1/TH1同理
- 参考文章:https://www.electronicshub.org/8051-microcontroller-special-function-registers/