请教一个菜鸟问题:51单片机用内部数据存储器存储数据时重新上电数据会不会丢失
如题.假如我要实现这样的功能,程序运行时产生的某个操作数,我要把他存储下来,以便在下次启动(上电)时取出来使用,请问是不是直接把他存储到内部数据存储器就行了?如果不行,请...
如题.假如我要实现这样的功能,程序运行时产生的某个操作数,我要把他存储下来,以便在下次启动(上电)时取出来使用,请问是不是直接把他存储到内部数据存储器就行了?如果不行,请问用什么方法存储?要接外部存储器?
哎,实在搞不清.希望各位帮忙一下... 展开
哎,实在搞不清.希望各位帮忙一下... 展开
2个回答
展开全部
直接存储是不行的,单片机本身的RAM是掉电就没有的。一般使用EEPROM,常用的有24c01等,采用I2C协议进行读写数据,怎么使用这类芯片的程序网上搜一下能搜出几吨来。可以自己搜索一下,由于你使用的51单片机,可以直接用IO口来模拟I2C协议,很简单的。
需要注意的一点就是,要注意E2P芯片的寿命(一般是读写100万次,足够了)。
存储数据的时候,可以对操作数和存储的数据进行比较,不相等则存储,比如:
if (ReadI2c()!=data)
{ SaveI2c();}
这样可以增加使用寿命,比有些每隔1秒钟进行存储的蔽饥会好多了。
碰到要存储的是时间的时候,并且是每秒钟存的话,由于寿命的罩纯原因,则要另外想办法,常用的有:
1.在掉电瞬间的时候去存储数据,这种方法要硬件上给予检测电路来告知现在掉电了,然后程序就对时间进行存储,这种方法的弊端是“必须要有检测电路”。
2.考虑到上述的问题,可以开辟多块空间来存储“时间”,每次上电依次使用不同的空间,但是为了要有“宏闷返使用哪一块的判断条件”,所以必须再多一个空间存储“判断”:每次程序开始,将“判断++”,然后根据其来决定使用哪一块的“时间空间”。
/*************************************************************/
希望能有帮助,上述是对掉电记忆来讲比较不错的的方法了。
需要注意的一点就是,要注意E2P芯片的寿命(一般是读写100万次,足够了)。
存储数据的时候,可以对操作数和存储的数据进行比较,不相等则存储,比如:
if (ReadI2c()!=data)
{ SaveI2c();}
这样可以增加使用寿命,比有些每隔1秒钟进行存储的蔽饥会好多了。
碰到要存储的是时间的时候,并且是每秒钟存的话,由于寿命的罩纯原因,则要另外想办法,常用的有:
1.在掉电瞬间的时候去存储数据,这种方法要硬件上给予检测电路来告知现在掉电了,然后程序就对时间进行存储,这种方法的弊端是“必须要有检测电路”。
2.考虑到上述的问题,可以开辟多块空间来存储“时间”,每次上电依次使用不同的空间,但是为了要有“宏闷返使用哪一块的判断条件”,所以必须再多一个空间存储“判断”:每次程序开始,将“判断++”,然后根据其来决定使用哪一块的“时间空间”。
/*************************************************************/
希望能有帮助,上述是对掉电记忆来讲比较不错的的方法了。
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种由意法半导体(STMicroelectronics)公司设计和生产的单片机系列,广泛用于嵌入式系统、物联网(IoT)设备、汽车电子、工业自动化等领域。STM32具有以下优点:1. 低功耗:STM32单片机通常具有较低的功耗,...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询