`
nathan09
  • 浏览: 155501 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

MCS-51单片机的存储器组织结构

 
阅读更多
MCS-51单片机的存储器组织结构

Author: Aaron Wong



特点:哈佛结构,程序存储器与数据存储器分开,两者各有一个相互独立的64K0x0000 ~ 0xFFFF)的寻址空间(准确地说,内部数据存储器与外部数据存储器不是一回事)。

<!--[if !supportEmptyParas]--><!--[endif]-->

程序存储器:

用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。

为只读存储器。注意,这里的“只读”,是指单片机(CPU)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了FLASH ROM,来取代以前所用的ROME2PROM等,可方便地进行在线编程(ISP)。

标准8051的内部程序存储器大小为4KB0x0000 ~ 0x0FFF);而具体的51核的兼容单片机的内部ROM大小需要参考其Datasheet,例如P89C51RA2xx的内部程序存储器是8KFlash

内部、外部存储器统一编址,在软件设计上(指令系统中)没有差别;是否使用外部程序存储器是通过引脚<!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:18.75pt; height:15.75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image001.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->EA<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1227834268"> </o:OLEObject> </xml><![endif]-->在硬件电路上控制的:不使用外部程序存储器时,<!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75" style='width:18.75pt;height:15.75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image001.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->EA<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1227834269"> </o:OLEObject> </xml><![endif]-->=0(接地);如果扩展了外部程序存储器,则使<!--[if gte vml 1]><v:shape id="_x0000_i1027" type="#_x0000_t75" style='width:18.75pt;height:15.75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image001.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->EA<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1027" DrawAspect="Content" ObjectID="_1227834270"> </o:OLEObject> </xml><![endif]-->=1,当寻址到内部存储空间以外时,会自动转向外部程序存储器空间(与扩展外部程序存储器有关的还有<!--[if gte vml 1]><v:shape id="_x0000_i1028" type="#_x0000_t75" style='width:33.75pt;height:17.25pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image005.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->PSEN<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1028" DrawAspect="Content" ObjectID="_1227834271"> </o:OLEObject> </xml><![endif]-->ALE的时序配合,以及P0P2口用于地址线)。

[] 一般直接选用内部程序存储器满足代码大小要求的单片机型号,避免扩展外部存储器,造成系统软硬件设计上的复杂和额外开销。

<!--[if !supportEmptyParas]--><!--[endif]-->

数据存储器:

RAM。首先必须要强调的是,不管是物理上还是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用途也不一样,访问的指令也不同(内部RAMMOV指令,外部为MOVX)。

<!--[if !supportEmptyParas]--><!--[endif]-->

1、内部数据存储器(内部RAM

相当于内存,为程序(进程)中的变量和常量分配存储空间,掉电后内容消失。

标准8051的内部RAM256B0x00 ~ 0xFF):其中可供用户自由使用的是低128B0x00 ~ 0x7F)区域,高128B中定义了26B的特殊功能寄存器(SFR),其余没有定义,因而没有意义。

P89C51RA2xx的片内RAM512B(片内RAM不等于内部RAM,见释疑2)。

[说明] 关于内部RAM中的SFR,其中不但定义了一些控制字段,还包括累加器(ACC)、程序状态字(PSW)、数据指针(DPTR)、堆栈指针(SP)等,值得注意的是,片上I/OP0 ~ P3的地址也在这里定义(即有3个特殊功能寄存器的地址实际上是P口的地址)——这是因为51单片机的I/O口与存储器是统一编址的*

<!--[if !supportEmptyParas]--><!--[endif]-->

2、外部数据存储器(外部RAM

上面谈到“I/O口与存储器统一编址”的问题,因此,这里称作外部RAM空间更为合适。在这个64KB地址空间中(0x0000 ~ 0xFFFF),除了可以扩展外部RAM外,还可以扩展外部I/O设备。

外部RAM主要用于存储程序运行时产生的重要数据(如数据采集结果、数据处理结果、系统日志等),这时一般需要外加电源进行掉电保护,以在系统掉电时保存其中的数据信息;也可用于数据的暂时存储,供CPU正常读写操作使用。因此外部RAM主要是使用其“可随机访问、读写方便且高速”的特性。

<!--[if !supportEmptyParas]--><!--[endif]-->

* 所谓I/O口与存储器统一编址,是指I/O口与主存在同一地址空间,将处理器的可寻址存储空间中专门划出一部分地址空间分配给I/O口使用。这与PC机的x86处理器不同,x86体系结构为I/O口专门定义了独立于存储空间之外的地址空间(事实上,除X86外,其他体系结构的处理器都对I/O口与存储器统一编址,可参考《Linux Device Drivers》)。

<!--[if !supportEmptyParas]--><!--[endif]-->

释疑1:51只有16根地址线,为什么能同时将程序存储器和外部数据存储器都扩展到64KB呢?即外部即有ROM,又有RAM,如何知道访问的是哪个?

在体系结构上,程序存储器和数据存储器是不同的地址空间,两者的访问是不会相互干扰的,这主要是通过在硬件和指令集设计上来实现的。

在硬件上,访问外部ROM是通过<!--[if gte vml 1]><v:shape id="_x0000_i1029" type="#_x0000_t75" style='width:18.75pt;height:15.75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image001.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->EA<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1029" DrawAspect="Content" ObjectID="_1227834272"> </o:OLEObject> </xml><![endif]--><!--[if gte vml 1]><v:shape id="_x0000_i1030" type="#_x0000_t75" style='width:33.75pt;height:17.25pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image005.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->PSEN<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1030" DrawAspect="Content" ObjectID="_1227834273"> </o:OLEObject> </xml><![endif]-->引脚来控制的;访问外部RAM则是通过<!--[if gte vml 1]><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:20.25pt;height:17.25pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image009.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->WR<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1031" DrawAspect="Content" ObjectID="_1227834274"> </o:OLEObject> </xml><![endif]--><!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75" style='width:20.25pt;height:15.75pt' o:ole=""> <v:imagedata src="file:///C:/DOCUME~1/okhzh/LOCALS~1/Temp/msoclip1/01/clip_image011.wmz" o:title="" /> </v:shape><![endif]--><!--[if !vml]-->RD<!--[endif]--><!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Equation.DSMT4" ShapeID="_x0000_i1032" DrawAspect="Content" ObjectID="_1227834275"> </o:OLEObject> </xml><![endif]-->信号来控制的;

在指令集上,访问外部ROM不需要使用显示指令,是通过PC(指令计数器)来控制取指地址的(跳转指令也可能引起PC跳转);而访问外部RAM则需要在程序设计上使用指令MOVX来执行。另外,访问内部RAM则使用了指令MOV,以区分外部RAM的访问。

释疑2P89C51RA2xx的片内RAM512B,是如何组织的?

P89C51RA2xx的片内RAM512B:其中内部RAM256B(使用MOV指令访问,定义与标准51相同);另外的256BXRAM(片内的外部数据存储器),属于外部存储器的范畴,因此用途也同外部RAM,使用MOVX指令访问,当程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到XRAM区。注意这个片内的XRAM掉电后其数据也会丢失;另外,如果要扩展外部RAM,则一般是设置XRAM为禁用态。


<!--[if !supportEmptyParas]-->


<!--[endif]-->

参考资料:

①《MCS-51系列单片机系统及其应用(第二版)》,蔡美琴,张为民等;

②《单片机的C语言应用程序设计》,马忠梅等;

P89C51RA2_RB2_RC2_RD2_2.pdf

分享到:
评论

相关推荐

    MCS-51 单片机的基本结构

    MCS-51单片机的外部引脚非常丰富,包括了电源和地线引脚(VCC和VSS)、复位引脚(RST)、外部程序存储器控制引脚(PSEN和ALE)等,这些都为单片机的扩展和应用提供了便利。 了解MCS-51单片机的基本结构对于从事...

    MCS-51单片机存储器结构

    MCS-51单片机存储器结构 MCS-51单片机存储器结构可以分为四类:程序存储器、数据存储器、扩展数据存储器和特殊功能寄存器。 程序存储器是用于存放用户程序、数据和表格等信息的。MCS-51具有64kB程序存储器寻址空间...

    MCS-51单片机原理、系统设计与应用 课后答案

    #### 七、MCS-51单片机的硬件结构 **2.1 功能部件及其功能** MCS-51单片机内部集成了以下功能部件: - **微处理器(CPU)**:包括了运算器和控制器两大部分,能够执行基本的算术逻辑运算和控制指令。 - **数据...

    新编MCS-51单片机应用设计 张毅刚.pdf

    根据提供的文件信息,我们可以...综上所述,《新编MCS-51单片机应用设计》这本书可能会涵盖MCS-51单片机的基本原理、硬件结构、软件编程方法以及实际应用案例等方面的内容,非常适合初学者和有一定基础的读者学习参考。

    MCS-51单片机期末试题2及答案

    知识点:MCS-51单片机的存储器结构,包括程序存储器和数据存储器的扩展机制。 2. 关于堆栈类操作的两条指令分别是PUSH、POP,操作遵循先进后出原则。 知识点:MCS-51单片机的堆栈操作,包括PUSH和POP指令的使用。 ...

    MCS-51单片机结构介绍

    ### MCS-51单片机结构介绍 #### 1. MCS-51单片机概述 MCS-51系列单片机是由Intel公司在上世纪80年代推出的一种8位微型计算机系统,因其卓越的性能、较低的成本以及丰富的扩展能力,在工业控制、家用电器等领域得到...

    新编MCS-51单片机应用设计

    本书首先介绍了MCS-51单片机的基本结构,包括其内部寄存器配置、存储器组织、并行I/O端口、定时器/计数器、中断系统等核心组成部分。通过这些基础知识的学习,读者能够理解MCS-51单片机的运行机制和编程模型。 接着...

    MCS-51单片机指令系统与汇编语言设计

    3. 内存管理:了解片内RAM和ROM的组织结构,以及如何访问外部存储器。 4. I/O操作:掌握如何使用P0-P3口进行输入输出操作,以及如何配置中断和定时器。 5. 优化技巧:通过指令级优化,减少程序执行时间,节省存储...

    MCS-51单片机数据存储器的扩展

    ### MCS-51单片机数据存储器的扩展详解 #### 重要性及必要性 MCS-51单片机作为嵌入式系统的核心组件,其内部配备了一定容量的数据存储器,通常为128或256个字节。这部分存储器主要承担着工作寄存器、堆栈、临时...

    MCS-51单片机的内部结构介绍

    ### MCS-51单片机的内部结构介绍 #### 一、8051单片机片内并行接口 MCS-51系列单片机(也称为8051系列)是一种广泛应用于各种控制领域的微控制器。其内部结构复杂而精妙,特别是其并行接口部分的设计更是其强大...

    MCS-51单片机资料

    MCS-51单片机的内部结构高度集成,主要包括以下几个核心组件: 1. **中央处理器(CPU)**: 8位微处理器,负责执行指令集。 2. **片内振荡器及时钟电路**: 用于产生单片机工作所需的时钟信号。 3. **4KB ROM程序存储器...

    基于C语言编程MCS-51单片机原理与应用

    1. **MCS-51单片机结构**:MCS-51单片机采用8051内核,拥有128字节内部RAM、4KB/8KB可选的内部ROM、32个I/O口线、2个16位定时器/计数器、5个中断源以及串行通信接口。了解其硬件架构是理解和开发应用的基础。 2. **...

    [MCS-51单片机技术项目驱动教程(C语言)].zip

    学习这个教程,你需要了解MCS-51单片机的基本架构,包括CPU、存储器、并行和串行端口、中断系统等。同时,掌握C语言编程基础,熟悉单片机编程模型,以及如何将C代码转换为机器码并烧录到单片机中。此外,了解基本的...

    第2章-MCS-51单片机硬件结构和原理.ppt

    本章节将详细介绍MCS-51单片机的硬件结构和原理,包括CPU、存储器、输入/输出接口、时钟电路等组件的结构和工作原理。 CPU(中央处理器)是MCS-51单片机的核心组件,负责执行指令和控制数据流。MCS-51单片机的CPU...

    单片机原理及应用课件:chapter6 MCS-51单片机存储器的扩展.ppt

    **单片机原理及应用——MCS-51单片机存储器的扩展** MCS-51单片机在实际应用中往往需要扩展存储器,以满足更大的存储需求。本章主要关注的是如何扩展MCS-51单片机的程序存储器(ROM)和数据存储器(RAM),以及E2...

Global site tag (gtag.js) - Google Analytics