本文参考《爱上单片机》这本书。
程序无影无形,硬件实实在在,是存储器沟通了两者。
对于程序来水存储器是一个空盒子,可以放入数据和语句,最基础的由1和0的二进制数组成。对于硬件来说存储器是一些开关组,每一个开关都有2个状态—“开”和“关”。1对应着“开”,0对应着“关”,程序世界与物质实体之间找到了沟通的管道。
存储器是由一大堆开关组组成的,每一个开关都有“开”和“关”2种状态,每一个开关对应程序中位的概念,每8个开关为一组,组成程序中字节的概念。(每一个字节8位,1位有0和1两种可能。)
单片机中的编译就是将C语言程序转换成二进制的由0和1组成的文件。程序的下载过程就是将这些二进制数按顺序放到单片机的存储器中,改变开关的状态。如果数值为1则接通开关,如果数值为0则断开开关。单片机里有非常复杂的集成电路,存储器中的开关是连接在电路上的,开关的状态会改变电路的状态,最终实现了对硬件的控制。
单片机的存储器有许许多多个这样的开关,单片机的设计者根据不同的应用,把这些开关分开,并按一定顺序排列起来。最后再给每一个或每一组开关编上号,以便需要的时候很容易找到。在程序的世界里这些存储器的编号被叫做地址。不同型号的单片机中,存储器开关的个数也不相同,但它们的地址都是从0x00地址开始编号的。
一般的单片机内部有2种类型的存储器,一种是数据存储器(RAM),另一种是程序存储器(ROM)。我们用ISP下载线的程序存储在ROM空间里;在单片机运行的时候,程序中的变量储存在RAM空间里。
从表中你会发现所有的存储器都存在了速度、易失性和成本之间的博弈。
随机存取存储器(random access memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。
只读存储器(英语:Read-Only Memory,简称:ROM)。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定 ,断电后所存数据也不会改变;其结构较简单,读出较方便,因而常用于存储各种固定程序和数据。
外储存器是指除计算机内存及CPU缓存以外的储存器,此类储存器一般断电后仍然能保存数据。常见的外存储器有硬盘、软盘、光盘、U盘等。
我们有了RAM和ROM存储器,也有了地址编号,下面的问题就是怎么找到我们需要的存储器单元。解决这个问题就需要涉及到寻址的概念。寻址顾名思义就是寻找地址嘛,我们用十六进制数为所有的存储器编好地址名。
寻址的原理,单片机程序的二进制代码下载时按程序运行的先后顺序从0x00地址开始向后写入ROM,有一个指针叫作PC指针,好像手表的指针一样,是专门用来指向需要运行的程序的地址,PC指针指到哪,就把哪里的二进制数读出来,然后按照对比结果操作内部的复杂的电路来完成任务。
一个存储器包含许多存储单元,每个存储单元可存放一个字节。每个存储单元的位置都有一个编号,即地址,一般用十六进制表示。
要知道每一个地址都代表一个字节,即8个位。每一个字节都可以表示边路0x00到0xFF的256个数值,也可以表示8个0、1的开关。
8051单片机内部结构示意图:
上面是通过单片机的例子讲述存储器的作用