寄存器(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 国际 许可协议进行许可。