51单片机如何存储采集的数据?51单片机的程序存储器有片内和片外两部分。
而且无论片内程序存储器还是片外程序存储器,它们的地址都是共享的。如果片内为4kROM,则地址为0x0000-0x0FFF,0x1000-0xFFFF的地址空间为外部ROM。外部ROM的0x0000-0x0FFF这部分可以用吗?这个取决于单片机EA引脚的电平值。当EA=1时,这部分内部ROM被使用,这部分外部ROM被浪费。当EA=0时,使用外部ROM,内部ROM被浪费。用汇编的MOVC指令从代码段中读取数据,单片机会根据MOVC指令、
51单片机如何存储数据?
没有不知道要保存哪种数据,断电保护还是缓存?如果是为了保存不受掉电保护的缓存数据,可以使用单片机内部的RAM空间,包括20H~7FH的直接寻址区,不被SFR占用的80H~FFH的间接寻址区,也可以使用STC单片机内部的扩展RAM。
如果是保存掉电保护的数据,可以在单片机外面挂上flash或者
请教单片机掉电后,如何快速的保存数据问题?
;关于这个问题,我认为我们应该从以下几个方面着手:尽量使用内部闪存存储数据。内部flash读写速度快,可靠性高。
如果使用外部flash或eeprom进行存储,flash通常是一个spi接口。考虑到电磁干扰和MCU的响应速度,即使使用MCU的硬件SPI模块进行通信,SPI的最大时钟也在1MHz左右,发送一个字节的数据大约需要10us。不考虑擦除闪存的时间,存储100字节的数据大约需要5ms。如果考虑可靠性,需要阅读和验证。
Eeprom一般采用IIC接口,类似SPI接口,高速IIC存储100字节数据至少需要5ms。
FLASH的特点是写数据只能从1重写到0,从0重写到1需要擦除整个页面,或者整个扇区,或者整个块。
以STM32F051为例。一个页面是1kb,一个块是64kByte。擦除一页大约需要20毫秒。在整个擦除过程中,整个MCU被挂起,即不执行任何操作。和FLASH的写操作比较快,大约1字节需要1us。
需要掉电检测电路,掉电检测需要检测给MCU供电的LDO或DC-DC的前级电压。
比如MCU采用12V-3.3VLDO供电,需要检测12V的电压来决定是否断电。
通过电阻分压12V的电压,然后连接到MCU的A/D检测口,判断是否断电。
MCU供电的LDO或DC-DC的前级并联足够的电容,保证电容的供电能保证MCU能写数据。
电容器的尺寸可通过以下步骤确定:
评估断电时前一电压提供的工作电流。一旦单片机检测到掉电,就需要切断耗电输出,比如控制继电器输出的I/O口。比如20mA。
确认LDO的最低输入电压,如5.3。
确认判断断电的电压,如10V,确认断电开始与LDO最低输入电压的电压差,如4.7V
确认写入所有数据所需的时间,例如20ms。
根据公式计算所需电容,C=I*T/U=20mA*20mS/4.7V=85uF。可以选择100uF的电容。
一旦MCU检测到掉电,需要切断耗电输出,比如控制继电器输出的I/O口需要立即断开。
在正常操作中,预先准备一个存储空间并将其擦除到0xFF中。
检测到掉电后,可以直接写入数据,无需擦除FLASH内容,可以节省大量时间。