使用EEPROM断电保存数据

举报
二哈侠 发表于 2024/04/19 22:36:12 2024/04/19
【摘要】 EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器--一种掉电后数据不丢失的存储芯片。简而言之就是你想断电后arduino还要保存一些参数,就使用EEPROM吧。在各型号的arduino控制器上的AVR芯片均带有EEPROM,也有外接的EEPROM芯片,常见arduino控制器的EEPROM大小:Ardu

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()

{

}



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。