单片机开发从入门到精通(第2版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2.4 专用寄存器

单片机内部与程序运行有关的特殊功能寄存器称为单片机的专用寄存器,这些寄存器在单片机程序运行过程中起重要作用,用户可以通过软件查询的方法去观察寄存器的结果,有的寄存器也可通过软件改变其状态。

(1)累加器(ACC/A)

累加器(A)为8位寄存器,是最常用的专用寄存器,功能较多,使用最为频繁。它既可用于存放操作数,也可用来存放运算的中间结果。51系列单片机中大部分单操作数指令的操作数就取自累加器,许多双操作数指令中的一个操作数也取自累加器。累加器有自己的地址,因而可以进行地址操作。

在C语言编程中,如果想让累加器中的内容为十进制56,简单的语句为

A=56;

在汇编语言中则要用到数据传输指令,命令格式为

MOV A,#56;

(2)B寄存器

B寄存器是一个8位寄存器,主要用于乘除运算。乘法运算时,B提供乘数。乘法操作后,乘积的高8位存于B中。除法运算时,B提供除数。除法操作后,余数存于B中。此外,B寄存器也可作为一般数据寄存器使用。如在C语言中“B=56;”或“abc=B;”,abc为用户自定义变量。

(3)程序状态字(PSW)

程序状态字是一个8位寄存器,用于存放程序运行中的各种状态信息。其中有些位的状态是由程序执行结果决定,硬件自动设置的,而有些位的状态则使用软件方法设定。PSW的位状态可以用专门指令进行测试,也可以用程序读出。一些条件转移指令可以根据PSW特定位的状态进行程序转移。PSW各位标示符定义格式为

PSW.7为进/借位标志位(Carry, CY):表示运算是否有进位或借位。其功能有二:一是存放算术运算的进/借位标志,在进行加或减运算时,如果操作结果的最高位有进位或借位时,CY由硬件置“1”,否则清“0”;二是在位操作指令中,作位累加器使用。

PSW.6为辅助进/借位标志位(Auxiliary Carry, AC),也叫半/借进位标志位。在进行加减运算中,当低4位向高4位进位或借位时,AC由硬件置“1”,否则AC位被清“0”。在BCD码的加法调整中也要用到AC位。

PSW.5为用户标志位F0(Flag 0),是一个供用户定义的标志位,可以利用软件方法置位或复位。

PSW.4/PSW.3为寄存器组选择位RS1/RS0(Register Selection),用于选择CPU当前使用的工作寄存器组,其对应关系见表1-3。

表1-3 寄存器组的映射表对应关系

这两个选择位的状态是由程序设置的,被选中的寄存器组即为当前寄存器组。单片机上电或复位后,RS1/RS0=00,即默认的工作寄存器组是第0组。

PSW.2为溢出标志位OV(Overflow)。在带符号数的加减运算中,OV=1表示加减运算超出了累加器A所能表示的符号数有效范围(-128~+127),即产生了溢出,表示A中的数据只是运算结果的一部分;OV=0表示运算正确,即无溢出产生,表示A中的数据就是全部运算结果。在乘法运算中,OV=1表示乘积超过255,即乘积分别在B与A中;否则,OV=0,表示乘积只在A中。在除法运算中,OV=1表示除数为0,除法不能进行;否则,OV=0,除数不为0,除法可正常进行。

PSW.1为用户标志位F1(Flag 1),也是一个供用户定义的标志位,与F0类似。

PSW.0为奇偶标志位P(Parity),表示累加器A中“1”的个数奇偶性。如果A中有奇数个“1”,则P置“1”,否则置“0”,即完全由累加器的运算结果中“1”的个数为奇数还是偶数决定。注意标志位P并非用于表示累加器A中数的奇偶性。凡是改变累加器A中内容的指令均会影响标志位P。标志位P对串行通信中的数据传输有重要的意义。在串行通信中常采用奇偶校验的办法来校验数据传输的可靠性。

(4)数据指针(DPTR)

DPTR为16位寄存器。编程时,DPTR既可以按16位寄存器使用,也可以按两个8位寄存器分开使用,即DPTR的高位字节DPH和DPTR的低位字节DPL。

在系统扩展中,DPTR作为程序存储器和片外数据存储器的地址指针,用来指示要访问的ROM和片外RAM的单元地址。由于DPTR是16位寄存器,因此,通过DPTR可寻址64KB的地址空间。

(5)堆栈指针(SP)

堆栈是一个特殊的存储区,用来暂存系统的数据或地址,它是按“先进后出”或“后进先出”的原则来存取数据的,系统对堆栈的管理是通过8位的SP寄存器来实现的,SP总是指向最新的栈顶位置。堆栈的操作分为进栈和出栈两种。

由于MCS-51系列单片机的堆栈设在片内RAM中,SP是一个8位寄存器。系统复位后,SP的初值为07H,但堆栈实际上是从08H单元开始的。由于08H~1FH单元分别属于工作寄存器1~3区,20H~2FH是位寻址区,如果程序要用到这些单元,最好把SP值改为2FH或更大的值。一般在片内RAM的30H~7FH单元中设置堆栈。SP的内容一经确定,堆栈的位置也就跟着确定下来。由于SP可初始化为不同值,因此堆栈的具体位置是浮动的。

(6)P0~P3寄存器

P0~P3是和输出/输入有关的4个特殊寄存器,实际上是4个锁存器。每个锁存器加上相应的驱动器和输入缓冲器就构成一个并行口,为单片机外部提供32根I/O引脚,命名为P0~P3口。

前面提到的程序计数器(PC)是一个16位的加1计数器,其作用是控制程序的执行顺序,而其内容为将要执行指令的ROM地址,寻址范围是64KB。它并不在片内RAM的高128B内。