/* 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
	}
}