首页
时事
民生
政务
教育
文化
科技
财富
体娱
健康
情感
更多
旅行
百科
职场
楼市
企业
乐活
学术
汽车
时尚
创业
美食
幽默
美体
文摘
单片机中的RAM vs ROM
科技
2024-11-26 16:36
山东
其实,单片机就是个小计算机。大计算机少不了的数据存储系统,单片机一样有,而且往往和CPU集成在一起,显得更加小巧灵活。
直到90年代初,国内容易得到的单片机是8031:不带存储器的芯片,要想工作,必须外加RAM和ROM,于是单片机成了3片机......
而现在不同了,无论大的,还是小的,又是51,又是AVR,又是STC,还有什么430、PIC……都各说各的好,可谁也不敢说“我不要存储器”。
单片机的数据存储手段
1 程序存储器ROM
程序存储器里面存放的是单片机的灵魂:工作程序。
小的可能只有1KB,最多只能装1024条8位数据,因为实际指令还有许多2字节,3字节指令,所以它还装不下1024条指令。大的也有128KB的。这些8位数据,要么在工厂里做模子光刻进去,要么一次性的烧写进去。
业余或开发,最多也就是用编程器这么一个特殊工具,把调试成功的机器码装载进去,或者像AVR单片机那样自己花几块钱做一条下载线,把电脑里这些东西灌进去(或许是AVR最吸引人之处)。
它一旦进驻电脑的程序存储器中,除了借助上述装置便不能自由改写,在单片机运行时,只是从其中读出指令或固定的数据,所以给程序存储器一个“只读存储器”的别名,简写为ROM,包括用编程器写紫外线擦除内容的EPROM、用电擦除的EEPROM和现在新兴的FLASH RO
M。
相关文章:
EEPROM和Flash这样讲,我早就懂了
。
一次性写入的ROM,仅用于电路和程序固定的批量产品中,实际工作起来,都是一样的。
为了定位ROM中的数据,每个8位存储单元都有一个固定的“地址”,通常用16进制数表示。例如,对于一个所谓4K的ROM,地址从0000H到0FFFH(即从0000,0001...4095),单片机运行时从哪个地址取数据,完全由程序本身决定,并不要我们干预。
记住,给单片机一通电,它经过一个短暂的复位过程,立即转向ROM的最低地址0000H,在这里面放置的往往是一条“跳转”指令,它从这里一步跳到另一个地址:程序的真正起始地址,例如51机的0080H。
ROM是程序存储器,除了指令外,还包括运行程序必须的某些固定数据,例如:数据表。假如,我们要求在单片机的接口上输出00H到FFH(255)按正弦半波变化的数值,每秒10000次。如果硬要它按照公式一个个计算,对于它来说未免力不从心。可是我们可以把预先计算好的数值存入ROM中,到时候直接取出不是好多了?
又如一个重要的应用:大家一定见过不少单片机的东西上面都有数码显示,那些个数字其实就是用单片机的口线控制数码管的字段电极电位。这些字形也是存放在ROM中的字模表,各个字模和0-9的数字(机器内当然是0000-0101二进制数)对应起来。常见的共阳极7段数码管,必须在阳极加正电,7个阴极都是地电位,才能显示数字"8",数字8对应的显示字码值是二进制数“10000000“(那个1对应的是小数点,高电位不让它显示)。
2 数据存储器RAM
这是个可以随时存取数据的一块存储器,也就是可以读(取)也可以写(存)的存储器,简称RAM。
现在的单片机里面使用的RAM,属于静态RAM或SRAM,这个和电脑用的内存条有所不同。只要你把数据写入SRAM后,不断电或者不清除掉,这个数据就一直保存在那里。电脑用的是动态RAM,要不断给它加刷新脉冲才能保存数据。
因为单片机处理的信息量比电脑小很多,所以它带的RAM也比较少:从完全不带、带128、256、...1K、2K,到4K,比ROM少多了。
因为实际上RAM只是作为数据临时存放的地方,除非进行图像处理需要存放大量的数据外。一般对于执行较简单任务的单片机,有这么多也够用,如果实在不够用也只能采取外加SRAM如6116、6264等等来扩展。
为了对RAM单元存取8位二进制数,当然也得和ROM一样用“地址”来标示它的具体位置。假如某单片机有1K(1024)RAM,它的地址也是从0000到1024,或16进制数的0000H到03FFH。可见,和ROM的地址是一样的。
3 会不会混淆不清?
答案是不会的,因为读ROM是由单片机的程序指针或转移指令或查表指令进行,而这些指令是不会进入RAM区的;读写RAM是另外的数据传送指令,也不会进入ROM区。
这点也是和电脑不同之处,后者程序和数据都在内存条里面,地址不同,如果窜位了就会造成不可预见后果。单片机的这种存储器结构也称为哈佛结构。
RAM在单片机里的用途
RAM在单片机里的用途,主要是存放临时数据。
例如用单片机测温,每秒测1次,显示1分钟的平均值(1分钟更新一次):
我们先通过传感器、放大电路、A/D转换,把温度这个模拟量转变为成比例的二进制数,然后每秒钟1次把数字量通过输入口顺序存入到单片机的RAM中,然后对他们进行两两求和再平均的计算,最后的数值显示出来,然后把这60个存储单元统统写0清除旧数据,下次又是如此循环进行。
总结
另外,在单片机里面还有若干寄存器,数量不多但是作用很大,除了暂存数据,还可以交换、加工、传递等等,以及随时记录单片机当前处于什么状态,输入输出口也是作为特殊功能的寄存器存在,具体各有不同,就不是随便说说可以搞清楚的,要看有关书籍了。
http://mp.weixin.qq.com/s?__biz=MzI1MDg4OTMwMw==&mid=2247525838&idx=3&sn=ca19d8d371ccaa7832617a107ed55888
STM32嵌入式开发
STM32嵌入式,PCB电路图,C语言,单片机,Matlab,Linux
最新文章
嵌入式可靠性设计的编程要点
整理的比较全面的C语言入门笔记!
MOS管栅极串联电阻作用分享
固件升级防变砖的方法
单片机硬件电路的设计方案和心得
放电齿为什么能抑制吸收浪涌电流
嵌入式裸机环形队列与RTOS消息队列
嵌入式面试问题,你为什么离开上一家?
学习嵌入式绕不开的技术点
无刷直流电机驱动方式
嵌入式实用的跟踪调试组件
一个毕业生的嵌入式开发之路
单片机中的RAM vs ROM
嵌入式开发中的C语言编译器
PC如何布局才更加合理?看完给震惊住了
看懂程序运行机制,从helloworld说起
19个常用的5V转3.3V技巧
万字 | 攻克C语言结构体!
详解STM32在线IAP升级
总结单片机电路设计要点
认识地弹(地噪声)
硬件工程师VS软件工程师
STM32嵌入式开发中的RTOS,你用过哪些?
巧用数字万用表
经典的结构体和联合体共用实例
差模放大电路特点与抑制零漂原理
嵌入式代码经常产生bug的原因
如果模拟电路设计分九段,你是几段?
19个常用的5V转3.3V技巧
MOS管驱动电路有几种,看完就明白了
十年经验的大神谈如何学STM32嵌入式开发
设计降压转换电路?工作原理+设计步骤
假如C与C++是两把菜刀
分析稳压二极管常见应用电路
EMC防护中的滤波电容
详解嵌入式开发中的I2C总线
STM32代码远程升级之IAP编程
三相电对地电压
STM32单片机开发中的RTOS
RS485通信的收发控制
开关如何变成的CPU?
详解CAN总线
STM32代码的启动过程
STM32如何分配原理图IO
开关电源里特殊电子元件的类型和用途总结
EEPROM和Flash这样讲,我早就懂了
如何解密单片机内程序?
电路设计-硬件工程师画PCB时要了解的设计建议
梳理STM32芯片的内部架构
STM32如何分配原理图IO
分类
时事
民生
政务
教育
文化
科技
财富
体娱
健康
情感
旅行
百科
职场
楼市
企业
乐活
学术
汽车
时尚
创业
美食
幽默
美体
文摘
原创标签
时事
社会
财经
军事
教育
体育
科技
汽车
科学
房产
搞笑
综艺
明星
音乐
动漫
游戏
时尚
健康
旅游
美食
生活
摄影
宠物
职场
育儿
情感
小说
曲艺
文化
历史
三农
文学
娱乐
电影
视频
图片
新闻
宗教
电视剧
纪录片
广告创意
壁纸头像
心灵鸡汤
星座命理
教育培训
艺术文化
金融财经
健康医疗
美妆时尚
餐饮美食
母婴育儿
社会新闻
工业农业
时事政治
星座占卜
幽默笑话
独立短篇
连载作品
文化历史
科技互联网
发布位置
广东
北京
山东
江苏
河南
浙江
山西
福建
河北
上海
四川
陕西
湖南
安徽
湖北
内蒙古
江西
云南
广西
甘肃
辽宁
黑龙江
贵州
新疆
重庆
吉林
天津
海南
青海
宁夏
西藏
香港
澳门
台湾
美国
加拿大
澳大利亚
日本
新加坡
英国
西班牙
新西兰
韩国
泰国
法国
德国
意大利
缅甸
菲律宾
马来西亚
越南
荷兰
柬埔寨
俄罗斯
巴西
智利
卢森堡
芬兰
瑞典
比利时
瑞士
土耳其
斐济
挪威
朝鲜
尼日利亚
阿根廷
匈牙利
爱尔兰
印度
老挝
葡萄牙
乌克兰
印度尼西亚
哈萨克斯坦
塔吉克斯坦
希腊
南非
蒙古
奥地利
肯尼亚
加纳
丹麦
津巴布韦
埃及
坦桑尼亚
捷克
阿联酋
安哥拉