/* eeprom_05.c ATmega88 @ 1MHz */ #include <avr/io.h> #include <avr/eeprom.h> void EEPROM_write(uint16_t ee_address, uint8_t ee_data) { while (EECR & (1<<EEPE)); // Schreibbereitschaft abwarten EECR &= ~((1<<EEPM1) & (1<<EEPM0)); // Löschen und Schreiben in einem Durchgang EEAR = ee_address; // Speicheradresse an das Adressregister übergeben EEDR = ee_data; // Daten an das Datenregister übergeben EECR |= (1<<EEMPE); // Set Master Programm Enable EECR |= (1<<EEPE); // Schreibvorgang auslösen } uint8_t EEPROM_read(uint16_t ee_address) { while (EECR & (1<<EEPE)); // Lesebereitschaft abwarten EEAR = ee_address; // Leseadresse an das Adressregister übergeben EECR |= (1<<EERE); // Lesevorgang auslösen return EEDR; // Daten an die aufrufende Funktion zurückgeben } uint8_t x,y,z; int main(void) { EEPROM_write(1,5); // Schreibe an die Adresse 1 den Wert 5 EEPROM_write(2,8); // Schreibe an die Adresse 2 den Wert 8 EEPROM_write(5,15); // Schreibe an die Adresse 5 den Wert 15 x = EEPROM_read(1); // Lese den Inhalt von Adresse 1 und speichere in x y = EEPROM_read(2); // Lese den Inhalt von Adresse 2 und speichere in y z = EEPROM_read(5); // Lese den Inhalt von Adresse 5 und speichere in z while(1) { asm ("NOP"); // Nichts tun } }