51有21个SFR(Special Function Register),分布在内部80H~FFH单元中。这128个单元中,特殊功能寄存器仅占用了21个单元,其余单元51单片机不能对它们进行读/写操作(即不能作内部数据存储器使用)。单元地址可被8整除的SFR可位寻址。如图
1)累加器A或特殊功能寄存器ACC
累加器为8位寄存器,用于存放操作数,也可用来存放运算的中间结果。A和ACC虽是同一个寄存器,但是在指令中它们却是有区别的。符号指令中的A不能用ACC代替,特殊功能寄存器直接寻址和位名称寻址要用ACC,而不能用A代替。累加器自身带有零标志Z,累加器的值为0,零标志Z=1;累加器的值不为0,零标志Z=0
2)数据指示器(Data Pointer)
51中唯一能出现在符号指令中的一个16位寄存器。DPTR既可按16位寄存器使用,又可以分为两个8位的寄存器使用,即DPH和DPL。DPTR通常用作访问外部数据存储器或扩展I/O的间接地址存储器,还可以和累加器A一起用作程序存储器的变址寄存器。
3)程序状态字存储器PSW
PSW是一个8位的寄存器,用于存放程序运行的状态信息。有些位的状态是根据程序操作的结果,由硬件自动设置;有些则由指令设置。PSW的位状态可以用专门的指令进行测试,也可以用指令读出。一些条件转移指令就是根据PSW有关位进行程序转移的。PSW各位定义如图
进位或借位标志CY(PSW.7):功能有二:一是存放加减运算的进(借)位;二是在位操作指令中作累加位C使用
辅助进位标志AC(PSW.6):加减运算中的低4位向高4位有进位或借位则AC=1,无进位或借位则AC=0
溢出标志位OV(PSW.2):计算机所进行的运算都是无符号数运算,即把符号数的符号位也当作数值进行运算,又把所有数的运算结果当符号数来影响溢出标志位。OV=1表示溢出。
奇偶标志位P(PSW.0):表示累加器中数的奇偶性。P根据累加器中1的个数是奇数或是偶数,自动置1或清0。
寄存器组选择位RS1和RS0(PSW.4和PSW.3):见图
通用标志位F0和F1(PSW.5和PSW.1):可位寻址用于软件控制的通用标志位。有的汇编器只定义了F0,用户可使用位定义伪指令BIT将PSW.1定义为标志位F1。
4)堆栈和堆栈指示器SP
51单片机的栈的伸展方向是从低地址向高地址,堆栈操作是字节操作。