MCS-51系列单片机共有21个特殊功能寄存器(SFR—Special Function Register),这些特殊功能寄存器实质上是一些具有特殊功能的RAM单元,单元地址为80H~FFH,用于存放相应功能部件的控制命令、状态或数据。CPU对各个功能部件的控制就是采用特殊功能寄存器的集中控制方式来完成的,因此对于单片机应用者来说掌握了特殊功能寄存器,也就基本掌握了MCS-51单片机。
各特殊功能寄存器的名称及地址见表2-4。
表2-4 特殊功能寄存器(除PC外)
续表
注 带“·”号的寄存器可按字节和按位寻址。
带“+”的寄存器是与定时器/计数器2有关的寄存器,仅在52系列中存在。
在21个特殊功能寄存器中有11个寄存器具有位寻址功能,它们的字节地址正好能被8整除,其地址分布见表2-5,其中带括号者不可位寻址。
表2-5 特殊寄存器地址表
续表
下面介绍程序计数器和部分特殊功能寄存器,其余特殊功能寄存器将在有关章节叙述。
1.程序计数器PC
程序计数器PC用于存放下一条要执行的指令地址(程序存储器地址),是一个16位专用寄存器,寻址范围为64KB。PC在物理结构上是独立的,不属于SFR,但与SFR有密切联系,故放在这里介绍。
2.程序状态字寄存器PSW(D0H)
程序状态字是一个8位寄存器,它包括了程序状态信息,PSW用于指示指令执行状态,供程序查询和判别之用。格式见表2-6。
表2-6 程序状态字寄存器PSW
(1)Cy进位标志(PSW.7)
在进行加法(或减法)运算时,如果操作结果最高位(位7)有进位(或借位),Cy置“1”,否则清“0”。在布尔处理机中,它作为位累加器C。
(2)AC半进位标志(PSW.6)
当进行加法或减法操作而产生由低4位数(十进制的一个数)向高4位数进位或借位时,AC将被硬件置“1”,否则就被清“0”。AC被用作BCD码调整,详见8051指令系统中的“DA A”指令。
(3)F0标志位(PSW.5)
该位是用户定义的一个状态标记,可以用软件来使它置位或清零,也可以靠软件测试F0来控制程序的流向。
(4)RS1、RS0工作寄存器组指针(PSW.4、PSW.3)
该指针指出当前工作的寄存器组。由用户利用软件改变RS1和RS0的组合,以切换当前选用的工作寄存器组,其组合关系见表2-7。
表2-7 工作寄存器组指针功能表
单片机在复位后(RS1)=(RS0)=0,CPU自动选中第0组为当前工作寄存器组,根据需要,用户可利用传送指令或位操作指令来改变其状态,这样设置对程序中的现场保护提供了方便。
(5)OV(PSW.2)溢出标志
该标志用于补码运算时,由硬件置“1”或清“0”,以指示溢出状态。(www.daowen.com)
当执行加法指令ADD时,若以Ci表示位i向位i+1有进位,则
OV=C7⊕C6
即当位6向位7有进位而位7不向Cy进位时,或位6不向位7进位而位7向Cy进位时,溢出标志OV位置位,否则清零。
当执行减法指令SUBB时,若以Ci表示位i向位i+1有借位,则执行减法指令SUBB时,则
OV=C7⊕C6
因此,溢出标志在硬件上可以靠一个异或门获得。
溢出标志常用于ADD和SUBB指令对带符号数作加减运算。OV=1表示加减运算的结果超出了目的寄存器A所能表示的带符号数(补码)的范围(-128~+127)。
在MCS-51中,无符号数乘法指令MUL的执行结果也会影响溢出标志位。当置于累加器A和寄存器B的两个乘数的积超过255时OV=1,积的高8位放在B内,低8位放在A内。当置于累加器A和寄存器B的两个乘数的积小于255时OV=0。因此,OV=0意味着只要从A中取得乘积即可,否则要从BA寄存器对中取得乘积。
除法指令DIV也会影响溢出标志。当除数为0时OV=1,否则OV=0。
(6)P奇偶标志位(PSW.0)
每个指令周期都由硬件来置位或清零,以表示累加器A中值为1的位数的奇偶数。若值位1的位数为奇数,则P=1,否则P=0。
此标志位对串行通信中的数据传输有重要的意义。在串行通信中常用奇偶校验的办法来检验传输的可靠性。在发送端可以根据P的值对数据的奇偶校验位置位或清零。若通信协议信号规定采用奇校验的办法,则P=0时,应对数据(假定由A取得)的奇偶位置位,否则就清零。
3.堆栈指针SP(81 H)
堆栈指针SP是一个8位专用寄存器。它指示出堆栈顶部在内部RAM块中的位置。系统复位后,SP初始化为07H,使得堆栈事实上由08 H单元开始。考虑到08 H~1F单元属于工作寄存器区1~3,若程序中要用到这些区,则最好把SP值改为1FH或更大值。
由于栈指针是一个8位专用寄存器,其值可由软件改变,因此堆栈在内部RAM中的位置比较灵活。响应中断或子程序调用时,发生入栈操作,入栈的是16位PC值,PSW并不自动入栈。在MCS-51指令系统中有栈操作指令PUSH(压入)和POP(弹出),如有必要,中断是可用PUSH指令把PSW的内容压入堆栈,加以保护,返回前调用POP指令恢复。
除用软件直接改变SP值外,在执行PUSH、POP、各种程序调用、中断响应、子程序返回RET和中断返回RETI指令时,SP值将自动增量或减量。
4.数据指针DPTR(83H、82H)
数据指针DPTR是一个16位专用寄存器,即可以作为一个16位寄存器DPTR来处理,也可以作为两个独立的8位寄存器使用,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。
DPTR主要用来保存16位地址,当对64K外部数据的存储空间寻址时,可作为间址寄存器用。这时有两条传送指令MOVX A,@DPTR和MOVX@DPTR,A。在访问程序存储器时,DPTR可以作基址寄存器,这时有一条采用基址加变址寻址方式的指令MOVC A,@A+DPTR,常用于读取存放在程序存储器中的表格常数。
5.串行数据缓冲器SBUF(99H)
串行数据缓冲器SBUF用于存放欲发送或者已接收的数据。它实际上由两个独立的寄存器组成,一个是发送缓冲器,另一个是接收缓冲器。当要发送的数据传送到SBUF时,进的是发送缓冲器。当要从SBUF读取数据时,则取自接收缓冲器,取走的是刚收到的数据。
从上面存储器地址分配中可以看出MCS-51的存储器地址有复用的特点,即一个地址对应着两个存储单元,具有该特点的有:
1)程序存储器ROM和外部数据存储器RAM的地址复用。它们的地址范围都是0000H~0FFFFH,但由于寻址方式和选通方式不同,不会引起混乱,其中ROM有程序计数器PC和数据指针DPTR寻址,使用MOVC类指令进行取指操作,并由管脚PSEN选通;而外部数据存储器RAM则由数据指针DPTR或@Ri寻址,用MOVX类指令,并由管脚RD/WR控制RAM的读出/写入。
2)内部RAM位地址区和内部RAM的字节地址复用。MCS-51系列单片机的内部RAM字节地址为00 H~7FH,而其中的字节地址20 H~2FH的128位,每位都具有位地址,其范围也是00H~7FH,每位都可直接寻址。但由于字节寻址指令与位寻址指令不同,不会引起混乱。
3)内部程序存储器和外部程序存储器地址复用。MCS-51系列单片机(8031除外)内部4KB程序存储器的地址与外部低4KB程序存储器的地址复用,但由于内外程序存储器选择控制端EA的作用,不会发生混乱。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。