Hallo,
Du sollst allerdings vor dem lesen testen, ob Dein EEPROM überhaupt bereit ist
gelesen zu werden.
Ich poste Dir mal zwei Makros aus meinem aktuellen Projekt:

1. lesen
Code:
.macro READMOTORVALUE
wait4eep1:		
	sbic EECR,EEPE
	rjmp wait4eep1 
	ldi tmp,LOW(radrechts)
	out EEARL,tmp
	sbi EECR,EERE
	in tmp,EEDR
wait4eep2:	
	sbic EECR,EEPE
	rjmp wait4eep2
	ldi tmp1,LOW(radlinks)
	out EEARL,tmp
	sbi EECR,EERE
	in tmp1,EEDR
.endmacro
2. schreiben
Code:
.macro SAVEMOTORVALUEFUNC
wait4ready1:	
	sbic EECR,EEPE
	rjmp wait4ready1
	out EECR,null
	ldi tmp,LOW(radrechts) 
	out EEARL,tmp
	in tmp,OCR0A
	in tmp1,OCR0B
	out EEDR,tmp
	cli
	sbi EECR,EEMPE
	sbi EECR,EEPE
	sei
wait4ready2:		
	sbic EECR,EEPE
	rjmp wait4ready2
	out EECR,null
	ldi tmp,LOW(radlinks)
	out EEARL,tmp
	out EEDR,tmp1
	cli
	sbi EECR,EEMPE
	sbi EECR,EEPE
	sei
.endmacro
Die EEprom adressen werden so deklariert
Code:
	;; EEPROM Segment
.eseg
radrechts:
.db 0x80
radlinks:	
.db 0x80
Es werden zwar 2 Adressen nacheinander gelesen, das sollte aber das Prinzip zeigen.

Zu HIGH und LOW habe ich hier

was geschrieben, ich hoffe es ist verständlich genug.

Gruß Sebastian