续上一篇,介绍剩余的51单片机硬件部分。
分为片内和片外两部分
共128个单元,字节地址为00H~7FH,如图:
?注:
(1)0~3位寄存器区,任何时候都可以通过PSW寄存器的RS1、RS0这两位,选择其中额的一组作为当前工作的寄存器区。
(2)可位寻址区不仅可以进行字节寻址,还可以进行位寻址,对每一位进行编写。
(3)用户RAM区,用户进行程序的编写。
(4)从80H~FFH是特殊功能寄存器的地址。
(5)由于单片机本身硬件资源少,在编程时要充分利用好这些资源。
当片内RAM不够用时,需外扩,最多可外扩64KB的RAM。
注:片内RAM与片外RAM两个空间是相互独立的,片内RAM与片外RAM的低128B的地址是相同的,但由于使用的是不同的访问指令,所以不会发生冲突。
在片内RAM的 80H~FFH 区域中,共26个,占用片内的后128个单元地址。如图
注:
(1)与AT89C51相比,新增5个SFR:DP1L、DP1H、AUXR、AUXR1和WDTRST
(2)凡是可位寻址的SFR,字节地址未位只能是0H或8H。若读/写未定义单元,将得到一个随机数。有相应的指令进行访问。有些可进行位寻址,只有末位为8和0的才能进行位寻址。
注:图中标注阴影的是比89C51多出来的。?
指示栈顶在内部RAM中,堆栈向上生长。
注:单片机复位后,SP为07H,堆栈从08H单元开始,由于08H~1FH单元分别是属于1~3组的工作寄存器区,最好在复位后把SP值改置为60H或更大的值,避免堆栈与工作寄存器冲突。
作用:
堆栈主要为子程序调用和中断操作而设,保护断点和现场。
(1)保护断点。
无论子程序调用还是中断服务子程序调用最终都要返回主程序。应预先把主程序断点在堆栈中保护起来,为程序正确返回做准备。
(2)现场保护。
执行子程序或中断服务子程序时,要用到一些寄存器单元,会破坏原有内容。要把有关寄存器单元的内容保存起来,送入堆栈,这就是所谓的“现场保护”两种操作:数据压入(PUSH)堆栈,数据弹出(POP)堆栈。
两种操作:数据压入(PUSH)堆栈,致据弹出(POP)堆栈。
注:当要往堆栈里压一个数据时,堆栈指针先增1,然后数据放进去,当弹出数据时,数据先弹出来,堆栈指针减1。
为执行乘和除而设。。
乘法,两乘数分别在A、B中,执行乘法指令后,乘积在BA中
除法,被除数取自A,除数取自B,商存放在A中,余数存B中,
注:
(1)高8位存到B里面,低8位存到A里面。
(2)不执行乘、除的情况下,可把它当作一个普通寄存器来使用。
AUXR是辅助寄存器,其格式如图
注:8EH是寄存器地址
其中:
?注:
(1)DISALE是低8位地址的地址锁存信号
(2)DISRTO 写0,输出看门狗复位信号使单片机复位,写1不让其输出
(3)空闲模式是节电模式下的一种模式,为了省电很多都不运行,WDIDLE就是看让不让他运行
双数据指针寄存器,便于访问数据存储器
DPTRO:AT89C51单片机原有的数据指针
DPTR1:新增加的数据指针。
AUXR1的DPS位用于选择两个数据指针。
当DPS=0时,选用DPTRO,当DPS=1时,选用DPTR1。
数据指针可作为一个16位寄存器来用,也可作为两个独立的8位寄存器DPOH(或DP1H)和DPOL(或DP1L)来用,是用来访问外部RAM的指针寄存器。
为辅助寄存器,格式如图
DPS:数据指针寄存器选择位。
????????0:选择数据指针寄存器DPTRO:
????????1:选择数据指针寄存器DPTR1.
?注:字节地址:A2H
WDT包含一个14位计数器和看门狗定时器复位寄存器(WDTRST)
当CPU由于干扰,程序陷入死循环或跑飞状态时,WDT提供了一种使程序恢复正常运行的有效手段。
注:除SP和B以外,其余的均为S51在C51基础上新增加的SFR。