单片机程序存储空间和数据存储空间详解e.docx
单片机程序程序存储空间ROM)和数据存储空间(RAM)详解问题:STC89C52RC单片机:8K字节程序存储空间,512字节数据存储空间,内带2K字节EEPROM存储空间;它们分别存的是什么?8K的程序存储空间是存储代码,也就是你写的程序生成的HEX文件的,相当于电脑系 统的C盘。512字节相当于内存,存储空间存储变量,像u8 x,y,z,u32 a之类的临时变量掉电后数据 丧失。2K eeprom相当于电脑系统的硬盘,数据写入后掉电不丧失。主要是单片机在运行的过 程中写入数据或者读取数据。像设置的闹铃值,设置好了就不用每次都去设置了,保存在单 片机里面,即使掉电了,设置的数据也不会丧失,只需单片机上电再读取就好了。单片机原理及系统结构在此先详细分析51单片的存储器结构和寻址方法,再分析片外存储器的扩展,最后给出 设计原理并分析系统结构。从物理结构上单片机系统的存储器结构图(四个部分)MCS-51单片机FFFFH片外FFFHROM片内RAM 256BOOOH片内 ROM 4K EA=11000HDFFFH64KEA=0OOOOH片外RAM64K图一:存储空间分布51单片机存储器结构分析8051单片机的存储器在物理结构上分为程序存储器空间和数据存储器空间,共有4个 存储空间:片内程序存储器、片外程序存储器以及片内数据存储器、片外数据存储器空间。这种程序存储和数据存储分开的结构形式被称为哈佛结构。MCS-51使用哈弗结构,它 的程序空间和数据空间是分开编址的,即各自有各自的地址空间,互不重叠。所以即使地址 一样,但因为分开编址,所以依然要说哪一个空间内的某地址。而ARM甚至是x86这 种冯诺依曼结构的MCU/CPU,它的地址空间是统一并且连续的,代码存储器RAM/CPU存 放器,甚至PC机的显存,都是统一编址的,只是不同功能的存储器占据不同的地址块,各 自为政。MCS-51单片机存储器的配置特点 内部集成了43的程序存储器ROM; 内部具有256B的数据存储器RAM用户空间+SFR空间; 可以外接64K的程序存储器ROM和 数据存储器RAM。从物理结构的角度讲,51单片机的存储系统可以分为四个存储空间:既片内ROM,RAM和片外ROM、 RAMo从逻辑结构上看既编程的角度),可以分为三个不同的空间:1)片内、片外统一编址的64KB的程序存储器地址空间:0000HFFFFH(用16位地址);,其中0000H0FFFH为片内4KB的ROM地址空间,1000H-FFFFH为外部ROM 地址空间;2256B的内部数据存储器地址空间用8位地址,00HFFH,分为两大局部,其中00H7FH共128B单元为内部静态RAM的地址空间,80H-FFH为特殊功能存放 器的地址空间,21个特殊功能存放器离散地分布在这个区域;364KB的外部数据存储器地址空间(用16位地址):0000HFFFFH,包括扩展I/O地址空间。上述4个存储空间地址是重叠的,如图1所示。8051的指令系统设计了不同的数据传 送指令以区别这4个不同的逻辑空间:CPU访问片内、片外ROM指令用MOVC,访问片 外RAM指令用MOVX,访问片内RAM指令用MOV。程序存储器用于存放编好的程序和表格常数。程序通过16位程序计数器寻址,寻址能 力为64KB。这使得指令能在64KB的地址空间内任意跳转,但不能使程序从程序存储器空 间转移到数据存储器空间。程序存储器ROM的片内和片外寻址1. 程序存储器ROM用于存放程序、常数或表格。2. 在51单片机中,由引脚/EA上的电平选择内、外ROM: EA=1时,CPU执行片内的4KROM中的程 序;EA=0时,CPU选择片外ROM中的程序。3. 无论是使用片内还是使用片外ROM,程序的起始地址都是从ROM的0000H单元开始。4. 尽管系统可以同时具备片内ROM和外部ROM,但是在一般正常使用情况下,通过/EA的设定来选 择其一或者使用内部ROM,或者使用外部ROM。5. 如果EA=1执行片内程序存储器中程序时):如果程序计数器的指针PC值超过0FFFH4K时,单 片机就要自动的转向片外的ROM存储器且从1000H单元开始执行程序无法使用片外ROM的低4K 空间。6. 当程序超过4K时,有两种使用程序存储器ROM的方法: 设置EA=0,使用外部ROM。从地址=0000H开始;设置EA=1,使用内部的4KROM和外部ROM地址从1000H开始的单元。8051从片内程序存储器和片外程序存储器取指时的执行速度相同。程序存储器六个特殊的单元:在ROM中有六个单元具有特定功能。0000H单元:复位时程序计数器PC所指向的单元,因此用来 存放程序中的第一条指令;0003H单元:外部中断/INT0的矢量入口地址;000BH单元:定时器T0溢出中断的矢量入口地址;0013H单元:外部中断/INT1的矢量入口地址;001BH单元:定时器T1的溢出中断矢量入口地址;0023H单元:串行口接收、传送的中断矢量入口地址。矢量入口单元:在编写中断程序时,写入对应的“跳板指令0000H0003H000 BH0013H001BH0023H0100H(上电启屯地址)(TO中断入口(n中断入口(串口中8S入口)主程序LJMP 0100H单片机第一条指令的两个特征: 存放在ROM的0000H单元; 必须是“跳转指令以跳过下面的5个中断矢量,转到后面的真正的主程序入口0100H单元。ORG 0000H LJMP 0100HORG 0100HSTART: MOV A,#00HEND外部程序存储器: 当单片机使用外ROM存储器时扩展系统,必须设定/EA=0,此时单片机的端口功能就要发生相应 的改变:P0、P2作为外部ROM的地址和数据总线; 使用引脚/psen信号来选通外部ROM的数据三态输出。外接程序存储器的总线结构图64K ROMMCS-51/CEP27A14P0.7PO.O完整的地址 唁号三态输出 的数据口 由JOE控制074LS373Q3/LA0OO程序存储器RAM的片内和片外寻址无论在物理上还是逻辑上,系统中RAM都可分为两个独立空间:内部和外部RAM。由不同的指令 来访问。1. 访问内部数据存储单元时,使用MOV指令;2. 访问外部数据存储器时,使用MOVX指令。内部RAM从功能上将256B空间分为二个不同的块:1. 低 128B 的 RAM 块;2. 高 128B 的 SFRSpecial Function Register 块。在低128B的RAM存储单元中又可划分为:1. 工作存放器区;2. 位寻址区;“便签区。高128B的专用存放器区SFR中仅仅使用了21存放器51系列,其它107个单元不能使用。注意:一般的教科书里RAM大小是指默认用户RAM,但是很少有特别说明的C51 :片内用户RAM有728字节位于片内所有RAM的低728B高728B是SFR)访问RAM可以使用直接或者间接寻址方式,地址为H-7FH, 0H-FFH的空间分配给 了 SFR,只能使用直接寻址方式。C52 :片内用户RAM为256字节位于片内所有RAM的低728B高728B是SFR和用户 RAM)低128字节00H-7FH 的访问方式为直接和间接寻址方式;高128字节地址80H-FFH 只能使用间接寻址方式。SFR的地址也为80H-FFH,但只能使用直接寻址方式。也就是说,C52的高128B是用户RAM和SFR统一编制,共享地址,通过指令的寻址方式 不同来进行区分。片内RAM中具有双重功能的存储结构图2FH7F7£7D7C7S7A/ 字节地址77767574737271706F6E6D6C6B6A於68676665646362616Q6F5E5D5C5B6A59686756555i535251604F4E4D4B4A4S4347464S444342414D位地址20 H3F3E_3D3C3B二A3,33J3726252+232221202F2E2D2C2B2A界2927262524232221201F1E1D1C181A191S17161514131211100F0E0DOCOB0A09OB070605D4030201DO对于数据存储器,分为内部数据存储器IDATA/RAM和外部数据存储器XDATA 两个局部,但这两个存储器就不像code存储器那样共享地址空间的了。一般的8051芯片, 内部RAM只有128B,从0x00-0x7F,而从0x80-0xFF那么是SFRCPU工作存放器和 各种外设存放器都在此)的区域。对于8052来说,内部RAM有256B,所以0x80-0xFF 是高128B的RAM在使用。可这局部不是SFR专用的吗?是SFR专用,但注意,SFR的 访问只能使用“直接寻址方式使用特定的汇编指令来实现),区别就在这里。只有通过 直接寻址访问的地址才是SFR,否那么就是普通的RAM。至于外扩的RAMXDATA,地址也是从0x0000-0xFFFF的,而且这里的0x0000和 内部RAM的0x00是不同的,是完全独立的两个空间。他们的访问方法也是不同的。MCS-51 使用MOVX指令,来读写XDATA区。而且,访问XDATA区,是需要DPTR存放器来辅助 的。因为只有DPTR才能装得下十六位的XDATA地址。所以说,MCS-51读写IDATA区的速度是最快的,而且访问方法也是最多的。访问 XDATA区的速度相对就要慢很多。用P0 口作地址/数据复用总线,用P2 口的口线作高位地址线,最多可以扩展开关电源 模块64KB的存储器。控制信号线包括:使用ALE作为地址锁存的选通信号,以实现低8 位地址的锁存;以PSEN信号作为扩展程序存储器的读选通信号;以EA信号作为内、外程序 存储器的选择信号;以EA和作为扩展数据存储器和I/O端口的读、写选通信号。执行MOVX 指令时,RD和WR信号分别自动有效。片外数据存储器RAM的读和写由8051的RD(P3.7) 和WR(P3.6)信号控制,而片外程序存储器的输出允许(OE)由读选通PSEN信号控制。尽管片外数据存储器和片外程序存储器共处同一地址空间,但由于控制信号及使用的数 据传送指令不同,故不会发生总线冲突。图2数据扩展图功能由于现在以8051为内核的单片机几乎都带有内部的FLASH程序存储器。如本设计中 要用到的开关电源模块AT89C51或AT89S51均自带4KB的FLASH程序存储器,有的单片 机带有20KB甚至更大容量的程序存储器。因此在单片机开发中,很少用专门的程序存储器 芯片来扩展外部程序存储器,通常也没有必要。触 3'立CPL 4-kbytes序存储器(ROM (£眺 3K)伯明yks的数走存语器(RAM) :52W25GbytesRAM)-32翁2口线111呆指令,大部分酒字节指令个专用寄存器2个可程茴如计数器号个中断源:卫个优先级(32有砰一个全双工串行通信口外言据存器寻址空间为54由外音暗序存器寻址空间为&4KB谬辑操作位寻址功能双列宜插如PI们F封装寻址空间为什么会最大64KB程序存储?单片机的P0.0做为低位地址线,P2.0作为高位地址线的时候,就总共有16根地址 线,也就是可以寻址2的16次方地址,也就是65536 64K地址。8位的单片机指的是 数据总线的宽度,也就是说传输的数据最高是8位宽度,和地址总线没关系的。8051的单片 机P0 口作为地址和数据总线复用,P2 口只能作为地址扩展接口使用。别把这地址宽度和 数据宽度这两个概念搞混了。