Arduino读写EEPROM(一)

根据官方说明,各版本的Arduino都自带一个小容量的EEPROM,在各型号的arduino控制器上的AVR芯片均带有EEPROM,也有外接的EEPROM芯片,常见arduino控制器的EEPROM大小:
Arduino UNO、Arduino duemilanove-m328、Zduino m328均使用ATmega328芯片,EEPROM都为1K
Arduino duemilanove-m168的EEPROM为512bytes
Arduino 2560的EEPROM为4K

 

这里为了简单体验读写EEPROM的操作过程,先向前十个字节里分别写入250~241序列数值,然后断电,再上电,再通过读取函数,将前十个字节的内容读取出来,比较是不是当初断电前保存进去的数据即可。

代码文件:sketch_eeprom.ino

/**********************************************************************
针对Arduino UNO 版本
自带1K 大小的EEPROM空间,实现断电可保存数据


 *********************************************************************/

#include       //引入EEPROM的类库,方便读写操作

int addr = 0;
int state = 1;
/***********************************************************************

初始化过程

 **********************************************************************/
void setup()
{
    Serial.begin(9600);
    if(state)
    {
        Serial.println("read data...");
        read(0);
        
    }else
    {
        Serial.println("write data...");
        int val = 250;
        for(int i = 0;i<10;i++)
        {
            write(val--);
        }
        
    }
    
  

}

void loop()
{
    
}
/****************************************************************
保存数据,按字节保存
为了方便测试,这里只向前十个字节里写入250~241数值

 ***************************************************************/

void write(int value)
{
    EEPROM.write(addr,value);
    Serial.print(addr);
    Serial.print(":\t");
    Serial.print(value,DEC);
    
    Serial.print("\n");
    
    
    
    addr = addr + 1;
    if(addr == 512)
    {
        addr = 0;
        delay(100);
    }
    
}

/******************************************************************

读取数据,一个字节一个字节地读取
为了方便测试,这里只读取前十个字节的内容

 *****************************************************************/

void read(int addr)
{
    int value = 0;
    
    for(int i = 0;i<10;i++)
    {
        value = EEPROM.read(addr++);
        Serial.print("addr:");
        Serial.print(addr-1);
        Serial.print("=");
        
        Serial.println(value,DEC);
        Serial.println("");
        
    }
    
}
void cleardata()
{
    for(int i=0;i<512;i++)
    {
        EEPROM.write(i,0);
    }
    digitalWrite(13,HIGH);

    Serial.println("clear end");
    
}



注:这里将变量state作为切换读取和写入的开关量,当state为0时,upload至arduino板后将在初始化阶段写入十个数值,当state为1时,upload至arduino板后在初始化阶段将把EEPROM中前十个字节内容读取出来,通过串口输出。

写数据时串口输出内容:

 

读数据时,串口输出内容:

 

注:清除EEPROM的数据即对各字节均赋值0即可,详见上述代码中的cleardata()函数。

你可能感兴趣的:(arduino,单片机)