历史上的今天
返回首页

历史上的今天

今天是:2024年11月23日(星期六)

2018年11月23日 | MCS-51单片机的存储器组织结构

2018-11-23 来源:eefocus

特点:哈佛结构,程序存储器与数据存储器分开,两者各有一个相互独立的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为禁用态。


推荐阅读

史海拾趣

HTC Korea(TAEJIN Technology )公司的发展小趣事

近年来,HTC在VR领域取得了显著的成就。2023年,在美国国际消费性电子展(CES)中,HTC推出了最先进的虚拟实境头戴式显示器VIVE XR Elite,凭借其创新、高规格的设计和巧妙的人体工学设计,赢得了众多国际媒体的赞誉和奖项。此外,HTC还开发了多款VR内容套件和追踪器,为用户提供了更加沉浸式的虚拟体验。这些努力不仅推动了VR产业的发展,也为HTC带来了新的增长点。

BOWEI公司的发展小趣事

在HTC的发展历程中,与微软的合作无疑是重要的一环。早在2002年,微软联合HTC推出了全球第一台搭载Windows mobile的Pocket PC,这一操作系统成为了日后WP 8的前身。得益于微软的信任和支持,HTC能够率先搭载最新的Windows mobile系统,从而成为Windows手机的顶级生产商。这种紧密的合作关系不仅提升了HTC的品牌影响力,还为其带来了大量的市场份额和利润。

GWM Associates公司的发展小趣事
通过优化电路设计和选择合适的放大器器件,尽量减小失真,保持信号的准确性和完整性。
Dexter Research Center Inc公司的发展小趣事

在电子产品行业,品质与信誉是企业生存和发展的基石。Dexter深知这一点,从产品研发到生产制造的每一个环节,都严格把控品质。公司采用先进的生产工艺和检测设备,确保每一件产品都符合高标准的质量要求。同时,Dexter还建立了完善的客户服务体系,及时响应客户需求,提供技术支持和解决方案。这些努力使Dexter赢得了客户的信任和好评,逐渐在行业中建立了良好的口碑。

DBS Microwave Inc公司的发展小趣事

DBS Microwave始终将产品质量放在首位。公司建立了一套严格的质量管理体系,从原材料采购到产品生产的每一个环节都进行严格的质量控制。此外,公司还注重员工的培训和技能提升,确保每一位员工都能够熟练掌握生产技能和质量要求。这些措施使得DBS Microwave的产品质量得到了客户的高度认可。

Allied Controls Incorporated公司的发展小趣事

作为一家有社会责任感的企业,DBS Microwave始终关注环境保护和可持续发展。公司积极采用环保材料和生产工艺,减少生产过程中的污染排放。同时,公司还积极参与社会公益活动,为当地社区的发展做出了积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

问答坊 | AI 解惑

zigbee的x-ctu资料

x-ctu的资料详细的谁有 我手上有个XBEE模块,DIGI的 然后如何配置成网络 是否只能1主多从 就是1COORDINATOR和多个ROUTER 有没有多个ROUTER不用COORDINATOR的 这样任意加入一个ROUTER就可以使用 任意一个ROUTER发的包其他的ROUTER都可以接收 ...…

查看全部问答>

关于信道

我现在在学CC2510,在配置RF的时候碰到信道的概念,在上网查,看到这么一句话不理解。 “常用的IEEE 802.11b/g工作在2.4~2.4835GHz频段,这些频段被分为11或13个信道。” 我想问的是频段被分为11或13个信道,这意思是把频段划分为11或13个通道每 ...…

查看全部问答>

关于lower significance bit

在一个文档里看见,LSB,MSB,和 lower significance bit. 这个lower significance bit不太明白,有清楚的大虾吗?在线等。…

查看全部问答>

dbgview中出现Buffered packet. can't write back :-\

捕捉不到dbgprint的内容,怎么办?…

查看全部问答>

一个关于avrstudio和GCCAVR的奇怪问题,请大家帮帮我!

大家好:     我现在用的Atmel16单片机,开发软件是基于avrstudio和GCCAVR,我在调试以下程序时,提示:“Conflicting the type of wr(void)”的错误!     void mian(void)    {      unsi ...…

查看全部问答>

STM32F103VBT6PB15,PB14,PB13,PB12不输出

请朋友们给指点一下,我的设置如下: /* RCC system reset(for debug purpose) */   RCC_DeInit();   //RCC_LSICmd(ENABLE); //内部时钟开启   /* Enable HSE */   RCC_HSEConfig(RCC_HSE_ON); ...…

查看全部问答>

TI图库有中文例程了

SW-LM3S-8264软件包已支持中文显示,在DK-LM3S9B96上实验例程,StellarisWare\\third_party\\fonts\\lang_demo The lang_demo example application has been updated to include support for accented characters in German and Spanish strings ...…

查看全部问答>

做工程师怎样防老

见过好几个做编程的工程师,都秃顶了.有的还很年轻,还不到三十岁就秃了.做我们这行的,怎样防老呢???我匀这行的压力大呀!…

查看全部问答>