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: