PIC内部EEPROM读写操作
#include <xc.h> // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = OFF // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) typedef unsigned char uchar; void WriteEE(uchar addr, uchar data); uchar ReadEE(uchar addr); uchar led_data; __EEPROM_DATA(0xfe,0xff,0xef,0,0,0,0,0); void main(void) { PORTD = 0xff; TRISD = 0x00; //WriteEE(0, 0xff); while(1) { //led_data = ReadEE(0); led_data = eeprom_read(2); PORTD = led_data; } } void WriteEE(uchar addr, uchar data) { do{} while(WR == 1); //等待完成 EEADR = addr; //写入地址信息 EEDATA = data; //写入数据信息 EEPGD = 0; //操作EEPROM,访问数据存储器 WREN = 1; //写入EEPROM允许 EECON2 = 0x55; EECON2 = 0xAA; //特定时序 WR = 1; //执行写操作 do{} while(WR == 1); //等待写入完成 WREN = 0; //禁止写入EEPROM } uchar ReadEE(uchar addr) { uchar _data; do{} while(RD == 1); //等待读完成 EEADR = addr; //地址 EEPGD = 0; //访问数据存储器 RD = 1; //执行读操作 do{} while(RD == 1); _data = EEDATA; return _data; }