MCS-51单片机内的锁存器、定时器、串行口数据缓冲器以及各种控制寄存器和状态寄存器都是以专用功能寄存器(或称特殊功能寄存器)的形式出现的,它们分散地分布在内部RAM地址空间范围(80H~FFH)内,表 2-5列出了这些专用功能寄存器(SFR)的助记标识符、名称及地址。
其中,凡字节地址可以被8整除的专用功能寄存器都可以位寻址。其位地址见表2-6。
大部分寄存器的应用将在后面有关章节中评述,这里仅作简单介绍。
·累加器ACC
累加器是一个最常用的专用寄存器。大部分单操作数指令的操作取自累加器。很多双操作数指令的一个操作数取自累加器。加、减、乘、除算术运算指令的运算结果都存放在累加器A或AB寄存器对中。指令系统中用A作为累加器的助记符。
·B寄存器
在乘除指令中,用到了B寄存器。乘法指令的两个操作数分别取自A 和B 其结果存放在AB寄存器对中。除法指令中,被除数取自A,除数取自B,商数存放于A,余数存放于B。在其它指令中,B寄存器可作为RAM中的一个单元来使用。
·程序状态字PSW
程序状态字是一个8位寄存器,它包含了程序状态信息。此寄存器各位的含义参见图2-8。
其中PSW.1未用。其它各位说明如下:
·CY(PSW.7)进位标志
在执行某些算术和逻辑指令时,可以被硬件或软件置位或清零。在布尔处理机中它被认为是位累加器;其重要性相当于一般中央处理机中的累加器A 。
· AC(PSW.6)辅助进位标志
当进行加法或减法操作而产生由低4位数(十进制的一个数引向高4位数进位或借位时,AC将被硬件置位,否则就被清零。Ac被用于十进制调整。详见DAA指令。
·FO(PSW.5)标志O
是用户定义的一个状态标记,可以用软件来使它置位或清零,也可以用软件测试FO以控制程序的流向。
·RS1,RS0(PSW.4, PSW.3)寄存器区选择控制位 1和0
可以用软件来置位或清零以确定工作寄存器区。RS1,RS0与寄存器区的对应关系如下:
RS1 RS0
0 0 —— 区 0(00H~07H)
0 1 —— 区 1(08H~0FH)
1 0 —— 区 2(10H~17H)
1 1 —— 区 3(18H~1FH)
·OV(PSW.2) 溢出标志
当执行算术指令时,由硬件置位或清零,以指示溢出状态。当执行加法指令ADD时,若用 C6'表示 D6位向 D7位有进位,用C7'表示D7向进位位有进位,则有:
OV=C6 '⊕C7'
即当位6向位7有进位而位7不向Cy进位时,或位6不向位7进位而位7向CY有进位时;溢出标志OV置位,否则清零。
同样,在执行减法指令SUBB时C6和C7表示有借位。因此,溢出标志在硬件上可以用一个异或门获得。
溢出标志常用于用ADD和SUBB指令对带符号数作加减运算时,OV= 1表示加减运算的结果超出了目的寄存器A所能表示的带符号数(2的补码)的范围(-128~+127),参见第三章中关于 ADD和 SUBB指令的说明。
在MCS-51中,无符号数乘法指令MUL的执行结果也会影响溢出标志。若置于累加器A和寄存器B的两个数的乘积超过255时,OV=1, 否则OV=0。此积的高8位放在B 内,低 8位放在 A内。因此, OV= 0意味着只要从 A中取得乘积即可;否则要从 BA寄存器对中取得乘积。
除法指令DIV也会影响溢出标志。当除数为0时,OV= 1,否则OV=0。
·P(PSW.0)奇偶标志
每个指令周期都由硬件来置位或清0,以表示累加器A中1的位数的奇偶数。若1的位数为奇数,则P置位,否则清0。此标志位对串行通信中的数据传输有重要的意义。在串行通信中常用奇偶校验的办法来检验数据传输的可靠性。在发送端可根据P的值对数据的奇偶位置位或清零。若通信协议中规定采用奇校验的办法,则P=0时,应对数据(假定由A取得)的奇偶位置位;否则就清0。
·栈指针SP
栈指针SP是一个8位专用寄存器。它指示出堆栈顶部在内部RAM中的位置。系统复位后,SP初始化为07H,使得堆栈事实上由08H单元开始。考虑到08H~lFH单元分属于工作寄存器区 1~3,若程序设计中要用到这些区,则最好把SP值改置为 1FH或更大的值。SP的初始值越小,堆栈深度就可以越深。堆栈指针的值可由软件改变,因此堆伐在内部 RAM中的位置比较灵活。
除用软件直接改变SP值外,在执行PUSH,POP指令,各种子程序调用,中断响应,子程序返回(RET)和中断返回(RETI)等指令时,SP值将自动增量或减量。
·数据指针DPTR
数据指针DPTR是一个16位专用寄存器,其高位字节寄存器用DPH表示;低位字节寄存器用 DPL 表示。既可以作为一个 16位寄存器 DPTR来处理,也可以作为两个独立的8位寄存器DPH和DPL来处理。DPTR主要用来存放16位地址,当对 64KB外部数据存储器空间寻址时,可作为间址寄存器用。
传送指令有下列两条:
MOVX A,@DPTR
MOVX @DPTR,A
在访问程序存储器时,DPTR可用作基址寄存器,有一条采用基址个变址寻址方式的指令MOVX A,@A + DPTR,常用于读取存放在程序存储器内的表格常数。
·端口P0~P3
专用寄存器P0,P1,P2和P3分别是 I/O 端口P0~P3的锁存器。P0~P3作为专用寄存器还可用直接寻址方式参与其它操作指令。
·串行数据缓冲器SBUF
串行数据缓冲器 SBUF用于存放欲发送或已接收的数据,它实际上由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器。当要发送的数据传送到SBUF时,进的是发送缓冲器。当要从SBUF读数据时,则取自接收缓冲器,取走的是刚接收到的数据。
·定时器/计数器
MCS-51系列中有两个16位定时器/计数器T0和T1。它们各由两个独立的 8位寄存器组成,共有四个独立的寄存器:TH0,TL0,TH1 ,TL1。可以对这四个寄存器寻址,但不能把T0,T1 当作一个16位寄存器来寻址。
·其它控制寄存器
IP,IE,TMOD,TCON,SCON和PCON寄存器分别包含有中断 系统、定时器/计数器、串行口和供电方式的控制和状态位,这些寄存器将在本章有关节中叙述。