单片机存储器结构
单片机内部存储结构分析
我们来思考一个问题 , 当我们在编程器中把一条指令写进单片要内部 , 然后取下单片机 , 单片机就可以执行这条指令 , 那么这条指令一定保存在单片机的某个地方 , 并且这个地方在单片机掉电后依然可以保持这条指令不会丢失 , 这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READONLY MEMORY) 。为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM , 称为FLASHROM , 刚才我们是用的编程器 , 在特殊的条件下由外部设备对ROM进行写的操作 , 在单片机正常工作条件下 , 只能从那面读 , 不能把数据写进去 , 所以我们还是把它称为ROM 。
数的本质和物理现象:我们知道 , 计算机能进行数学运算 , 这可令我们非常的难以理解 , 计算机吗 , 我们虽不了解它的组成 , 但它总只是一些电子元器件 , 怎么能进行数学运算呢?我们做数学题如37+45是这样做的 , 先在纸上写37 , 然后在下面写45 , 然后大脑运算 , 最后写出结果 , 运算的原材料:37、45和结果:82都是写在纸上的 , 计算机中又是放在什么地方呢?为了解决这个问题 , 先让我们做一个实验:这里有一盏灯 , 我们知道灯要么亮 , 要么不亮 , 就有两种状态 , 我们能用’0’和’1’来代替这两种状态 , 规定亮为’1’ , 不亮为’0’ 。现在放上两盏灯 , 一共有几种状态呢?我们列表来看一下:
请大家自已写上3盏灯的情况000 001 010 011 100 101 110 111
我们来看 , 这个000 , 001 , 101不就是我们学过的的二进制数吗?本来 , 灯的亮和灭只是一种物理现象 , 可当我们把它们按一按的次序排更好后 , 灯的亮和灭就代表了数字了 。让我们再抽象一步 , 灯为什么会亮呢?看电路1 , 是因为输出电路输出高电平 , 给灯通了电 。因此 , 灯亮和灭就能用电路的输出是高电平还是低电平来替代了 。这样 , 数字就和电平的高、低联系上了 。(请想一下 , 我们还看到过什么样的类似的例程呢?(海军之)灯语、旗语 , 电报 , 甚至红、绿灯)
什么是位:
通过上面的实验我们已经知道:一盏灯亮或者说一根线的电平的高低 , 能代表两种状态:0和1 。实际上这就是一个二进制位 , 因此我们就把一根线称之为一“位” , 用BIT表示 。
什么是字节:
一根线能表于0和1 , 两根线能表达00 , 01 , 10 , 11四种状态 , 也就是能表于0到3 , 而三根能表达0-7 , 计算机中常常用8根线放在一起 , 同时计数 , 就能表过到0-255一共256种状态 。这8根线或者8位就称之为一个字节(BYTE) 。不要问我为什么是8根而不是其它数 , 因为我也不知道 。(计算机世界是一本人造的世界 , 不是自然界 , 很多事情你无法问为什么 , 只能说:它是一种规定 , 大家在以后的学习过程中也要注意这个问题)
存储器的工作原理:
1、存储器构造
存储器就是用来存放数据的地方 。它是利用电平的高低来存放数据的 , 也就是说 , 它存放的实际上是电平的高、低 , 而不是我们所习惯认为的1234这样的数字 , 这样 , 我们的一个谜团就解开了 , 计算机也没什么神秘的吗 。
图2
图3
让我们看图2 。单片机里面都有这样的存储器 , 这是一个存储器的示意图:一个存储器就象一个个的小抽屉 , 一个小抽屉里有八个小格子 , 每个小格子就是用来存放“电荷”的 , 电荷通过与它相连的电线传进来或释放掉 , 至于电荷在小格子里是怎样存的 , 就不用我们操心了 , 你能把电线想象成水管 , 小格子里的电荷就象是水 , 那就好理解了 。存储器中的每个小抽屉就是一个放数据的地方 , 我们称之为一个“单元” 。
有了这么一个构造 , 我们就能开始存放数据了 , 想要放进一个数据12 , 也就是00001100 , 我们只要把第二号和第三号小格子里存满电荷 , 而其它小格子里的电荷给放掉就行了(看图3) 。可是问题出来了 , 看图2 , 一个存储器有好多单元 , 线是并联的 , 在放入电荷的时候 , 会将电荷放入所有的单元中 , 而释放电荷的时候 , 会把每个单元中的电荷都放掉 , 这样的话 , 不管存储器有多少个单元 , 都只能放同一个数 , 这当然不是我们所希望的 , 因此 , 要在结构上稍作变化 , 看图2 , 在每个单元上有个控制线 , 我想要把数据放进哪个单元 , 就给一个信号这个单元的控制线 , 这个控制线就把开关打开 , 这样电荷就能自由流动了 , 而其它单元控制线上没有信号 , 所以开关不打开 , 不会受到影响 , 这样 , 只要控制不一样单元的控制线 , 就能向各单元写入不一样的数据了 , 同样 , 如果要某个单元中取数据 , 也只要打开对应的控制开关就行了 。
2、存储器译码
那么 , 我们怎样来控制各个单元的控制线呢?这个还不简单 , 把每个单元元的控制线都引到集成电路的外面不就行了吗?事情可没那么简单 , 一片27512存储器中有65536个单元 , 把每根线都引出来 , 这个集成电路就得有6万多个脚?不行 , 怎么办?要想法减少线的数量 。我们有一种办法称这为译码 , 简单介绍一下:一根线能代表2种状态 , 2根线能代表4种状态 , 3根线能代表几种 , 256种状态又需要几根线代表?8种 , 8根线 , 所以65536种状态我们只需要16根线就能代表了 。
(图4)
3、存储器的选片及总线的概念
至此 , 译码的问题解决了 , 让我们再来关注另外一个问题 。送入每个单元的八根线是用从什么地方来的呢?它就是从计算机上接过来的 , 一般地 , 这八根线除了接一个存储器之外 , 还要接其它的器件 , 如图4所示 。这样问题就出来了 , 这八根线既然不是存储器和计算机之间专用的 , 如果总是将某个单元接在这八根线上 , 就不好了 , 比如这个存储器单元中的数值是0FFH另一个存储器的单元是00H , 那么这根线到底是处于高电平 , 还是低电平?岂非要打架看谁历害了?所以我们要让它们分离 。办法当然很简单 , 当外面的线接到集成电路的管脚进来后 , 不直接接到各单元去 , 中间再加一组开关(参考图4)就行了 。平时我们让开关关闭着 , 如果确实是要向这个存储器中写入数据 , 或要从存储器中读出数据 , 再让开关接通就行了 。这组开关由三根引线选择:读控制端、写控制端和片选端 。要将数据写入片中 , 先选中该片 , 然后发出写信号 , 开关就合上了 , 并将传过来的数据(电荷)写入片中 。如果要读 , 先选中该片 , 然后发出读信号 , 开关合上 , 数据就被送出去了 。注意图4 , 读和写信号同时还接入到另一个存储器 , 但是由于片选端不一样 , 所以虽有读或写信号 , 但没有片选信号 , 所以另一个存储器不会“误会”而开门 , 造成冲突 。那么会不一样时选中两片芯片呢?只要是设计好的系统就不会 , 因为它是由计算控制的 , 而不是我们人来控制的 , 如果真的出现同时出现选中两片的情况 , 那就是电路出了故障了 , 这不在我们的讨论之列 。
从上面的介绍中我们已经看到 , 用来传递数据的八根线并不是专用的 , 而是很多器件大家共用的 , 所以我们称之为数据总线 , 总线英文名为BUS , 总即公交车道 , 谁者能走 。而十六根地址线也是连在一起的 , 称之为地址总线 。
半导体存储器的分类
按功能能分为只读和随机存取存储器两大类 。所谓只读 , 从字面上理解就是只能从里面读 , 不能写进去 , 它类似于我们的书本 , 发到我们手回之后 , 我们只能读里面的内容 , 不能随意更改书本上的内容 。只读存储器的英文缩写为ROM(READONLY MEMORY)
所谓随机存取存储器 , 即随时能改写 , 也能读出里面的数据 , 它类似于我们的黑板 , 我能随时写东西上去 , 也能用黑板擦擦掉重写 。随机存储器的英文缩写为RAM(RandomAccess Memory)这两种存储器的英文缩写一定要记牢 。
注意:所谓的只读和随机存取都是指在正常工作情况下而言 , 也就是在使用这块存储器的时候 , 而不是指制造这块芯片的时候 。不然 , 只读存储器中的数据是怎么来的呢?其实这个道理也很好理解 , 书本拿到我们手里是不能改了 , 能当它还是原材料——白纸的时候 , 当然能由印刷厂印上去了 。
顺便解释一下其它几个常见的概念 。
PROM , 称之为可编程存储器 。这就象我们的练习本 , 买来的时候是空白的 , 能写东西上去 , 可一旦写上去 , 就擦不掉了 , 所以它只能用写一次 , 要是写错了 , 就报销了 。(现在已经被淘汰)
EPROM , 称之为紫外线擦除的可编程只读存储器 。它里面的内容写上去之后 , 如果觉得不满意 , 能用一种特殊的办法去掉后重写 , 这就是用紫外线照射 , 紫外线就象“消字灵” , 能把字去掉 , 然后再重写 。当然消的次数多了 , 也就不灵光了 , 所以这种芯片能擦除的次数也是有限的——几百次吧 。(现在已经被淘汰)
EEPROM , 也叫E2PROM称之为电可擦可编程只读存储器 , 它和EEPROM类似 , 写上去的东西也能擦掉重写 , 但它要方便一些 , 不需要光照了 , 只要用电就能擦除或者重新改写数据 , 所以就方便许多 , 而且寿命也很长(几万到几十万次不等) 。
FLASH , 称之为闪速存储器 , 属于EEPROM的改进产品 , 它的最大特点是必须按块(Block)擦除(每个区块的大小不定 , 不同厂家的产品有不同的规格) , 而EEPROM则可以一次只擦除一个字节(Byte) 。FLASH现在常用于大容量存储,比如u盘
【单片机存储器结构】再次强调 , 这里的所有的写都不是指在正常工作条件下 。不管是PROM还是EPROM , 它们的写都要有特殊的条件 , 一般我们用一种称之为“编程器”的设备来做这项工作 , 一旦把它装到它的工作位置 , 就不能随便改写了 。
推荐阅读
- 单片机小程序
- 你知道电子产品整机结构设计吗?它有什么要点?
- 单片机数据传递类指令
- 马桶内部结构是怎样的
- 单片机寻址方式与指令系统
- 单片机的特殊功能寄存器
- 51单片机_AT89C52D/A转换
- 51单片机_AT89C52A/D转换
- 家用燃气灶的组成部分及其结构、功能
- 单片机的分类有哪些?pic单片机和51单片机的区别