购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3.4 存储器结构

一般微机通常是程序和数据共用一个存储空间,即ROM和RAM统一编址,属于“冯·诺依曼”(Von Neumann)结构。而单片机的存储器组织结构则把程序存储空间和数据存储空间严格区分开来,即程序存储器ROM和数据存储器RAM分开编址,属于“哈佛”(Harvard)结构。

程序存储器ROM用于固化程序、常数和数据表。数据存储器用于存放程序运行中产生的各种数据并用于堆栈等。

51单片机存储器结构如图1-6所示。

图1-6 51单片机存储器结构

a)程序存储器(ROM)b)片内数据存储器(内RAM)c)片外数据存储器(外RAM)

51单片机存储器在物理结构上分成四个存储空间:片内程序存储器、片外程序存储器、片内数据存储器和片外数据存储器。从用户使用的角度,即从逻辑上考虑,则有三个存储空间:片内外统一编址的64KB程序存储器地址空间(0000H ~ FFFFH)、256B的片内数据存储器地址空间(00H ~ FFH)及片外数据存储器地址空间(0000H ~ FFFFH)。

CPU在访问三个不同的逻辑空间时,通过采用不同形式的指令,来产生相应的存储器选通信号,访问程序存储器使用MOVC指令、访问片内数据存储器使用MOV指令、访问片外数据存储器使用MOVX指令。

1.程序存储器

(1)51单片机程序存储器ROM

它用于存放编好的程序、常数或表格。在正常工作时只可读不可写,掉电后数据不丢失。

1)片内具有4KB的Flash结构的电可擦除只读存储器,与INTEL公司早期产品的紫外线擦除的EPROM结构相比,使用更灵活更方便。

2)外部可以扩展64KB的ROM,以满足一些大程序的需要。建议用户尽量不要外扩ROM,因为当扩展外部ROM的时候,系统要占据单片机的P0口、P2口及P3口的部分口线作为总线。所以在大多数的应用场合,尽量选择片内的Flash内存的容量能够满足实际需要单片机型号,这样不仅可以节省额外的硬件投资、节省单片机的口线资源,更重要的是片内Flash中的程序在下载、烧写时通过“加密”可以得到保护。只有当程序特别大,内部空间无法满足要求时才选择扩展外部ROM。

3)程序内存最低端的地址可以在片内Flash中或在外部ROM中。可以通过单片机/EA的引脚的电平来选择。

例如,在带有4 KB片内Flash的51单片机中,如果把 引脚连到VCC,当地址为0000H~0FFFH时,则访问内部Flash;当地址为1000H~FFFFH时,将自动转向外部程序内存。

如果 端接地,则只访问外部程序内存,不管是否存在内部Flash内存。

(2)51单片机程序存储器的管理

1)每个ROM单元(Byte)对应一个唯一的16bit的地址编码(Address)。

2)CPU要到某个ROM单元去取指令,是通过把地址编码写入16位的程序计数器PC来实现的,因此AT89系列单片机地址的编码范围(通常称为寻址范围)为:

3)系统复位后,PC的初始值为0000H,以后的取值是CPU根据用户程序的运行流程自动装载的(程序顺序执行时,PC值自动加1;执行转移指令、子程序调用和中断服务程序时,PC值分别等于转移的目标地址、子程序或中断服务程序的入口地址)。

(3)51单片机程序存储器的分配

程序内存的某些单元是保留给系统使用的,这几个单元的配置如图1-7所示。从图1-7可知,单片机复位后,程序计数器PC的内容为0000H,所以CPU总是从0000H单元开始执行程序。

图1-7 程序内存的复位及中断入口配置

从地址0003H开始,系统每隔8个单元为6个中断服务子程序分配有一个固定的入口地址。如外部中断0的入口地址为0003H;定时器0的入口地址为000BH;外部中断1的入口地址为0013H;定时器1的入口地址为001BH;以此类推。

中断响应后,程序指针PC将自动根据中断类型指向这些入口地址的某一个,CPU就从这里开始执行中断服务子程序。

因此从0003H单元开始的这段区域应该保留给中断使用,所以程序设计时在0000H~0002H单元放置一条转移指令,跳过这段区域,直接转到系统主程序,除非系统不使用中断,主程序才可以覆盖这段区域。

2.片内数据存储器

