PIC XC8 EEPROM操作

要做一个报警功能的东东,要求可以通过遥控来改变遥控内容。由于对系统的稳定性要求很高,所以用了看门狗。

可是看门狗复位会引起所有寄存器重置,恢复到默认状态。遥控要改变的内容也被复位了,所以只能借助EEPROM来存储报警标志了。

我用的是MPLAB X IDE +XC8 编译器,XC8在语法上跟PICC有点不一样

EEPROM操作有两种方法,在该存储空间中定义命名变量,或者使用块访问程序来读取或写入EEPROM。

 

1. EEPROM 对象

__eeprom限定符可用于指示应将变量定位到EEPROM中。

例  __eeprom int serialNos[4]  

将int 类型数组serialNos[]放到EEPROM中,注意,在XC8中int长度是16bit,而在其他MCU中,比如PC,int数值大小跟系统有关。

 

2. EEPROM初始化

对于那些支持对其EEPROM数据区域进行外部编程的器件,可以使用__EEPROM_DATA()宏将初始值放入可用于编程的HEX文件。

例:#include <xc.h>

__EEPROM_DATA(0,1,2,3,4,5,6,7);

该宏有8个参数,代表8个数据值,每个值为1BYTE。未使用的值用指定为零,否则编译器会报错。

每次使用时,__EEPROM_DATA将从EEPROM地址零开始写入,自动递增8。

若想使用更多的数据,可通过多次调用该宏来定义所需数量的EEPROM数据。最好将该宏放在所有函数定义之外。

该宏不能在运行时写入EEPROM里,而是编程烧写的时候装入EEPROM中的。

使用__EEPROMSIZE来表示可用的EEPROM字节数。

 

3 . 访问函数

可以调用库函数来读取和写入EEPROM。

void eeprom_write(unsigned char addr, unsigned char value);
unsigned char eeprom_read(unsigned char addr);

使用这些函数时,会自动测试,并等待对EEPROM的所有并发写操作完成,再去执行所需的操作。

 

4.  访问宏

宏版本跟访问函数不同,宏用法如下。

EEPROM_READ(address)

EEPROM_WRITE(address, value)

EEPROM_READ宏会返回读取的字节。

在低档和中档器件中,如PIC8 PIC16 PIC18系列中,宏函数读取不会等EEPROM写操作完成,使用时应查询标志。

再使用宏版本访问时,最好将中断关闭。

例 : xc.h

while (WR)

  continue;

value=EEPROM_READ(address);

 

posted @ 2015-03-11 10:56  anonmous  阅读(2789)  评论(0编辑  收藏  举报