搜索
bottom↓
回复: 39

如何巧妙使用ram

[复制链接]

出0入0汤圆

发表于 2013-1-4 22:21:10 | 显示全部楼层 |阅读模式
本帖最后由 593465218 于 2013-1-5 00:00 编辑

给大家出个题,到现在我还没有解决,
环境
    51内核单片机,keil2。电池
内容
利用51定时器,产生一个自加数,这个自加数     保存在内部RAM里面,掉电后自己数保存在ram里面。上点后读出自加数的值,继续累加。用c完成编写。

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-1-4 22:24:19 | 显示全部楼层
EPPROM

给大家出难题,是要给好处费的

出0入0汤圆

 楼主| 发表于 2013-1-4 22:37:06 | 显示全部楼层
这里聊的是技术,不是金钱。

出0入0汤圆

发表于 2013-1-4 23:01:28 | 显示全部楼层
RAM重上电后还能读出原来的数据
LZ威武,神人啊

真有必要的话,外扩铁电吧

出0入0汤圆

发表于 2013-1-4 23:23:32 | 显示全部楼层
定时器+中断+N(自加数)+累加器+EEPROM
定时器溢出、触发内部中断、自加数进累加器累加、写入eeprom;循环
重新上电后先读出eeprom里的值,进累加器,然后再循环。
我只会一点汇编,C不会,思路应该就是这样的。
另外自加数不用保存的,直接写在程序里。

出0入0汤圆

发表于 2013-1-4 23:27:54 | 显示全部楼层
LZ的思路需要在加一个外部中断,nmi的那种
该外部中断检测外部电源供电,同时适当将mcu电容加大
检测到外部中断才将累加数放入eeprom,否者eeprom可能活不过一个星期

出0入0汤圆

发表于 2013-1-4 23:28:06 | 显示全部楼层
这种也好意思说“给大家出个难题”?现在的学生哥是怎么了?

出0入8汤圆

发表于 2013-1-4 23:53:58 | 显示全部楼层
当年有个芯片,X5045,就是针对你的应用的。

出0入0汤圆

发表于 2013-1-4 23:56:44 | 显示全部楼层
你的标题不合格,赶快改改,不然会被扣分的

出0入0汤圆

 楼主| 发表于 2013-1-4 23:58:14 | 显示全部楼层
本帖最后由 593465218 于 2013-1-4 23:59 编辑

本人不是学生,还有。我开始的时候听说过ram暂存数据。没玩过,直到前天看见别人做的产品,才知道他的思路的。本人能力有限,还有经过3天的摸索,现在还没实现,现在有两个难题,第一,单片机初始化自动清零ram,不过这个问题我有修改的思路了,可以该51的启动文件,第二,就是避免ram存储的数据被其他数据覆盖。这个还没想出办法

出0入0汤圆

 楼主| 发表于 2013-1-5 00:01:23 | 显示全部楼层
magiczero 发表于 2013-1-4 23:56
你的标题不合格,赶快改改,不然会被扣分的

这样合格不

出0入0汤圆

 楼主| 发表于 2013-1-5 00:03:22 | 显示全部楼层
明天我把电路图和单片机型号上传,让大家看看,本人感觉经典的设计,电路图我在画

出0入0汤圆

发表于 2013-1-5 00:07:56 | 显示全部楼层
本帖最后由 magiczero 于 2013-1-5 00:09 编辑
593465218 发表于 2013-1-4 23:58
本人不是学生,还有。我开始的时候听说过ram暂存数据。没玩过,直到前天看见别人做的产品,才知道他的思路 ...


第一,单片机初始化自动清零ram,不过这个问题我有修改的思路了,可以该51的启动文件

这个对,直接修改 STARTUP.A51 这个文件就可以了

第二,就是避免ram存储的数据被其他数据覆盖。这个还没想出办法
第二,就是避免ram存储的数据被其他数据覆盖。这个还没想出办法 [/quote]
这个很简单,使用指定位置的全局变量就OK了

出0入0汤圆

发表于 2013-1-5 00:17:08 | 显示全部楼层
本帖最后由 magiczero 于 2013-1-5 00:19 编辑