单片机的片内数据存储器结构如图1-8所示。片内数据存储器地址范围是00H~FFH,只有256B,这里仅介绍低128字节区,高128字节区由于被特殊功能寄存器占有,故单独列出介绍。低128字节区主要分为三个区域:工作寄存器组区、位寻址区和用户RAM区。

图1-8 片内数据存储器的结构

(1)工作寄存器区

最低32个单元(地址为00H~1FH)为4个通用工作寄存器组。每个寄存器组含有8个8位寄存器,编号为R0~R7。

程序状态字PSW中的2位RS0、RS1用来确定当前采用哪一个工作寄存器组,其对应关系见前面的表1-4。

在某一时刻只能选用其中的一组寄存器工作,系统复位后,指向工作寄存器组0。如果用户程序不需要4个工作寄存器区,则不用的工作寄存器单元可以作一般的RAM使用。

(2)位寻址区

内部RAM区中的20H~2FH单元(16B)可供位寻址,这16个单元共有128位,每位均可直接寻址,其位地址范围为00H~7FH,具体情况见表1-5。

表1-5 RAM位寻址区地址表

(续)

这些位地址有两种表示方式:一种是采用位地址形式,即00H~7FH;

一种是用单元地址(20H~2FH)。位数方式表示。例如,位地址00H~07H也可表示为20H.0~20H.7。

(3)用户RAM区

30H~7FH共有80个字节单元,为字节寻址的内部RAM区,可供用户作为数据存储区。这一区域的操作指令非常丰富,数据处理方便灵活,是非常宝贵的资源。但是,如果堆栈指针初始化时设置在这个区域,就要留出足够的字节单元作为堆栈区,以防止在数据存储时,破坏了堆栈的内容。

堆栈:堆栈是按先进后出或后进先出原则进行读/写的特殊RAM区域。51单片机的堆栈区是不固定的,原则上可设置在内部RAM的任意区域内。实际使用时要根据对片内RAM各功能区的使用情况而灵活设置,应避开工作寄存器区、位寻址区和用户实际使用的数据区,一般将其设在2FH地址单元以后的区域。

堆栈的作用:主要用在子程序调用或中断处理过程中,用于保护断点和现场,实现子程序或中断的多级嵌套处理。在CPU响应中断或调用子程序时,会自动地将断点处的16位返回地址压入堆栈。在中断服务程序或子程序结束时,返回地址会自动由堆栈弹出,并放回到程序计数器PC中,使程序从原断口处继续执行下去。

堆栈除了用于保护断点处的返回地址外,还可以用于保护其他一些重要信息,要注意的是,必须按照“后进先出”的原则存取信息。堆栈也可以作为特殊的数据交换区使用。

确定堆栈的位置:栈顶的位置由专门设置的堆栈指针SP指出。

51单片机的SP是8位寄存器,堆栈属向上生长的,当数据压入堆栈时,SP的内容自动加1,作为本次进栈的指针,然后再存入数据。SP的值随着数据的存入而增加。当数据从堆栈弹出之后,SP的值随之减少。复位时,SP的初值为07H,用户在初始化程序中可以给SP赋新的初值。

(4)特殊功能寄存器

内部RAM的高128字节区是给特殊寄存器使用的,因此也称之为专用寄存器区,其单元地址为80H~FFH。因为这些寄存器的功能已作专门规定,所以称其为专用寄存器或特殊功能寄存器(Special Function Registers),简称SFR。51单片机的SFR的总数为26个,仅占用了80H~0FFH中的很小一部分。SFR是单片机片内资源的控制指挥单元,单片机内部不管集成了多少外围接口部件和功能单元,都是通过SFR进行控制和管理的,因此学习任何一个单片机的功能部件的使用,一定要了解与之相关的SFR,并弄清通过这些SFR如何去控制用户所使用的功能部件。

51系列单片机内的I/O锁存器、定时器、串行口数据缓冲器以及各种控制寄存器和状态寄存器都以特殊功能寄存器的形式出现。它们离散地分布在80H~0FFH的地址空间范围内,具体分布见表1-6。

表1-6 51单片机的SFR在80H~0FFH的离散分布

表1-6列出了51单片机所有的特殊功能寄存器及其地址和初始值。字节地址能被8整除的专用寄存器都可以实现位寻址,个别不能被8整除的专用寄存器也可以实现位寻址。

