2.3.2 80C51单片机的数据存储器配置
80C51单片机的数据存储器分为片外RAM和片内RAM两大部分,如图2-14所示。
图2-14 80C51单片机RAM配置
80C51单片机的片内RAM共有128字节,分成工作寄存器区、位寻址区、通用RAM区三部分。基本型单片机片内RAM地址范围是00H~7FH。增强型单片机(如80C52)片内除地址范围在00 H~7FH的128字节RAM外,又增加了80 H~FFH的高128字节的RAM。增加的这一部分RAM只能采用间接寻址方式访问(以与特殊功能寄存器的访问相区别)。
片外RAM地址空间为64 KB,地址范围是0000 H~FFFFH。与程序存储器地址空间不同的是,片外RAM地址空间与片内RAM地址空间在低端0000H~007FH的地址上是重叠的。这就需要采用不同的寻址方式加以区分。访问片外RAM时使用专门的指令MOVX,这时读()或写(
)信号有效,而访问片内RAM使用MOV指令,不产生读写信号。另外,与片内RAM不同,片外RAM不能进行堆栈操作。
在80C51单片机中,尽管片内RAM的容量不大,但它的功能多,使用灵活。
1.工作寄存器区
80C51单片机片内RAM的低端地址为00 H~1FH,共32个字节单元,将其分成4个工作寄存器组,每组占8个单元。
寄存器0组:地址为00 H~07 H。
寄存器1组:地址为08 H~0FH。
寄存器2组:地址为10 H~17 H。
寄存器3组:地址为18 H~1FH。
每个工作寄存器组都有8个寄存器,分别称为R0,R1,…,R7。程序运行时,只能有一个工作寄存器组作为当前工作寄存器组。片内RAM详图如图2-15所示。当前工作寄存器组的选择由特殊功能寄存器中的程序状态字寄存器的RS1、RS0来决定,通过对这两位进行编程设置,选择不同的工作寄存器组。
图2-15 片内RAM详图
80C51单片机的工作寄存器组与RS1、RS0的关系及其地址如表2-3所示。4组工作寄存器的组号0、1、2、3分别对应RS1、RS0的值为00、01、10、11。4组工作寄存器的地址分别为片内RAM的00 H~07 H、08 H~0FH、10 H~17 H、18 H~1FH。
表2-3 80C51单片机工作寄存器组与RS1、RS0的关系及其地址
当前工作寄存器组从某一组工作寄存器换至另一组工作寄存器时,原来工作寄存器组的各寄存器的内容将被屏蔽保护起来。利用这一特性可以方便地完成快速现场数据保护任务。
2.位寻址区
内部RAM中地址为20H~2FH的共16字节单元是位寻址区。位寻址区的128个位的地址范围是00H~7FH。
对被寻址的位可进行位操作。通常将程序状态标志和位控制变量设在位寻址区内。该区未用的单元可以作为通用RAM使用。80C51单片机的位地址与字节地址的关系如表2-4所示。
表2-4 80C51单片机位地址与字节地址的关系
3.通用RAM区
位寻址区之后的地址为30 H~7FH,共80字节单元,这为通用RAM区。这些单元可以作为数据缓冲器使用。这一区域的操作指令非常丰富,数据处理方便灵活。
在实际应用中,经常需要在RAM区设置堆栈。80C51单片机的堆栈一般设在30H~7FH的范围内。栈顶的位置由SP寄存器指示。复位时SP的初值为07 H,在系统初始化时可以重新设置。