593465218 发表于 2013-1-4 22:21:10

如何巧妙使用ram

本帖最后由 593465218 于 2013-1-5 00:00 编辑

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

STM32_Study 发表于 2013-1-4 22:24:19

EPPROM

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

593465218 发表于 2013-1-4 22:37:06

这里聊的是技术,不是金钱。

283868130 发表于 2013-1-4 23:01:28

RAM重上电后还能读出原来的数据
LZ威武,神人啊

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

MZ85818 发表于 2013-1-4 23:23:32

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

283868130 发表于 2013-1-4 23:27:54

LZ的思路需要在加一个外部中断,nmi的那种
该外部中断检测外部电源供电,同时适当将mcu电容加大
检测到外部中断才将累加数放入eeprom,否者eeprom可能活不过一个星期

little_Monkey 发表于 2013-1-4 23:28:06

这种也好意思说“给大家出个难题”?现在的学生哥是怎么了?

Put_down 发表于 2013-1-4 23:53:58

当年有个芯片,X5045,就是针对你的应用的。

magiczero 发表于 2013-1-4 23:56:44

你的标题不合格,赶快改改,不然会被扣分的

593465218 发表于 2013-1-4 23:58:14

本帖最后由 593465218 于 2013-1-4 23:59 编辑

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

593465218 发表于 2013-1-5 00:01:23

magiczero 发表于 2013-1-4 23:56 static/image/common/back.gif
你的标题不合格,赶快改改,不然会被扣分的

这样合格不

593465218 发表于 2013-1-5 00:03:22

明天我把电路图和单片机型号上传,让大家看看,本人感觉经典的设计,电路图我在画

magiczero 发表于 2013-1-5 00:07:56

本帖最后由 magiczero 于 2013-1-5 00:09 编辑

593465218 发表于 2013-1-4 23:58 static/image/common/back.gif
本人不是学生,还有。我开始的时候听说过ram暂存数据。没玩过,直到前天看见别人做的产品,才知道他的思路 ...


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

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

magiczero 发表于 2013-1-5 00:17:08

本帖最后由 magiczero 于 2013-1-5 00:19 编辑

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

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

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

zhonggp 发表于 2013-1-5 01:11:15

RAM:不是掉电不能记忆的类型吗?这个跟你初始化还是不初始化有什么关系吗?掉电后数据清0只是为了保证数据不会出现未知数据啊.

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

不懂

ourdemo 发表于 2013-1-5 01:36:13

因为有电池,外部掉电了,MCU可以不reset,转到用电池,保存数据然后sleep, 外部有电唤醒MCU将数据+1。。。
重点是有电池好办事。

wmm20031015 发表于 2013-1-5 08:21:25

有电池作为后备电源,休眠时使用是可以实现的,一个外部中断检测到外部电源为低电平时,单片机进入休眠,高电平唤醒,处理好电源和复位电路,

ST_ATMEL_NXP 发表于 2013-1-5 08:28:26

本帖最后由 ST_ATMEL_NXP 于 2013-1-5 08:59 编辑

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

cumtgao 发表于 2013-1-5 10:32:44

用电池 或者外扩E2

593465218 发表于 2013-1-5 23:21:21

magiczero 发表于 2013-1-5 00:07 static/image/common/back.gif
这个对,直接修改 STARTUP.A51 这个文件就可以了

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

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

593465218 发表于 2013-1-5 23:22:25

ST_ATMEL_NXP 发表于 2013-1-5 08:28 static/image/common/back.gif
我记得以前在学校学51的时候。8051的复位引脚可以接电池。掉电后,电池只给SRAM供电。保持里面的数据。但是 ...

我用的是plc921f。

593465218 发表于 2013-1-5 23:23:43

cumtgao 发表于 2013-1-5 10:32 static/image/common/back.gif
用电池 或者外扩E2

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

593465218 发表于 2013-1-5 23:28:34

zhonggp 发表于 2013-1-5 01:11 static/image/common/back.gif
RAM:不是掉电不能记忆的类型吗?这个跟你初始化还是不初始化有什么关系吗?掉电后数据清0只是为了保证数据不 ...

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

wangguanfu 发表于 2013-1-5 23:29:03

部供电直接到vcc,然后用一个发光二极管把外部把电池和外部电路的vcc隔开。然后就是电池和单片机vcc管教连接了一个1m的电阻
然后用一个发光二极管把外部把电池和外部电路的vcc隔开???电池和单片机vcc管教连接了一个1m的电阻?? 看不懂 不合乎逻辑

593465218 发表于 2013-1-5 23:38:46

wangguanfu 发表于 2013-1-5 23:29 static/image/common/back.gif
部供电直接到vcc,然后用一个发光二极管把外部把电池和外部电路的vcc隔开。然后就是电池和单片机vcc管教连 ...

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

jackiezeng 发表于 2013-1-6 09:01:05

修改启动文件,复位不初始化RAM

maimaige 发表于 2013-1-6 09:32:59

修改启动文件,好,那个电池能够只是掉电的时候,只给ram供电吗

伍师傅32 发表于 2013-1-6 09:58:24

电池接1M的电阻后给MCU供电?是这样就能保持RAM中的数据不丢失么?外部电源掉电之后,MCU是什么状态呢?感觉挺有意思的,学生娃,求指教!

ckvlhf 发表于 2013-1-6 10:18:07

接1M的电阻,呵呵,就算5V直接给1M电阻供电都只有5uA电流,你还是先看看51单片机的功耗吧。

Etual 发表于 2013-1-6 10:59:21

内部SRAM在电压没有掉到一定的情况下数据还保留。

xyz543 发表于 2013-1-6 11:47:07

现在使用 keil 2 版本的人真的不多了,目前都到了 Keil 4 了,想必楼主也是用了十年以上的 Keil 了.. {:lol:}

dexidz 发表于 2013-1-6 12:36:44

xyz543 发表于 2013-1-6 11:47 static/image/common/back.gif
现在使用 keil 2 版本的人真的不多了,目前都到了 Keil 4 了,想必楼主也是用了十年以上的 Keil 了.....

{:lol:} {:lol:} {:lol:} {:lol:} {:lol:} {:lol:} 确是好笑

wicy001 发表于 2013-1-6 14:48:59

“利用51定时器,产生一个自加数,这个自加数   保存在内部RAM里面,掉电后自己数保存在ram里面。上点后读出自加数的值,继续累加。用c完成编写。”
“我开始的时候听说过ram暂存数据。没玩过,直到前天看见别人做的产品,才知道他的思路的。”
-----------------
别人的思路是怎样的?楼主先讲讲吧。

error_dan 发表于 2013-1-6 15:02:05

有NRAM这种东西的存在啊...

wicy001 发表于 2013-1-6 15:46:24

本帖最后由 wicy001 于 2013-1-6 15:48 编辑

593465218 发表于 2013-1-5 23:28 static/image/common/back.gif
RAM掉电别说类型记不住,数据也记不住。我所说的掉电是外部电路掉电。电池的作用是为了让raM里面的数据可 ...

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


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

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


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

Put_down 发表于 2013-1-6 17:11:30

真是楼猪!你这“掉电”害得我考虑到一边去了。

wangguanfu 发表于 2013-1-6 17:24:16

一塌糊涂的电路

learner123 发表于 2013-1-6 18:27:10

n年前有个什么单片机技术合集的书曾经讨论过,已经是很古老的技术了,具体自己看吧。
基本没有价值,无论技巧还是成本都不如搞个430或者其他低功耗的单片机
页: [1]
查看完整版本: 如何巧妙使用ram