SFR的使用方法如下:

1)从表1-6可以看出,80H~FFH这128B并不是所有的地址都定义了SFR。在这个区域当中,除了SFR之外剩余的空闲单元,用户不得使用。读这些地址,一般将得到一个随机数据;写入的数据将会无效。

2)必须使用直接寻址方式对SFR进行访问,可使用寄存器名称(是它的符号地址)或地址。

例如:0EOH——累加器的地址;

ACC——累加器的名称。

3)具有位地址和位名称的SFR才可以进行位寻址,位地址有以下4种表示形式:

① 直接使用位地址表示:

例如:0D7H —— PSW最高位的位地址。

② 使用位名称表示:

例如:CY —— PSW最高位的位名称。

③ 使用SFR字节地址和位形式表示:

例如:0D7H.7—— PSW字节地址。最高位。

④ 使用SFR名称和位形式表示:

例如:PSW.7—— PSW名称。最高位。

3.片外数据存储器

片外数据存储器的P0端口作为RAM的地址/数据总线,当外部地址空间小于FFH时,只需P0口作为地址总线即可,P2口可以作为一般的I/O使用。当外部地址空间大于FFH时,则由P2端口传送高8位地址。对片外数据存储器的访问,使用MOVX的间接寻址指令,以区别对内部RAM(片内用MOV)的访问,同时自动产生读/写控制信号RD和WR。

片外RAM做通用RAM使用,主要存放大量采集的或接收的数据、运算的中间数据、最后结果和堆栈数据等。

使用外部RAM同样是要付出占用端口资源为代价的,所以一般情况下不提倡使用外部RAM。

4.地址空间

(1)片外总线结构

从51单片机引脚可以看出,除了电源、复位、时钟输入以及I/O口外,其余的引脚都是为实现系统扩展而设置的。这些引脚构成了片外三总线结构,如图1-9所示。

1)地址总线(AB)。地址总线的宽度是16位,因此可以寻址的范围是64KB。采用分时复用技术,可以对外部64KB的数据存储器或程序存储器直接寻址。它由P0口提供16位地址总线的低8位(A0~A7),由P2口提供地址总线的高8位(A8~A15)。

2)数据总线(DB)。数据总线的宽度是8位,它由P0口提供。

3)控制总线(CB)。控制总线由P3口的第二功能(RXD、TXD、 、T0、T1、 )和4根独立的控制线(RST、EA、ALE、PSEN)组成。

(2)程序存储器地址空间

程序存储器用于存放编好的程序和表格常数。程序存储器通过16位程序计数器寻址,寻址能力为64 KB,这使得指令能在64KB地址空间内任意跳转。51单片机ROM的地址范围为0000H~0FFFH。

图1-9 51系列单片机片外总线结构图

(3)数据存储器地址空间

1)片内RAM

① 工作寄存器区:51单片机的前32个单元(地址00H~1FH)称为寄存器区。通过对特殊功能寄存器PSW中RS1、RS0两位的编程设置,可选择任一寄存器组为工作寄存器组,方法见前面表1-4。

② 位寻址区:字节地址20H到2FH称为位地址区,共有16B,计128位,每位都有相应的位地址,位地址范围为00H~7FH,见前面表1-5。位寻址区有两种访问方式:一种是按字节访问;另一种是通过位寻址,对位寻址区128位进行位操作。

③ 便笺区:30H~7FH,便笺区共有80个RAM单元,用于存放用户数据或作堆栈区使用。51单片机对便栈区中每个RAM单元是按字节存取的。

④ 特殊功能寄存器(26个):51单片机片内高128B RAM中,有26个特殊功能寄存器(SFR),它们离散地分布在80H~FFH的RAM空间中。访问特殊功能寄存器只允许使用直接寻址方式。特殊功能寄存器见表1-7。

表1-7 特殊功能寄存器

(续)

2)片外RAM

51单片机构成的应用系统当片内RAM不够用时,可在片外部扩充数据存储器。51单片机给用户提供了可寻址64KB(0000H~FFFFH)的外部扩充RAM的能力,至于扩充多少RAM,则根据用户实际需要来确定。 oS2+19wOT/W/lRi6Mchx47Lb/0gGTR1dHXaa+pj85RrtDDvAQ3LDEYmt7cF5s8gm

点击中间区域
呼出菜单
上一章
目录
下一章
×