Author: Aaron Wong
特点:哈佛结构,程序存储器与数据存储器分开,两者各有一个相互独立的64K(0x0000 ~ 0xFFFF)的寻址空间(准确地说,内部数据存储器与外部数据存储器不是一回事)。
<!--[if !supportEmptyParas]--><!--[endif]-->
程序存储器:
① 用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。
② 为只读存储器。注意,这里的“只读”,是指单片机(CPU)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了FLASH ROM,来取代以前所用的ROM、E2PROM等,可方便地进行在线编程(ISP)。
③ 标准8051的内部程序存储器大小为4KB(0x0000 ~ 0x0FFF);而具体的51核的兼容单片机的内部ROM大小需要参考其Datasheet,例如P89C51RA2xx的内部程序存储器是8K的Flash。
④ 内部、外部存储器统一编址,在软件设计上(指令系统中)没有差别;是否使用外部程序存储器是通过引脚<!--[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的时序配合,以及P0和P2口用于地址线)。
[注] 一般直接选用内部程序存储器满足代码大小要求的单片机型号,避免扩展外部存储器,造成系统软硬件设计上的复杂和额外开销。
<!--[if !supportEmptyParas]--><!--[endif]-->
数据存储器:
为RAM。首先必须要强调的是,不管是物理上还是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用途也不一样,访问的指令也不同(内部RAM为MOV指令,外部为MOVX)。
<!--[if !supportEmptyParas]--><!--[endif]-->
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口与存储器是统一编址的*。
<!--[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的访问。
释疑2:P89C51RA2xx的片内RAM是512B,是如何组织的?
P89C51RA2xx的片内RAM是512B:其中内部RAM为256B(使用MOV指令访问,定义与标准51相同);另外的256B为XRAM(片内的外部数据存储器),属于外部存储器的范畴,因此用途也同外部RAM,使用MOVX指令访问,当程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到XRAM区。注意这个片内的XRAM掉电后其数据也会丢失;另外,如果要扩展外部RAM,则一般是设置XRAM为禁用态。
<!--[if !supportEmptyParas]-->
<!--[endif]-->
参考资料:
①《MCS-51系列单片机系统及其应用(第二版)》,蔡美琴,张为民等;
②《单片机的C语言应用程序设计》,马忠梅等;
③ P89C51RA2_RB2_RC2_RD2_2.pdf
相关推荐
MCS-51单片机的外部引脚非常丰富,包括了电源和地线引脚(VCC和VSS)、复位引脚(RST)、外部程序存储器控制引脚(PSEN和ALE)等,这些都为单片机的扩展和应用提供了便利。 了解MCS-51单片机的基本结构对于从事...
MCS-51单片机存储器结构 MCS-51单片机存储器结构可以分为四类:程序存储器、数据存储器、扩展数据存储器和特殊功能寄存器。 程序存储器是用于存放用户程序、数据和表格等信息的。MCS-51具有64kB程序存储器寻址空间...
#### 七、MCS-51单片机的硬件结构 **2.1 功能部件及其功能** MCS-51单片机内部集成了以下功能部件: - **微处理器(CPU)**:包括了运算器和控制器两大部分,能够执行基本的算术逻辑运算和控制指令。 - **数据...
根据提供的文件信息,我们可以...综上所述,《新编MCS-51单片机应用设计》这本书可能会涵盖MCS-51单片机的基本原理、硬件结构、软件编程方法以及实际应用案例等方面的内容,非常适合初学者和有一定基础的读者学习参考。
知识点:MCS-51单片机的存储器结构,包括程序存储器和数据存储器的扩展机制。 2. 关于堆栈类操作的两条指令分别是PUSH、POP,操作遵循先进后出原则。 知识点:MCS-51单片机的堆栈操作,包括PUSH和POP指令的使用。 ...
### MCS-51单片机结构介绍 #### 1. MCS-51单片机概述 MCS-51系列单片机是由Intel公司在上世纪80年代推出的一种8位微型计算机系统,因其卓越的性能、较低的成本以及丰富的扩展能力,在工业控制、家用电器等领域得到...
本书首先介绍了MCS-51单片机的基本结构,包括其内部寄存器配置、存储器组织、并行I/O端口、定时器/计数器、中断系统等核心组成部分。通过这些基础知识的学习,读者能够理解MCS-51单片机的运行机制和编程模型。 接着...
3. 内存管理:了解片内RAM和ROM的组织结构,以及如何访问外部存储器。 4. I/O操作:掌握如何使用P0-P3口进行输入输出操作,以及如何配置中断和定时器。 5. 优化技巧:通过指令级优化,减少程序执行时间,节省存储...
### MCS-51单片机数据存储器的扩展详解 #### 重要性及必要性 MCS-51单片机作为嵌入式系统的核心组件,其内部配备了一定容量的数据存储器,通常为128或256个字节。这部分存储器主要承担着工作寄存器、堆栈、临时...
### MCS-51单片机的内部结构介绍 #### 一、8051单片机片内并行接口 MCS-51系列单片机(也称为8051系列)是一种广泛应用于各种控制领域的微控制器。其内部结构复杂而精妙,特别是其并行接口部分的设计更是其强大...
MCS-51单片机的内部结构高度集成,主要包括以下几个核心组件: 1. **中央处理器(CPU)**: 8位微处理器,负责执行指令集。 2. **片内振荡器及时钟电路**: 用于产生单片机工作所需的时钟信号。 3. **4KB ROM程序存储器...
1. **MCS-51单片机结构**:MCS-51单片机采用8051内核,拥有128字节内部RAM、4KB/8KB可选的内部ROM、32个I/O口线、2个16位定时器/计数器、5个中断源以及串行通信接口。了解其硬件架构是理解和开发应用的基础。 2. **...
学习这个教程,你需要了解MCS-51单片机的基本架构,包括CPU、存储器、并行和串行端口、中断系统等。同时,掌握C语言编程基础,熟悉单片机编程模型,以及如何将C代码转换为机器码并烧录到单片机中。此外,了解基本的...
本章节将详细介绍MCS-51单片机的硬件结构和原理,包括CPU、存储器、输入/输出接口、时钟电路等组件的结构和工作原理。 CPU(中央处理器)是MCS-51单片机的核心组件,负责执行指令和控制数据流。MCS-51单片机的CPU...
**单片机原理及应用——MCS-51单片机存储器的扩展** MCS-51单片机在实际应用中往往需要扩展存储器,以满足更大的存储需求。本章主要关注的是如何扩展MCS-51单片机的程序存储器(ROM)和数据存储器(RAM),以及E2...