@Bernd: in deinem link geht's ums flash und nicht ums EEProm
@Max: als übergabe gibst du jeweils die EEProm-adresse (addr = [0..255]) und die adresse deiner variable (dest*/source* = [float, int,..]) und wählst die entsprechende funktion anhand der anzahl bits, die deine variable belegt
// für C18
void ReadEEdata8(unsigned char *dest, unsigned char addr) {
// EECON1bits.CFGS = 0; // VERY important, alternatively it can be set also in the init()
EECON1bits.EEPGD = 0; // READ step #1
EEADR = addr; // READ step #2
EECON1bits.RD = 1; // READ step #3
*dest = EEDATA; // READ step #4
}
void ReadEEdata16(unsigned char *dest, unsigned char addr) {
unsigned char *p = (unsigned char *)dest;
ReadEEdata8(p++, addr++);
ReadEEdata8(p, addr);
}
void ReadEEdata32(unsigned char *dest, unsigned char addr) {
unsigned char *p = (unsigned char *)dest;
ReadEEdata8(p++, addr++);
ReadEEdata8(p++, addr++);
ReadEEdata8(p++, addr++);
ReadEEdata8(p, addr);
}
void WriteEEdata8(unsigned char *source, unsigned char addr) {
// EECON1bits.CFGS = 0; // VERY important, alternatively it can be set also in the init()
EECON1bits.EEPGD = 0; // WRITE step #1
EECON1bits.WREN = 1; // WRITE step #2
EEADR = addr; // WRITE step #3
EEDATA = *source; // WRITE step #4
INTCONbits.GIEH = 0; // disable/enable interrupts
INTCONbits.GIEL = 0; // disable/enable interrupts
EECON2 = 0x55; // WRITE step #5
EECON2 = 0xaa; // WRITE step #6
EECON1bits.WR = 1; // WRITE step #7
INTCONbits.GIEH = 1; // disable/enable interrupts
INTCONbits.GIEL = 1; // disable/enable interrupts
while (!PIR2bits.EEIF); // WRITE step #8
PIR2bits.EEIF = 0; // WRITE step #9
}
void WriteEEdata16(unsigned char *source, unsigned char addr) {
unsigned char *p = (unsigned char *)source;
WriteEEdata8(p++, addr++);
WriteEEdata8(p, addr);
}
void WriteEEdata32(unsigned char *source, unsigned char addr) {
unsigned char *p = (unsigned char *)source;
WriteEEdata8(p++, addr++);
WriteEEdata8(p++, addr++);
WriteEEdata8(p++, addr++);
WriteEEdata8(p, addr);
}