PIC Microcontoller Memory Method

Internal EEPROM access on 16F87x devices

Sam Linder [SamL at IN-INC.COM] says:

The following routines work for the 16F874/16F877 - not sure about the 16F871.
// **************************************************
// Function Name: Read8BitDataFromEEprom
//
// Description: Read characterization data out of on-board EEPROM
//
// Inputs:
//    eeaddress: 8-bit EEPROM address to read
//
// Outputs:
//    8-bit data stored at EEPROM address
//
unsigned char
Read8BitDataFromEEprom(unsigned char eeaddress)
{
    eeaddress &= 0x7F;

    eeadr = eeaddress;
    eepgd = 0;
    rd = 1;
    return(eedata);

} // end of Read8BitDataFromEEprom()


// **************************************************
// Function Name: Write8BitDataToEEprom
//
// Description: write 8-bit characterization data to on-board EEPROM
//
// Inputs:
//      data_address:  8-bit EEPROM address
//         datavalue:  8-bit data
//
// Outputs: none
//
void
Write8BitDataToEEprom(unsigned char data_address, unsigned char datavalue)
{

    data_address &= 0x7F;

    eeadr = data_address;   // establish address to write to
    eedata = datavalue;     // get data to write
    eepgd = 0;              // set for access to data memory
    wren = 1;               // set eeprom write enable bit
    //gie = 0;

#asm
retry:
    bcf INTCON,GIE          // disable interrupts for write sequence
    btfsc INTCON,GIE        // make sure bit cleared
    goto retry              // (int could have occurred 1/2way thru
instruction)
#endasm

    eecon2 = 0x55;          // required
    eecon2 = 0xAA;          //  write
    wr = 1;                 //   sequence
    gie = 1;                // ok to re-enable interrupts
    do {                    // wait for write to complete
        ; // nothing
    } while(wr);
    wren = 0;               // clear eeprom write enable bit
    eeif = 0;               // clear write complete interrupt flag

} // end of Write8BitDataToEEprom()


Questions: