MCS-51单片机的存储器安排结构
特色:哈佛结构,程序存储器与数据存储器分隔,两者各有一个彼此独立的64K(0x0000 ~ 0xFFFF)的寻址空间(精确地说,内部数据存储器与外部数据存储器不是一回事)。
程序存储器:
①用于寄存程序(可履行的二进制代码映像文件,包含程序中的数据信息),还包含初始化代码等固件。
②为只读存储器。留意,这儿的“只读”,是指单片机(CPU)在正常作业时对其的拜访方法是只读的;而现在大多数单片机的程序存储器(不管是内部仍是外部)都采用了FLASH ROM,来替代曾经所用的ROM、E2PROM等,可便利地进行在线编程(ISP)。
③规范8051的内部程序存储器巨细为4KB(0x0000 ~ 0x0FFF);而详细的51核的兼容单片机的内部ROM巨细需求参阅其Datasheet,例如P89C51RA2xx的内部程序存储器是8K的Flash。
④内部、外部存储器一致编址,在软件规划上(指令体系中)没有不同;是否运用外部程序存储器是经过引脚EA在硬件电路上操控的:不运用外部程序存储器时,EA=0(接地);假如扩展了外部程序存储器,则使EA=1(接电源),当寻址到内部存储空间以外时,会主动转向外部程序存储器空间(与扩展外部程序存储器有关的还有PSEN和ALE的时序合作,以及P0和P2口用于地址线)。
[注]一般直接选用内部程序存储器满意代码巨细要求的单片机类型,防止扩展外部存储器,形成体系软硬件规划上的杂乱和额定开支。
数据存储器:
为RAM。首要有必要要着重的是,不管是物理上仍是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用处也不一样,拜访的指令也不同(内部RAM为MOV指令,外部为MOVX)。
1、内部数据存储器(内部RAM)
相当于内存,为程序(进程)中的变量和常量分配存储空间,掉电后内容消失。
规范8051的内部RAM为256B(0x00 ~ 0xFF):其间可供用户自在运用的是低128B(0x00 ~ 0x7F)区域,高128B中界说了26B的特别功用寄存器(SFR),其他没有界说,因而没有意义。
P89C51RA2xx的片内RAM是512B(片内RAM不等于内部RAM,见释疑2)。
[阐明]关于内部RAM中的SFR,其间不光界说了一些操控字段,还包含累加器(ACC)、程序状态字(PSW)、数据指针(DPTR)、仓库指针(SP)等,值得留意的是,片上I/O口P0 ~ P3的地址也在这儿界说(即有3个特别功用寄存器的地址实际上是P口的地址)——这是由于51单片机的I/O口与存储器是一致编址的。
2、外部数据存储器(外部RAM)
上面谈到“I/O口与存储器一致编址”的问题,因而,这儿称作外部RAM空间更为适宜。在这个64KB地址空间中(0x0000 ~ 0xFFFF),除了能够扩展外部RAM外,还能够扩展外部I/O设备。
外部RAM首要用于存储程序运行时发生的重要数据(如数据收集成果、数据处理成果、体系日志等),这时一般需求外加电源进行掉电维护,以在体系掉电时保存其间的数据信息;也可用于数据的暂时存储,供CPU正常读写操作运用。因而外部RAM首要是运用其“可随机拜访、读写便利且高速”的特性。
*所谓I/O口与存储器一致编址,是指I/O口与主存在同一地址空间,将处理器的可寻址存储空间中专门划出一部分地址空间分配给I/O口运用。这与PC机的x86处理器不同,x86体系结构为I/O口专门界说了独立于存储空间之外的地址空间(事实上,除X86外,其他体系结构的处理器都对I/O口与存储器一致编址,可参阅《Linux Device Drivers》)。
释疑1:51只要16根地址线,为什么能一起将程序存储器和外部数据存储器都扩展到64KB呢?即外部即有ROM,又有RAM,怎么知道拜访的是哪个?
在体系结构上,程序存储器和数据存储器是不同的地址空间,两者的拜访是不会彼此搅扰的,这首要是经过在硬件和指令集规划上来完成的。
在硬件上,拜访外部ROM是经过EA和PSEN引脚来操控的;拜访外部RAM则是经过WR和RD信号来操控的;
在指令集上,拜访外部ROM不需求运用显现指令,是经过PC(指令计数器)来操控取指地址的(跳转指令也或许引起PC跳转);而拜访外部RAM则需求在程序规划上运用指令MOVX来履行。别的,拜访内部RAM则运用了指令MOV,以区别外部RAM的拜访。
释疑2:P89C51RA2xx的片内RAM是512B,是怎么安排的?
P89C51RA2xx的片内RAM是512B:其间内部RAM为256B(运用MOV指令拜访,界说与规范51相同);别的的256B为XRAM(片内的外部数据存储器),归于外部存储器的领域,因而用处也同外部RAM,运用MOVX指令拜访,当程序中的全局变量或单个局部变量需占较大存储空间时,能够界说为xdata型,保存到XRAM区。留意这个片内的XRAM掉电后其数据也会丢掉;别的,假如要扩展外部RAM,则一般是设置XRAM为禁用态。