2.3 存储器结构

MCS-51的存储器有片内和片外之分。片内存储器集成在芯片内部;片外存储器又称外部存储器,是专门的存储器芯片,需要通过印制电路板上的三总线和MCS-51连接。片外存储器和片内存储器中,又有程序存储器和数据存储器之分。8051 存储器的空间配置如图2-4所示。

图2-4 8051存储器的空间分配图

从物理空间上看MCS-51单片机有4个存储器地址空间。片内程序存储器、片外程序存储器、片内数据存储器、片外数据存储器。从用户使用的角度,地址空间分为3类:

① 片内、片外统一编址0000H~FFFFH的64KB程序存储器地址空间。

② 64KB片外数据存储器地址空间,地址范围为0000H~FFFFH。

③ 256B片内数据存储器地址空间,地址范围为00H~FFH。

上述3个存储空间地址是重叠的,为了使用户能够正确使用这3个不同的物理空间,8051的指令系统设计了不同的数据传送指令符号。CPU访问片内、片外程序存储器时,指令助记符为MOVC;访问片外数据存储器时,指令助记符为MOV×;访问片内RAM时,指令助记符为MOV。

2.3.1 程序存储器

MCS-51系列单片机64KB程序存储器为统一编址。8031 内部没有片内ROM存储器,8051/8751有4KB片内ROM/EPROM存储器,地址范围为0000H~0FFFH。无论8031还是8051/8751,都可以外接外部ROM,但片内ROM和片外ROM之和不能超过64KB,片内有ROM时,=1程序从片内ROM开始执行,当PC值超过片内ROM容量时会自动转向外部存储器空间;当片内没有ROM时,=0程序从外部存储器开始执行。MCS-51系列单片机复位后PC=0000H,系统从0000H开始执行程序。51系列单片机复位后PC=0000H,系统从0000H开始执行程序。0000H是系统的启动地址,一般在该单元中存放一条绝对跳转指令,如LJMP ××××。0003H、000BH、000BH、001BH和0023H对应5 种中断源的中断服务入口地址,如图2-5所示。

图2-5 存储器地址分配空间

2.3.2 数据存储器

MCS-51系列单片机的数据存储器在物理和逻辑上都分为两个地址空间。片内RAM共256个字节,地址范围为00H~FFH;片外RAM共有64KB,地址范围为0000H~FFFFH。MCS-51系列单片机的RAM实际存储容量超过64KB,片内RAM与片外RAM的低地址空间(0000H~00FFH)是重叠的。为了指示机器到片内RAM寻址还是到片外RAM寻址,单片机设计者为用户提供了两类不同的传送指令:MOV指令用于片内00H~FFH范围内的寻址,MOV×指令用于片外0000H~FFFFH范围内的寻址。

片内RAM共有256个字节,它们又分为两个部分,低128字节(00H~7FH)是真正的RAM区,高128字节(80H~FFH)为特殊功能寄存器(SFR)区。对于片内有256字节的单片机,高128字节(80H~FFH)空间特殊功能寄存器和RAM地址是重叠的,通过不同的寻址方式进行访问。

1.片内低128字节RAM

片内低128字节RAM分为3个区:寄存器区、位寻址区和用户RAM区。

(1)寄存器区

寄存器区共有4组通用寄存器,地址范围为00H~1FH。每个区有8个工作寄存器,依次为R0~R7。

如表2-1所示。通过对PSW中RS1、RS0的设置,每组寄存器均可选做CPU的当前工作寄存器组。若程序中不需要4组,其余的可作为一般RAM使用。CPU复位后,由于RS1、RS0的值都为0,因此选中第0组寄存器为当前的工作寄存器R0~R7。

使用方法:一种是以寄存器的形式使用,用寄存器符号表示;另一种是以存储单元的形式使用,以单元地址表示。

说明:任一时刻,CPU使用其中的一组寄存器,并且把正在使用的那组寄存器称为当前寄存器。由程序状态字寄存器PSW中RS1、RS0位的状态组合来决定使用哪一组。

(2)位寻址区

地址范围:片内RAM的20H~2FH单元,共有16个RAM单元,总计16×8=128位,每个位单元都分配了一个特定地址,即00H~7FH,这些地址称为位地址。如图2-6 所示为8051片内RAM的地址分配图。位地址在位寻址指令中使用。例如,要把2FH单元中的最高位(位地址为7FH)置位成1,则可使用如下位操作指令:

            SETB 7FH;7FH←1

其中,SETB为位置位指令的操作码。

位地址的另一种表示方法是采用字节地址和位数相结合的表示法。例如,位地址00H可以表示成20H.0,位地址1AH可以表示成23H.2等。

(3)用户RAM区

片内RAM区的单元地址范围为30H~7FH,共80个单元,只能以存储单元的形式来使用,一般常把堆栈开辟在此区中。

2.片内高128字节RAM(专用寄存器SFR)

片内高128字节RAM又称为专用寄存器区,其单元地址为80H~FFH,用于存放相应功能部件的控制命令、状态或数据。因这些寄存器的功能已做了专门的规定,故而称为专用寄存器(SFR),有时也称为特殊功能寄存器,如表2-2所示。51系列单片机中特殊功能寄存器共有21个,其余的均为空单元,对其操作没有任何意义。

表2-2 特殊功能寄存器一览表

图2-6 8051内部RAM的地址分配图

注:*可以位寻址,“+”仅8052有。

在21个SFR寄存器中,用户可以通过直接寻址指令对它们进行字节存取,也可以对带有“*”的11个寄存器进行位寻址。在字节型寻址指令中,直接地址的表示方法有两种:一种是使用物理地址,如累加器A用E0H、B寄存器用F0H、SP用81H等表示;另一种是采用表2-2中的寄存器符号,如累加器A要用ACC、B寄存器用B、程序状态字寄存器用PSW等表示。这两种表示方法中,采用后一种方法比较普遍,因为它们比较容易为人们记忆。在SFR中,可以位寻址的寄存器有11个,这些寄存器的字节地址均能被8整除,共有位地址88个,其中5个未用,其余83个位地址离散分布于80H~FFH范围内。SFR中的位地址如表2-3所示。

表2-3 SFR中的位地址分布表

3.外部数据存储器

外部数据存储器一般由静态RAM构成,其容量大小由用户根据需要而定,最大可扩展到64KB,地址范围是0000H~0FFFFH。CPU通过MOV×指令访问外部数据存储器,用间接寻址方式,R0、R1和DPTR都可作为间接寄存器。注意,片外RAM和扩展的I/O接口是统一编址的,所有的外扩I/O口都要占用64KB中的地址单元。