单片机原理及应用系统设计
上QQ阅读APP看书,第一时间看更新

2.5.3 特殊功能寄存器

特殊功能寄存器(Special Function Register,SFR)实质是各外围部件的控制寄存器及状态寄存器,综合反映单片机内部实际的工作状态及工作方式,用户通过对SFR的设置和控制,来实现对单片机各种功能的运用。与普通的8051单片机相比,增强型STC89系列单片机的SFR增加了20多个。

STC89系列的SFR见表2-4,其中符号斜体字表示的为STC89系列新增加的SFR,有部分原有寄存器中的位也进行了新的定义。应该注意,SFR中能被8整除的这部分寄存器是可以进行位寻址的。由表2-4可见,SFR的不同位都有各自的定义,实现不同的功能。下面先介绍某些SFR,其余的SFR与片内外围部件密切相关,将在介绍片内外围部件时进行介绍。

表2-4 特殊功能寄存器

(续)

1.堆栈指针SP

堆栈指针是指示堆栈顶部在内部RAM块中的地址的特殊功能寄存器。

51单片机堆栈结构是向上生长型,即数据压入堆栈会使SP增大。单片机复位后,SP为07H,使得堆栈实际上从08H单元开始,由于08H~1FH单元分别属于1~3组的工作寄存器区,最好在复位后把SP值改为60H或更大值,避免堆栈与工作寄存器冲突。

堆栈主要是为子程序调用和中断操作而设,用于保护断点和现场。

1)保护断点。无论子程序调用还是中断服务子程序调用,最终都要返回主程序,这个返回地址叫断点。应预先把主程序的断点在堆栈中保护起来,为程序正确返回做准备。

2)保护现场。执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。此时,要把有关寄存器单元的内容送入堆栈保存起来,即“保护现场”。

堆栈有两种操作:数据压入(PUSH)堆栈和数据弹出(POP)堆栈。数据压入堆栈,SP自动加1;数据弹出堆栈,SP自动减1。

2.寄存器B

寄存器B为执行乘法和除法而设。在不执行乘、除法操作的情况下,可把它当作一个普通寄存器来使用。

乘法:两乘数分别在A、B中,执行乘法指令后,乘积在BA中。

除法:被除数取自A,除数取自B,商存放在A中,余数存于B中。

3.辅助寄存器AUXR

由表2-4可见,辅助寄存器AUXR定义了两位有效位。

1)ALEOFF:ALE的禁止/允许位。

0:ALE有效,发出脉冲。

1:ALE仅在执行MOVC和MOVX类指令时有效,不访问外部存储器时,ALE不输出脉冲信号。

2)EXTRAM:禁止/允许扩展RAM。

0:内部扩展RAM可以访问。(注意:内部扩展RAM是通过MOVX指令访问的。)

1:禁止访问内部扩展RAM。

4.数据指针DPTR0和DPTR1

双数据指针寄存器便于访问数据存储器。DPTR0:普通型8051单片机原有的数据指针;DPTR1:新增加的数据指针。这两个数据指针共用一个地址,可通过AUXR1.0的DSP位来选择。

数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DP0H(或DP1H)和DP0L(或DP1L)来用。

5.AUXR1寄存器

AUXR1是辅助寄存器。DPS为数据指针寄存器选择位。

0:选择数据指针寄存器DPTR0,复位时默认选用DPTR0。

1:选择数据指针寄存器DPTR1。

6.看门狗定时器WDT

包含1个14位计数器和看门狗定时器控制寄存器(WDT_CONTR)。当CPU由于干扰,程序陷入“死循环”或“跑飞”状态时,WDT提供了一种使程序恢复正常运行的有效手段。WDT_CONTR将在后面介绍。