寄存器(Register)


寄存器(Register),是单片机内部“划给”CPU 使用的,一段具有特殊作用的内存(RAM: Random Access Memory)区域,位于内存起始位置,地址从 00H 开始到 FFH 结束。各寄存器在这段区域内是不连续分布的,所以会留下一些“空位”。

寄存器包括:工作寄存器(通用寄存器)和特殊功能寄存器(SFR: Special Function Register)。

以 AT89S52 为例,该单片机为 8 位机,内部包含有 8KB(8 * 1024Bytes) 可编程 Flash 和 256Bytes(256 * 8bit) 大小的 RAM ,包含有四组(每组 8 个,共 32 个)工作寄存器(字节地址:00H~1FH)和 27 个 特殊功能寄存器(字节地址:80H~FFH),每个寄存器占用一个 8 位存储单元(8bit ),工作寄存器可采用直接寻址或间接寻址访问,特殊功能寄存器的“位置”是固定不变的,只能通过间接寻址方式访问。

片内数据存储器配置
字节地址 区块
80H~FFH 特殊功能寄存器区
30H~7FH 用户 RAM 区
20H~2FH 位寻址区(位地址:00H~7FH
00H~1FH 通用工作寄存器区

字节地址:内存中从起始位置开始,以字节为单位划分的连续内存区块的地址,范围从 00H~FFH;

   位地址:内存中某个二进制位 bit 的地址。在单片机中的位寻址区,表示的是字节地址从 20H 到 2FH 范围内,所有内存最小存储单元(位 bit)的地址,范围从 00H~7FH。

 

特殊功能寄存器
ACC 累加器 A TMOD 定时/计数器方式 T2MOD T2 方式
B B 存储器 TCON 定时/计数器控制 T2CON T2 控制
PSW 程序状态字 TH0 T0 高字节 RCAP2H T2 捕获寄存器高字节
SP 堆栈指针 TL0 T0 低字节 RCAP2L T2 捕获寄存器低字节
DPTR0 数据指针 0 TH1 T1 高字节 SCON 串行控制
DPTR1 数据指针 1 TL1 T1 低字节 SBUF 串行数据缓冲器
P0~P3 I/O 端口 TH2 T2 高字节 PCON 电源控制
IP 中断优先 TL2 T2 低字节 WDTRST 看门狗复位寄存器
IE 中断允许 AUXR 辅助寄存器 AUXR1 辅助寄存器 1

 

特殊功能寄存器并未占满 80H~FFH 整个地址空间,对空闲地址的操作是无意义的。

通过程序状态字(PSW)来选取当前工作寄存器组,其余不使用的组则被用作一般数据存储,复位后默认选中第 0 组。

 

PSW D7H D6H D5H D4H D3H D2H D1H D0H  
CY AC F0 RS1 RS0 OV F1 P  

 

 RS1 RS0 寄存器组 RAW 地址(R0~R7)  
0  0 0 00H~07H  
0  1 1 08H~0FH  
1  0 2 10F~17F  
1  1 3 18H~1FH  

 

在程序中通过关键字 using 来选择工作寄存器,如:interrupt 0 using 1,表示外部中断 INT0 触发时,需要执行的中断程序且相关操作在第 1 组工作寄存器进行。

 

void func() interrupt 0 using 1
{
    ……
}

 

以下内容只是为了便于我个人的理解,而把寄存器给拟物化了,和实际情形有很大差别,描述也不太准确。
一、寄存器可以看作是单片机的配置文件,机器按照配置来工作;
二、由于每个寄存器占用一个 8 位内存单元,所以可以把单个寄存器看作是一个 8P 的拨码开关,某一位置上的开关导通时表示 1,断开时表示 0;如全部导通可表示 11111111B,而全部断开则可表示 00000000B;有总开关也有分开关,各开关可以分开单独使用,也可以和其它开关组合使用。

 


知识共享许可协议
《寄存器(Register)》CRAFTOUR.COM 采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。