存储器是许多存储单元的集合,存储器单元实际上是时序逻辑电路(锁存器)的一种,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM)。
位(bit):它是计算机中最小的数据单位。由于计算机采用二进制数,所以1位二进制数称作1bit,例如101011为6bit。
字节(Byte,单位简写为B):8位二进制数称为一个字节,1B=8bit。
字(Word):两个字节构成一个字,即2Byte=1Word。
在单片机中还有一个常用术语:字长。所谓字长是指单片机一次能处理的二进制数的位数。51单片机一次能处理8位二进制数,所以51单片机的字长为8位。
如下图所示是一个容量为256字节的存储器,内部有256个存储单元,每个存储单元可以存放8位二进制数,为了存取数据方便,需要对每个存储单元进行编号,也即对存储单元编址,编址采用二进制数,对256个存储单元全部编址至少要用到8位二进制数,第1个存储单元编址为00000000,编写程序时为了方便,一般用十六进制数表示,二进制数00000000用十六进制表示就是00H,H表示十六制数,第二个存储单元编址为01H,第256个存储单元编址为FFH(也可以写成0FFH)。
图1 存储器结构
要对256字节存储器的每个存储单元进行读写,需要8根地址线和8根数据线,先送8位地址选中某个存储单元,再根据读控制或写控制,将选中的存储单元的8位数据从8根数据线送出,或通过8根数据线将8位数据存入选中的存储单元中。以图1 存储器结构为例,当地址总线A7~A0将8位地址00011111(1FH)送入存储器时,会选中内部编址为1FH的存储单元,这时再从读控制线送入一个读控制信号,1FH 存储单元中的数据00010111从8根数据总线D7~D0送出。
MCS-51单片机采用哈佛结构,即程序空间(ROM)和数据空间(RAM)分开编址,它们有各自的地址空间,互不重叠,因此ROM和RAM可以有相同的地址编码。为区分同一地址的变量是来自ROM还是RAM,要求编程时定义的任何变量都必须以一定的存储器类型的方式定位在MCS-51单片机的某一存储区中。使用C51编程时,只需用关键字就可定义变量的存储器类型。C51变量的存储器类型见下表所示。
从物理地址空间看,MCS-51单片机的存储器有4个地址空间,分别是4KB的片内ROM、64KB的片外ROM、256B的片内RAM、64KB的片外RAM。
ROM(程序存储器)存放程序、表格和始终要保留的常数,相当于计算机系统的硬盘;
8051单片机内部有4KB的程序存储器,如果内部程序存储器不够用(或无内部程序存储器),可以外接程序存储器。8051单片机最大可以外接容量为64KB的程序存储器(ROM),它与片内4KB程序存储器统一编址。
当单片机的
端接高电平(接电源正极)时,片内、片外程序存储器都可以使用,片内4KB 程序存储器的编址为0000H~0FFFH,片外64KB 程序存储器的编址为1000H~FFFFH,片外程序存储器低4KB存储空间无法使用,如下图所示。
当单片机的
端接低电平(接地)时,只能使用片外程序存储器,其编址为0000H~FFFFH,片内4KB程序存储器无法使用,如下图所示。
(1)无论是使用片内ROM还是使用片外ROM,程序的起始地址都是从ROM的0000H单元开始的。
(2)尽管单片机可以同时具备内、外ROM,但是在一般情况下,都需要通过
的设定来选择其一。
(3)如果
=1,当程序超过片内ROM容量(4KB:0000H~0FFFH)时,单片机就会自动转向片外ROM,并且从1000H单元开始执行程序(无法使用片外ROM的低4KB空间)。目前,一般单片机的片内ROM容量都够,因此,很少或没必要扩展片外ROM。
ROM空间一般可以根据用户需要任意安排使用,但ROM中的某些地址被中断程序的入口地址占用,具体如下表所示。
版权声明:本文为CSDN博主「胡豆24」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。版权归原作者所有,如有侵权,请联系删除。