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

时间: 2024-11-02 12:50:44

PIC XC8 EEPROM操作的相关文章

中颖EEPROM 操作

<pre name="code" class="cpp">/* 中颖EEPROM,使用比较方便,但有个注意点,就是每次无论你写入 什么数据或者在哪个地址写数据,都需要将对 对应的块擦除,擦 除后才能写入成功. */ #define SSPWriteFlag 0x5A #define SSPEraseFlag 0xA5 //数据区 扇形区1 #define ADDR_START1 (uint16)0x100 //数据存储区起始地址 #define ADDR

STM8S EEPROM 操作

STM8S 内置EEPROM,对于很大需要带记忆的产品来说,是个很好的资源,以下是我个人摸索出来的,并且验证OK,大家如需要可放心使用. #define EEPROMADDR0X000 ((u32)(FLASH_DATA_START_PHYSICAL_ADDRESS)) #define EEPROMADDR0X001 ((u32)(FLASH_DATA_START_PHYSICAL_ADDRESS+1)) #define EEPROMADDR0X002 ((u32)(FLASH_DATA_STA

STC12C5A60S2 EEPROM 测试

/* 单片机内置的 EEPROM测试程序 适用 : STC12C5A60S2  只有两个扇区 0x0000~0x01FF,0x0200~02FF 测试晶振:11.05926M 12M 都可以用  功能: 读取指定地址的一个字节内容,并显示在8 P1总线上 擦除一个扇区,修改取指定地址的一个字节内容,并显示在8 P1总线上 */ #include <reg51.h> #include <intrins.h> /******************EEPROM用到的sfr中的寄存器地址

STC12C4052AD EEPROM测试

/* 单片机内置的 EEPROM测试程序 适用 : STC12C5A60S2  只有两个扇区 0x0000~0x01FF,0x0200~02FF 测试晶振:11.05926M 12M 都可以用  功能: 读取指定地址的一个字节内容,并显示在8 P1总线上 擦除一个扇区,修改取指定地址的一个字节内容,并显示在8 P1总线上 */ #include <reg51.h> #include <intrins.h> /******************EEPROM用到的sfr中的寄存器地址

STC 89C51系列 EEPROM测试程序

1测试程序 2证明程序 1 /* 单片机内置的 EEPROM测试程序 适用  STC89C51 STC89C52 STC89C53 STC89C54 STC89C58 STC89C510 STC89C512 STC89C514 测试晶振:11.05926M 12M 都可以用  功能: 读取指定地址的一个字节内容,并显示在8 P1总线上 擦除一个扇区,修改取指定地址的一个字节内容,并显示在8 P1总线上 */ #include <reg51.h> #include <intrins.h&g

旧文备份:AVR读写EEPROM分析

由于AVR的EEPROM写周期比较长(一般为毫秒级),因此在编程使用过程中要特别注意.对于读EEPROM没什么好说的,读一个字节的数据要耗费4个时钟周期,可以忍受,写就比较麻烦了,虽然放在EEPROM的数据都不是频繁访问的;虽然可以用读-比较-写的机制降低EEPROM的写操作频度,但在写入过程中,过长的写入周期还是会造成一些问题,下面就分析一下几种方式的EEPROM写操作. 循环查询式 将地址和数据写入EEPROM相关的寄存器,置写标志后就循环不断查询写完成标志,直到写完成,退出循环,顺序执行其

开源word操作组件DocX的记录

开源word操作组件DocX的记录 使用开源word操作组件DocX的记录 1.DocX简介 1.1 简介 DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的.DocX使得操作word非常轻便,有利于减轻开发负担,提升程序效率.DocX在Codeplex和Github上都有开源. 1.2 获取与安装 可以在http://docx.codeplex.com/releases下载获取,也可以直接利用Nu

24系列EEPROM应用注意事项

24系列EEPROM应用注意事项 1 概述用户在使用EEPROM偶尔会出现数据丢失的情况,尤其在上下电或电源抖动过程中,会出现不确定的干扰.为了防止故障发生,建议用户按规定条件使用,避免在异常条件下操作.关于数据丢失的原因,需根据实际使用情况来分析.2 注意事项在具体应用中,请注意以下事项:1) VCC电源确定是在1.8V~5.5V范围内,VCC脚附近加一个0.1uF电容.2) SCL和SDA外部上拉,上拉电阻范围1K~10K.3) 若应用板上干扰较大,在SCL和SDA线上串几十欧姆的电阻来去毛

存储:

一 关于NORFLASH的片内执行程序: NORFLASH适合片内执行主要是符合了3个特点:读速度快(CPU的取指令).线性存储.位交换概率小(这两条保证要执行的代码区是连续的准确的).因为可片内执行,所以省去CPU取指令的复制和解压,所以体积可以做的很小.NANDFLASH只保证BLOCK0是好的,它只是不适合而不是不能片内执行.http://blog.chinaunix.net/uid-26404697-id-3152290.html 二 RAM与ROM: 2.1RAM:SRAM(静态RAM