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
Lesezeichen