unsigned char  Flag _at_ 0x7f;                //把 Flag 变量指定在Ram的0x7f的位置

更具体的还可以指定使用的存储器类型,比如:对使用Keil的51来说可以有 data, idata,pdata,xdata 的类型,这里能明确决定数据到底是使用哪一个存储空间

unsigned char xdata Flag _at_ 0x03ff;                //把 Flag 变量指定在外部Ram的0x03ff的位置

出0入0汤圆

发表于 2013-1-5 01:11:15 | 显示全部楼层
RAM:不是掉电不能记忆的类型吗?这个跟你初始化还是不初始化有什么关系吗?掉电后数据清0只是为了保证数据不会出现未知数据啊.

你这个电池放在这里什么意思啊,掉电又是什么意思,51一点电都没有了,还是说51电源掉电了但是还有一个电池给他持续供电.

不懂

出0入0汤圆

发表于 2013-1-5 01:36:13 | 显示全部楼层
因为有电池,外部掉电了,MCU可以不reset,转到用电池,保存数据然后sleep, 外部有电唤醒MCU将数据+1。。。
重点是有电池好办事。

出0入0汤圆

发表于 2013-1-5 08:21:25 | 显示全部楼层
有电池作为后备电源,休眠时使用是可以实现的,一个外部中断检测到外部电源为低电平时,单片机进入休眠,高电平唤醒,处理好电源和复位电路,

出0入0汤圆

发表于 2013-1-5 08:28:26 | 显示全部楼层
本帖最后由 ST_ATMEL_NXP 于 2013-1-5 08:59 编辑

我记得以前在学校学51的时候。8051的复位引脚可以接电池。掉电后,电池只给SRAM供电。保持里面的数据。但是AT89的单片机没有这个功能了。

出0入0汤圆

发表于 2013-1-5 10:32:44 | 显示全部楼层
用电池 或者外扩E2

出0入0汤圆

 楼主| 发表于 2013-1-5 23:21:21 | 显示全部楼层
magiczero 发表于 2013-1-5 00:07
这个对,直接修改 STARTUP.A51 这个文件就可以了

第二,就是避免ram存储的数据被其他数据覆盖。这个还 ...

今天一天都在赶路,出差啦。电路图没来的急画,其实很简单电路,外部供电直接到vcc,然后用一个发光二极管把外部把电池和外部电路的vcc隔开。然后就是电池和单片机vcc管教连接了一个1m的电阻。

出0入0汤圆

 楼主| 发表于 2013-1-5 23:22:25 | 显示全部楼层
ST_ATMEL_NXP 发表于 2013-1-5 08:28
我记得以前在学校学51的时候。8051的复位引脚可以接电池。掉电后,电池只给SRAM供电。保持里面的数据。但是 ...

我用的是plc921f。

出0入0汤圆

 楼主| 发表于 2013-1-5 23:23:43 | 显示全部楼层
cumtgao 发表于 2013-1-5 10:32
用电池 或者外扩E2

别人做的没用E2,用E2就不好玩了

出0入0汤圆

 楼主| 发表于 2013-1-5 23:28:34 | 显示全部楼层
zhonggp 发表于 2013-1-5 01:11
RAM:不是掉电不能记忆的类型吗?这个跟你初始化还是不初始化有什么关系吗?掉电后数据清0只是为了保证数据不 ...

RAM掉电别说类型记不住,数据也记不住。我所说的掉电是外部电路掉电。电池的作用是为了让raM里面的数据可以维持而已。ram里面的数据确实和c51启动文件有关,c51启动文件中包含了xdata从0x0000到ffff的初始话。初始化的值全部为0,如果想用ram保存数据。必须躲开初始化。

出0入0汤圆

发表于 2013-1-5 23:29:03 | 显示全部楼层
部供电直接到vcc,然后用一个发光二极管把外部把电池和外部电路的vcc隔开。然后就是电池和单片机vcc管教连接了一个1m的电阻
然后用一个发光二极管把外部把电池和外部电路的vcc隔开???电池和单片机vcc管教连接了一个1m的电阻?? 看不懂 不合乎逻辑

