ARDUINO的主控芯片都自带EEPROM ,不过型号不同,存储的空间大小也不同。如ATmega328P的EEPROM空间为1K,而ATmega2560的EEPROM空间为4K。
Atmega328P 内部构造图
我们可以把EEPROM理解为ARDUINO的\公众小硬盘\公众,按照须要当前的状态值保存在这个\"大众小硬盘\"大众中,每次上电后就先从\公众小硬盘\"大众中读取状态值,然后根据当前状态值处理程序就可以了。
EEPROM在ARDUINO中操作也很大略,ARDUINO供应了相应的库函数供我们利用,比较常用的为下面两个函数:
EEPROM.read(地址);//读取一个字节的EEPROM。返回值为BYTE类型(8位),从未被写入的位置读出值为0xFF;
EEPROM.write(地址,值);//写一个字节到EEPROM中 ,值为BYTE类型(8位)。
来看下面的代码实例:
实例代码
把稳,这里的类型是BYTE,只有8位,也便是说,每次写入的最大值是255,如果要操作的数据大于255,比如1000,该做如何处理呢?常日的做法是,把1000分为高低两个字节来存储;代码实现如下:
int val = 1000;//将要存储的变量
int hByte = (val&0xFF00)>>8;//取变量的高8位,将数据整体右移8位
int lByte = val&0x00FF;//取变量的低8位
EEPROM.write(0, lByte ); //存储低8位
EEPROM.write(1, hByte ); //存储高8位
读取代码
int val ;
int hByte = EEPROM.read(1);
int lByte = EEPROM.read(0);
val =(hByte<<8)+lByte ;