前面已经讲过,片内RAM单元的地址是00H~7FH,只有128B,采用8位编址足够了。这128B的RAM资源很宝贵,因为它是利用内部寻址方式来实现的,CPU直接利用8位寻址就可以找到,8位的寻址当然要比16位的寻址快,在单片机指令中充分利用了这一资源。
这里要注意的是片内RAM的第二次地址分配,这是个要点问题。片内RAM分为三个区,如图2-11所示。
1.工作寄存器区
片内RAM工作寄存器区地址为00H~1FH,分四组,组号依次为0、1、2、3,每组有8个单元、各组都可以用R0~R7作为单元的编号。寄存器常用于存放操作数和中间结果。这四组不是同时有效,而是可以相互切换,即由PSW中的RS1、RS0的状态决定,任一时刻,只有一组工作寄存器处于工作状态,这个处于工作状态的寄存器组被称为当前寄存器组。这一部分内存单元在以后的寻址方式中有特殊的功能,即寄存器寻址,寄存器寻址是一种非常重要的寻址方式。为什么要把片内RAM的最低地址部分留给工作寄存器呢?因为容易被记住,为CPU提供了数据就近存取的便利,有利于提高单片机的处理速度,因此在MCS-51系列单片机指令中使用工作寄存器的特别多,且多为单字节指令,执行速度最快。另外,在系统中大量使用工作寄存器可以提高程序编制的灵活性,也有利于简化程序设计、提高程序的运行速度。
图2-11 单片机内部RAM分配
2.位寻址区
MCS-51系列单片机最大的特点就是能够进行位操作。一个8位的二进制数在位寻址中,它的每一位都是独立的数,即从bit0到bit7的每位都可以进行访问或操作,位寻址区分布见表2-5。每一位独立的好处是可以形成128个标志位,这样单片机的内存资源就变得丰富了,因为我们在工业控制中,通常要判断某个状态是有还是没有,是对还是错或决定开关是ON还是OFF。例如在顺序工业控制中,灯的亮和灭只要1位就行了,而不用一个字节(8位)来描述,所以这时位操作是很方便的。位寻址区从20H~2FH,该区域的16个单元的每一位都有一个位地址,依次编址为00H~7FH,就犹如有了128个开关。位寻址区的16个单元可以像普通RAM单元一样进行字节操作,也可以用位操作指令对单独的位进行操作。在位寻址时,注意不要与字节的寻址混淆了。(www.xing528.com)
在使用中,“位”有两种表示形式:一种是以“位地址”的形式,如“MOV 7FH,Cy”把进位标志位Cy中的内容传送到位地址7FH中;另一种是以“存储单元地址.位”的形式,如MOV 2FH.7,C;把进位标志位Cy中的内容传送到位地址7FH中。
表2-5 位寻址区分布
3.便笺区
便笺区是供存放用户数据或堆栈的用户区,分配在30H到7FH的80B的片内RAM区,用户对该区域的访问是按字节寻址的方式进行的。
理论上堆栈最多可以占用从30H~7FH的内存单元,但一般不能全占满,要将一部分内存留给用户。堆栈区的大小可以通过堆栈指针由用户自己来调整。如设定堆栈指针SP为50H时,从50H到7FH的RAM单元就用作堆栈区,而从30H到4FH的RAM单元就可以用作用户数据区,用来存放用户程序运行中的各种随机数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。