历史上的今天
今天是:2025年12月14日(星期日)
2022年12月14日 | 51单片机——存储器(一)
2022-12-14 来源:zhihu
1.存储器概述
存储器是许多存储单元的集合,存储器单元实际上是时序逻辑电路(锁存器)的一种,按单元号顺序排列。每个单元由若干二进制位构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似。按存储器的使用类型可分为只读存储器(ROM)和随机存取存储器(RAM)。
1.1 存储单位
位(bit):它是计算机中最小的数据单位。由于计算机采用二进制数,所以1位二进制数称作1bit,例如101011为6bit。
字节(Byte,单位简写为B):8位二进制数称为一个字节,1B=8bit。
字(Word):两个字节构成一个字,即2Byte=1Word。
在单片机中还有一个常用术语:字长。所谓字长是指单片机一次能处理的二进制数的位数。51单片机一次能处理8位二进制数,所以51单片机的字长为8位。
1.2 存储器编址
如下图所示是一个容量为256字节的存储器,内部有256个存储单元,每个存储单元可以存放8位二进制数,为了存取数据方便,需要对每个存储单元进行编号,也即对存储单元编址,编址采用二进制数,对256个存储单元全部编址至少要用到8位二进制数,第1个存储单元编址为00000000,编写程序时为了方便,一般用十六进制数表示,二进制数00000000用十六进制表示就是00H,H表示十六制数,第二个存储单元编址为01H,第256个存储单元编址为FFH(也可以写成0FFH)。

图1 存储器结构
1.3存储器数据读写说明
要对256字节存储器的每个存储单元进行读写,需要8根地址线和8根数据线,先送8位地址选中某个存储单元,再根据读控制或写控制,将选中的存储单元的8位数据从8根数据线送出,或通过8根数据线将8位数据存入选中的存储单元中。以图1 存储器结构为例,当地址总线A7~A0将8位地址00011111(1FH)送入存储器时,会选中内部编址为1FH的存储单元,这时再从读控制线送入一个读控制信号,1FH 存储单元中的数据00010111从8根数据总线D7~D0送出。
1.4 存储器的地址空间说明
MCS-51单片机采用哈佛结构,即程序空间(ROM)和数据空间(RAM)分开编址,它们有各自的地址空间,互不重叠,因此ROM和RAM可以有相同的地址编码。为区分同一地址的变量是来自ROM还是RAM,要求编程时定义的任何变量都必须以一定的存储器类型的方式定位在MCS-51单片机的某一存储区中。使用C51编程时,只需用关键字就可定义变量的存储器类型。C51变量的存储器类型见下表所示。

从物理地址空间看,MCS-51单片机的存储器有4个地址空间,分别是4KB的片内ROM、64KB的片外ROM、256B的片内RAM、64KB的片外RAM。
2.ROM(程序存储器)
ROM(程序存储器)存放程序、表格和始终要保留的常数,相当于计算机系统的硬盘;
2.1 片内外ROM(程序存储器)
8051单片机内部有4KB的程序存储器,如果内部程序存储器不够用(或无内部程序存储器),可以外接程序存储器。8051单片机最大可以外接容量为64KB的程序存储器(ROM),它与片内4KB程序存储器统一编址。
当单片机的
![]()
端接高电平(接电源正极)时,片内、片外程序存储器都可以使用,片内4KB 程序存储器的编址为0000H~0FFFH,片外64KB 程序存储器的编址为1000H~FFFFH,片外程序存储器低4KB存储空间无法使用,如下图所示。

当单片机的

端接低电平(接地)时,只能使用片外程序存储器,其编址为0000H~FFFFH,片内4KB程序存储器无法使用,如下图所示。

2.2 片内外ROM(程序存储器)说明
(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版权协议,转载请附上原文出处链接及本声明。版权归原作者所有,如有侵权,请联系删除。
上一篇:51单片机学习-按键控制LED
下一篇:51单片机——存储器(二)
史海拾趣
|
刚装的ev4.0 运行程序提示 Cannot Execute Program 今天上午刚安装的evc4.0 安装过程是 ActiveSync->eVC4->eVC4 sp4->smartphone SDK->crosoft Pocket PC 2003 SDK->Windows Mobile 2003 Second Edition Emulator Images for Pocket PC - CHS; &nbs ...… 查看全部问答> |
|
最近需要开发一个扫描仪在wince下的驱动程序,但是没有一点头绪,希望做过的兄弟帮忙给点提示。 我用的板子是2440+wince5.0,扫描仪还没确定。 要做这样一个驱动需要做些什么准备?怎么开始?如果有具体流程就更好了, ...… 查看全部问答> |
|
各位好!请问如何能将一个wince的程序最小化呢?发现showwindow(SW_MINIMIZE)并不起作用。和windowmobile差别很大呀!谢谢大家… 查看全部问答> |
|
没有错误,AD转换是500Hz,转换出来才200Hz左右,错在哪里啊,感觉是while(AD0INT==0); 浪费时间了,高手来帮帮忙 //----------------------------------------------------------------------------- void PORTb_Init (void) { // &nbs ...… 查看全部问答> |
|
新手求教,关于学习驱动开发! 对于驱动开发本人是菜鸟一个,由于工作需要,要求必须掌握驱动程序开发,主要是针对windows内核的(不涉及到硬件的驱动)。由于本人对这方面的知识掌握得很少,所以在这里请教各位驱动前辈我应该从哪里入手,该掌握 ...… 查看全部问答> |
|
我现在想调试串口程序,在串口上外接一个设备时,会不停有个对话提示:USB CONNE未联接,请问这是问题大概是串口的哪个程序有问题啊? 我想用WINCE5.0编译生成修改后的NK文件。请问要怎样编译,才最快呀?… 查看全部问答> |
|
关于CCS安装的问题,小女子急!没分了,真抱歉啊,5555~ CCS 2.2版本,同一个软件我在公司的机子上安装没有出现任何问题,在自己的机子上安装,装了好几次都出现同样的问题,每次open一个新的工程,就出现no build tools were found.两台机子都同是xp的系统. 请高手指点,拜托了!… 查看全部问答> |




