单片机 > 单片机程序设计 > 详情

PIC XC8 EEPROM操作

发布时间:2023-08-15 发布时间:
|

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


可是看门狗复位会引起所有寄存器重置,恢复到默认状态。遥控要改变的内容也被复位了,所以只能借助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

__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);



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
快速学Arm(37)--定时器和计数器(1)