找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 35044|回复: 9
打印 上一主题 下一主题
收起左侧

51单片机中的ROM和RAM分别是什么?

  [复制链接]
跳转到指定楼层
楼主
ID:342442 发表于 2018-10-13 08:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
众所周知,51 内部的存储器分为数据存储器 RAM 和程序存储器 ROM。以 AT89c51 为例,其中有 128 字节随机存储器(又称数据储存器 RAM)和 4K 字节的只读存 储器(又称程序存储器 ROM)。
先说说这个 4K 字节的程序存储器或者说只读存储器,我们写的程序经过编译器 编译成机器码都是存在这个区域,所以称为程序存储器;但单片机上电执行的时 候,此区域内的数据只能读取而不能写入,他的只读存储器的名称从这而来。
89c51 的 ROM 采用的是 FPEROM(Flash Programmable and Erasable Read Only
Memory),具体工艺我也不太清楚,号称可以擦写 1000 次,也就是说你每天写
30 次,一个多月就报废了。
在说说 128 字节的随机存储器或者说数据存储器,程序运行过程中,一些中间变 量存储在这个地方,也能从这个地方获取需要运算的值,所以称之为随机存储器, 也称为数据存储器。个人觉得相当于计算机的内存,掉电丢失。
看看 MSC-51 指令就知道,所有的数据移动指令都是对 RAM 区操作的,就是因为 无法改变 ROM。
51 内部的存储器在物理上可分为 4 个区域:片内 ROM,片外 ROM,片内 RAM 和片外 RAM。从逻辑上可分为三个区域,64KB 片内外统一编址的程序存储器(ROM),
128 字节或 256 字节的片内数据存储器(RAM),64KB 片外数据存储器(RAM)。

对应的 keil 编译器关键字为:
data    :    片内数据存储器(RAM)低 128 字节(51 系列片内只有 128 字节,52 系列有 256 字节)
bdata:    可位寻址的片内 RAM 以上两种类型可以快速的存取数据,常用来放临时性的传递变量或使用频率较高 的变量。
idata :    片内数据存储器(RAM)256 字节
xdata:    片外数据存储器 64KB
pdata:    片外数据存储器低 256 字节


code:    64KB 程序存储器(如果变量定义在这个空间,后面就不能修改了,如果 有语句改变它的值,编译器就会报错。)

此外,C51 还有三种存储模式(这是在开发环境里面设置的):SMALL, COMPACT,
LARGE

SMALL 模式下,如果不做特别说明,参数及局部变量默认为 data 型,放在片内 RAM128 字节内,访问迅速。由于内部的 RAM 有限,如果变量过多,会导致频 繁的使用寄存器,而使代码变的冗长。此时栈也在片内的 RAM,栈长很关键, 因为栈长依赖于不同函数的嵌套层数。

COMPACT:不做特别说明,参数及局部变量默认为 pdata,栈空间在内部 RAM。

LARGE:参数及局部变量默认为 xdata,使用 DPTR 来寻址。访问效率低,此外这 种数据指针不能对称操作。

全局变量会根据定义的类型或者存储的模式分配在相应的存储区内,有固定的地 址,如果全局变量过多则会导致占用太多内存,处理速度变慢。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶3 踩
回复

使用道具 举报

沙发
ID:546698 发表于 2019-6-1 20:09 | 只看该作者
学习了,谢谢         
回复

使用道具 举报

板凳
ID:370231 发表于 2019-9-6 10:12 | 只看该作者
打个比方吧!假如要搞个什么活动,有两块地方,一个叫ROM.一个叫RAM,和一个老大叫cpu。其中人们规定rom这个地方的所有东西你老大cpu都不能改动它,里面放着活动的方案,也就相当于你编写的程序,cpu必须要按照这个方案去主持搞这个活动。这个地方允许放一些其它东西,〔单片机中也就是数据!〕。当这个活动开始的时候,老大cpu就会到rom这里复制里面的全部内容〔有特别标明的除外,一般是不常用的数据〕放到RAM里面运行。当需要用要标明的不常用数据时,老大根据数据的编号,也就是地址,去读回来那个数,再继续运行!当你要终止这次活动时,ram里面的东西,就全部扔掉,不保留。下次再需要的时候,再去rom这个地方复制回来,从新开始运行。
寄存器,要说功能的话,每个寄存器都有它的功能!建议你搜索一下单片机寄存器功能,有很多的出来。他们介绍的都很好!在这里我就不说了打字累啊。呵呵
回复

使用道具 举报

地板
ID:451441 发表于 2019-9-15 10:33 | 只看该作者
谢谢指点,对于我这种完全自学的人收获很多
回复

使用道具 举报

5#
ID:259738 发表于 2020-3-23 16:51 | 只看该作者
写c51的特别需要去记这个
回复

使用道具 举报

6#
ID:538599 发表于 2020-5-6 20:27 | 只看该作者
感谢提醒,的确讲解非常到位。略微补充一点,早年间的ROM都是出厂不可再写的,后来由于技术进步所以可以反复擦写
回复

使用道具 举报

7#
ID:826371 发表于 2020-11-4 12:07 来自手机 | 只看该作者
谢谢很有帮助
回复

使用道具 举报

8#
ID:738987 发表于 2020-11-4 12:31 | 只看该作者
ROM就是类似于硬盘,掉电不丢失,所以用来存运行的程序,和一些重要的数据,RAM就是常说的内存,其存储的东西掉电以后就会丢失,用来存放程序运行的中间结果。
回复

使用道具 举报

9#
ID:1118754 发表于 2024-4-28 20:56 | 只看该作者
rom相当于硬盘存储,而ram是内存
回复

使用道具 举报

10#
ID:1119196 发表于 2024-5-3 22:53 | 只看该作者
感谢指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表