2.1.5 AT89S51/AT89S52单片机的存储器结构

2.1.5 AT89S51/AT89S52单片机的存储器结构

一般微型计算机通常只有一个逻辑空间,在存储器的设计上,ROM、RAM要统一编址,即一个存储器地址对应唯一的存储单元。

AT89S52单片机的存储器的结构特点是将ROM和RAM分开,它们有各自寻址机构和寻址方式。ROM用来存放固化的程序、常数或数据表格,写入信息后不易改写。断电后,ROM中的信息不会丢失。RAM用来存放暂时性的数据、运算的中间结果,可以写入和读出信息,但关闭电源后,其所存储的信息将丢失。图2.3所示的为51单片机存储器的配置。

图2.3 存储器配置

单片机的存储器结构可划分为4个物理上相互独立的存储器空间:内/外部程序存储器和内/外部数据存储器。从逻辑上,即从用户使用角度来分,分为3个逻辑空间:片内外统一编址的64 KB程序存储器地址空间;256 B(MSC-51子系列)或384 B(MSC-52子系列)的内部数据存储器地址空间(其中有128 B地址空间中分布了20多个字节的专用特殊功能寄存器,即在80H~FFH的SFR寄存器地址空间中仅有20多个字节有实际意义);以及64 KB外部数据存储器地址空间。用户采用不同的指令形式和寻址方式,访问这3个不同的逻辑空间。

下面分别介绍程序存储器和数据存储器配置及特殊功能寄存器SFR的功能特点。

1.程序存储器

程序存储器是以程序计数器(PC)作为地址指针,程序计数器(PC)是16位的,因此寻址的地址空间为64KB。程序存储器用于存放应用程序和表格之类的固定常数。

1)内部数据存储器

单片机内部有4KB ROM/EPROM程序存储器,地址为0000~0FFFH(MSC-52子系列内部有8KB ROM/EPROM,地址为0000~1FFFH)。对于有内部ROM的单片机,应把控制线接成高电平。正常运行时,使程序从内部ROM开始运行,当PC值超过0FFFH时,自动转到外部扩展的存储区1000H~FFFFH(MSC-52子系列的则转到外部2000H~FFFFH)地址空间去执行程序。若把接成低电平,程序处于调试状态,把调试程序放置在与内部ROM空间重叠的外部存储器内。

2)外部数据存储器

单片机内部有128B的RAM作为数据存储器,当需要外扩时,最多可外扩64KB的RAM或I/O。程序存储器可采用立即寻址和基址+变址寻址方式。

64KB程序存储器中有7个地址具有特殊功能,单片机复位后,(PC)=0000H,故系统程序必须从0000H单元开始,因而0000H是复位入口地址,也称为系统程序的启动地址。一般在该单元中存放一条绝对跳转指令,跳转地址通常放在初始化程序及主程序中。

除0000H单元外,其他6个特殊单元分别对应于6种中断入口地址,如表2.1所示。

通常在这些入口地址处安放一条绝对跳转指令,跳转到相应中断服务程序入口去执行中断服务程序。

表2.1 各种中断服务子程序入口地址

2.数据存储器

数据存储器分为片内和片外两种,二者无论在物理上和逻辑上,其地址空间都是彼此独立的。片内数据存储器(见图2.4)地址范围为00H~FFH,片外数据存储器地址范围为0000H~FFFFH。访问片内RAM用“MOV”指令,访问片外RAM用“MOVX”指令。

图2.4 片内数据存储器

片内数据存储器在物理上可划分为3个不同的块:00H~7FH(0~127)单元组成的128 B RAM块,80H~FFH(128~255)单元组成的128B RAM块(仅MSC-52子系列中有这一块),128B专用特殊功能寄存器(SFR)块。

在MSC-51子系列中,只有128B RAM块(地址为00H~7FH)和128B特殊功能寄存器块(地址为80H~FFH),这两块地址空间是连续的。

在MSC-52子系列中,有256个RAM单元,高128B RAM块与SFR块的地址是重叠的,都是80H~FFH,究竟访问哪一块可通过不同的寻址方式来区分。访问高128B RAM时,采用寄存器间接寻址方式;访问SFR块时,只能采用直接寻址方式。访问低128B RAM时,则两种方式都可采用。值得注意的是,在128B SFR块中仅有26个字节是有定义的,若访问这一块中的一个无定义单元,则将得到一个不确定的随机数。

1)内部RAM区

如图2.5所示,在MSC-51子系列片内真正可作数据存储器用的只有128个RAM单元,地址为00H~7FH。它们可划分三个区域:工作寄存器区、位寻址区和数据缓冲区。

图2.5 内部RAM功能配置图

2)通用寄存器组

通用寄存器组由32个RAM单元组成,地址为00H~1FH,共有4个区,每个区由8个通用工作寄存器R0~R7组成。工作寄存器区域的选择由程序状态字(PSW)中的RS1和RSO确定,它们可用位操作指令直接修改,从而选择不同的工作寄存器区,如表2.2所示。

表2.2 工作寄存器选择

4个通用寄存器区给软件设计带来极大方便,在实现中断嵌套时可灵活选择不同工作寄存器区以方便实现现场保护。

3)位寻址区

RAM位寻址区是布尔处理器数据存储器的主要组成部分,全部可以位寻址。其字节地址为20H~2FH,共16个RAM单元,这些RAM单元可按位操作(也可按字节操作)。这16个字节有128位,其位地址为00H~7FH,如图2.6所示。另外,在SFR块中有12个专用寄存器的字节地址能被8整除,这12个SFR块的93位(96位减去3个未定义位)具有位寻址功能,如图2.7所示。

图2.6 内部RAM块中专用位地址

图2.7 SFR块中专用位地址

这样,位寻址区由128个RAM位与93个SFR位组成,共221位,可由布尔指令直接按位操作。

4)用户RAM区

用户RAM区也称为数据缓冲区,地址为30H~7FH,这些RAM单元按字节寻址。由于单片机在复位时,堆栈指针(SP)指向07H单元,故当用户使用堆栈时,应该首先设置堆栈。用户堆栈一般设为30H~7FH。原则上栈空间比128字节小得多,SP设的越大,堆栈就越浅。

3.专用寄存器(SFR)

专用寄存器又称为特殊功能寄存器。MSC-51单片机片内的I/O端口锁存器、定时器/计数器、串行口数据缓冲器及各种控制寄存器(除PC外),都以特殊功能寄存器的形式出现,它们离散地分布在片内80H~FFH地址空间范围内。MSC-51单片机共有23个特殊功能寄存器(3个属于MSC-52单片机),其中5个是双字节寄存器。程序计数器(PC)在物理上是独立的,其余22个寄存器都属于片内数据存储器SFR块,共占26个字节。

片内特殊功能寄存器(SFR)能综合地、实时地反映整个单片机内部工作状态及工作方式,因此,SFR是极其重要的。