对于51单片机而言,其片载的内部存储器分为RAM和存储程序的ROM 。
我们以AT89c51为例,它作为经典51单片机,片载128字节RAM和4K字节ROM,注意这里古典ROM和现代计算机ROM的差别 。
我们把ROM和RAM分开讨论 。
1. ROM
什么是4K字节的ROM(只读存储器)呢?
有过基本51单片机开发经历的童鞋应该记得,我们使用C语言编写单片机程序后,会点击开发环境(比如Keil)的编译(compile)按钮进行编译 。
此时Keil这个IDE(集成开发环境)就把C语言“译”成相应的二进制机器码 。
然后我们通过烧录工具,把二进制机器码“灌输”至单片机 。
灌输进单片机的程序去哪了?
没错,就储存在ROM中 。所以ROM又被称为程序存储器 。
对于古董单片机而言,其上电运行时,ROM内的数据只能被读取而不能实时写入,即“只读” 。
因为,最初的单片机限于闪存技术,在程序运行时,ROM存储器只可以被读取,无法在线写入 。但是,它可以被反复离线擦除并写入新程序 。
所以,只读存储器ROM的Read-only Memory的名称就从这儿来的 。
现代单片机的ROM一般采用FLASH闪存技术,不仅可以离线通过烧录器写入,也可以在线通过自身的代码来修改FLASH数据,达到类似“硬盘”的疗效 。
比如,单片机算出了1+2+3等于6 。
如果我们需要关机重启后单片机依然保留6这个结果,那么我们可以事先在程序中添加一段代码,让单片机把结果存入FLASH的某一存储单元中 。
然后,即使断电重新开机,该数据也不会消失,下次再从这个地址读取,数据即是上次算好的结果,6 。
我们以典型的ST单片机为例,其FLASH擦写次数高达一万次,而且该技术现在并不是什么高端货,一两块钱的单片机都能做到 。
文章插图
ST某款数据手册
一两块钱的电脑自带硬盘,是不是很划算,很好用!
2. RAM
再说说128字节的RAM,RAM又被称为数据存储器 。
单片机上电之后是怎么运行的呢?我们把关键节点简要地勾勒一下 。
首先,单片机上电后,复位电路触发单片机复位,使单片机所有状态处于复位状态,所有寄存器处于默认值,使得一切都在预料之中 。
然后单片机按照设计时的“安排”,开始加载ROM中相应位置的数据,这些数据就是“程序” 。
比如指令MOV 20H, A;
就是将累加寄存器A中的值送入RAM的20H这个“坑”中,20H就是这个“坑”的地址 。
20H代表十六进制的20,等于十进制的32,即:编号32的坑 。
128字节的RAM就有128个“坑”,分别编号00H到7FH(0到127)每个“坑”可以存一个8位的二进制数,即“坑”的大小是一个字节 。
这样一条一条指令执行下去,有的MOV,有的JUMP,单片机就开始“有条不紊地”运行了 。
在单片机运行过程中,一些中间变量就暂存在这些“坑”中 。
当然,程序也能从这些“坑”中读取已存的数据,所以它又被称为数据存储器,它里面只暂存了“纯粹的数据”,没有程序(虽然程序也是二进制数) 。
它的写入读出速度都比FLASH快,但掉电即丢失,相当于计算机的内存 。
我们观察MSC-51指令集就知道,只有对RAM区操作得数据移动指令,没有对ROM的操作指令 。
现代单片机对片载Flash的擦写,往往是通过对寄存器的操作来实现的 。
3. 指令
那我们能否自行发明指令呢?
不行!
开发单片机的公司的工程师在设计单片机芯片时,不仅要设计CPU,还要同时设计内部存储和内部总线等“外设”,这样单片机才能运作,才叫“单片机”,而不仅仅是一个CPU 。
每一个指令在这个小系统中到底产生什么效果,是这些工程师已经设计好的 。
在没有C语言的年代,你想做具体的数学计算,就得把计算过程分解为一条一条的指令,然后通过指令来实现计算任务 。
我们在使用芯片时,不能超过芯片公司规定的指令范围,去随意发明指令 。
因为硬件是已经设计好的,它是死的,它只能响应芯片公司规定的这些指令 。
这也就是为什么我们在开发时,需要datasheet和数据手册,因为芯片的指令是人做出来的,所以我们在开发时,需要遵守开发者的规定 。
【ram和rom是什么意思 单片机rom和ram的区别在哪】这就是传统51中内部ROM和RAM的根本区别 。
- 表格中求和怎么弄 求和最快的方法和技巧
- 金龙鱼寿命多长 可以和什么鱼混养
- 路虎刹车油和防冻液多久换
- 电脑开机黑屏怎么解决步骤 电脑开机黑屏的原因和维修方法
- windows家庭版和专业版区别是什么 win10专业版与家庭版哪个好
- 美版和国行的区别是什么 美版的手机和国行哪个好
- ajax原理是什么 ajax工作原理和流程
- 马鲛鱼和鲅鱼的区别及价格 鲅鱼和马鲛鱼哪个好吃
- 五谷杂粮窝头制作全过程 窝头怎么做即软和又好吃
- 空气棉和纯棉哪个好 空气棉是什么面料