出0入0汤圆

 楼主| 发表于 2013-1-5 23:38:46 | 显示全部楼层
wangguanfu 发表于 2013-1-5 23:29
部供电直接到vcc,然后用一个发光二极管把外部把电池和外部电路的vcc隔开。然后就是电池和单片机vcc管教连 ...


这是我的意思,不说了。睡觉去了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-6 09:01:05 | 显示全部楼层
修改启动文件,复位不初始化RAM

出0入0汤圆

发表于 2013-1-6 09:32:59 | 显示全部楼层
修改启动文件,好,那个电池能够只是掉电的时候,只给ram供电吗

出0入0汤圆

发表于 2013-1-6 09:58:24 | 显示全部楼层
电池接1M的电阻后给MCU供电?是这样就能保持RAM中的数据不丢失么?外部电源掉电之后,MCU是什么状态呢?感觉挺有意思的,学生娃,求指教!

出0入0汤圆

发表于 2013-1-6 10:18:07 | 显示全部楼层
接1M的电阻,呵呵,就算5V直接给1M电阻供电都只有5uA电流,你还是先看看51单片机的功耗吧。

出0入0汤圆

发表于 2013-1-6 10:59:21 | 显示全部楼层
内部SRAM在电压没有掉到一定的情况下数据还保留。

出0入34汤圆

发表于 2013-1-6 11:47:07 | 显示全部楼层
现在使用 keil 2 版本的人真的不多了,目前都到了 Keil 4 了,想必楼主也是用了十年以上的 Keil 了..

出0入0汤圆

发表于 2013-1-6 12:36:44 | 显示全部楼层
xyz543 发表于 2013-1-6 11:47
现在使用 keil 2 版本的人真的不多了,目前都到了 Keil 4 了,想必楼主也是用了十年以上的 Keil 了..  ...

确是好笑

出0入17汤圆

发表于 2013-1-6 14:48:59 | 显示全部楼层
“利用51定时器,产生一个自加数,这个自加数     保存在内部RAM里面,掉电后自己数保存在ram里面。上点后读出自加数的值,继续累加。用c完成编写。”
“我开始的时候听说过ram暂存数据。没玩过,直到前天看见别人做的产品,才知道他的思路的。”

-----------------
别人的思路是怎样的?楼主先讲讲吧。

出0入0汤圆

发表于 2013-1-6 15:02:05 | 显示全部楼层
有NRAM这种东西的存在啊...

出0入17汤圆

发表于 2013-1-6 15:46:24 | 显示全部楼层
本帖最后由 wicy001 于 2013-1-6 15:48 编辑
593465218 发表于 2013-1-5 23:28
RAM掉电别说类型记不住,数据也记不住。我所说的掉电是外部电路掉电。电池的作用是为了让raM里面的数据可 ...


再仔细看了一遍,我想我明白楼主的意思了。


1.楼主说了,电池的作用就是让RAM的数据可以维持, 也就是实际上单片机是一直供电的,对单片机来说,根本没有掉电这一说,无非是电池或电容继续供电而已。

2.楼主所说的功能与单片机热启动的原理一样 ----电源保持,单片机复位,此时RAM仍然是复位前的数据,修改启动文件,使RAM中的某个字段不被清零(正常的启动文件,RAM区全部清零),这样复位后,这个字段可以继续使用。


楼主位的说明都把大家引跑题了,至少我还没发现断电还能保持数据的RAM,真有的话,也就不叫RAM了。

出0入8汤圆

发表于 2013-1-6 17:11:30 | 显示全部楼层
真是楼猪!  你这“掉电”害得我考虑到一边去了。

出0入0汤圆

发表于 2013-1-6 17:24:16 | 显示全部楼层
一塌糊涂的电路

出0入0汤圆

发表于 2013-1-6 18:27:10 | 显示全部楼层
n年前有个什么单片机技术合集的书曾经讨论过,已经是很古老的技术了,具体自己看吧。
基本没有价值,无论技巧还是成本都不如搞个430或者其他低功耗的单片机
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 11:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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