写点什么

使用 EEPROM 断电保存数据

作者:二哈侠
  • 2024-04-19
    四川
  • 本文字数:1657 字

    阅读完需:约 5 分钟

使用EEPROM断电保存数据

EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。简而言之就是你想断电后 arduino 还要保存一些参数,就使用 EEPROM 吧。在各型号的 arduino 控制器上的 AVR 芯片均带有 EEPROM,也有外接的 EEPROM 芯片,常见 arduino 控制器的 EEPROM 大小:Arduino UNO、Arduino duemilanove-m328、Zduino m328 均使用 ATmega328 芯片,EEPROM 都为 1KArduino duemilanove-m168 的 EEPROM 为 512bytesArduino 2560 的 EEPROM 为 4K 下面我们介绍 arduino 自带的 EEPROM 使用方法,arduino 的库已经为我们准备好了 EEPROM 类库,我们要使用得先调用 EEPROM.h,然后使用 write 和 read 方法,即可操作 EEPROM。

另:下面的官方例子由于写成较早,所以讲 EEPROM 的大小都定为了 512 字节,实际使用中,大家可参照上面所说的 EEPROM 大小,自行更改。

1.写入

选择 File>Examples>EEPROM>eeprom_write



/* * EEPROM Write * * Stores values read from analog input 0 into the EEPROM. * These values will stay in the EEPROM when the board is * turned off and may be retrieved later by another sketch. */
#include <EEPROM.h>
// EEPROM 的当前地址,即你将要写入的地址,这里就是从0开始写 int addr = 0;
void setup() { }
void loop() { //模拟值读出后是一个0-1024的值,但每字节的大小为0-255,所以这里将值除以4再存储到val int val = analogRead(0) / 4; // write the value to the appropriate byte of the EEPROM. // these values will remain there when the board is // turned off. EEPROM.write(addr, val); // advance to the next address. there are 512 bytes in // the EEPROM, so go back to 0 when we hit 512. addr = addr + 1; if (addr == 512) addr = 0; delay(100); }

复制代码

2.读取

选择 File>Examples>EEPROM>eeprom_read



/* * EEPROM Read * * Reads the value of each byte of the EEPROM and prints it * to the computer. * This example code is in the public domain. */
#include <EEPROM.h>
// start reading from the first byte (address 0) of the EEPROM int address = 0; byte value;
void setup() { // initialize serial and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for Leonardo only } }
void loop() { // read a byte from the current address of the EEPROM value = EEPROM.read(address); Serial.print(address); Serial.print("\t"); Serial.print(value, DEC); Serial.println(); // advance to the next address of the EEPROM address = address + 1; // there are only 512 bytes of EEPROM, from 0 to 511, so if we're // on address 512, wrap around to address 0 if (address == 512) address = 0; delay(500); }

复制代码

3.清除

选择 File>Examples>EEPROM>eeprom_clear 清除 EEPROM 的内容,其实就是把 EEPROM 中每一个字节写入 0,因为只用清一次零,所以整个程序都在 setup 部分完成。



/* * EEPROM Clear * * Sets all of the bytes of the EEPROM to 0. * This example code is in the public domain.
*/ #include <EEPROM.h>
void setup() { // 让EEPROM的512字节内容全部清零 for (int i = 0; i < 512; i++) EEPROM.write(i, 0); // 清零工作完成后,将L灯点亮,提示EEPROM清零完成 digitalWrite(13, HIGH); }
void loop() { }

复制代码


发布于: 刚刚阅读数: 7
用户头像

二哈侠

关注

凡事预则立,不预则废! 2022-06-01 加入

某公司芯片AE工程师,嵌入式开发工程师,InfoQ签约作者,阿里云专家博主,华为云·云享专家,51CTO专家博主,腾讯云社区优秀共创官。

评论

发布
暂无评论
使用EEPROM断电保存数据_EEPROM_二哈侠_InfoQ写作社区