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将在后面介绍。