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

 

posted @ 2019-05-11 21:03  佳木  阅读(1616)  评论(0编辑  收藏  举报