Und wieso kann ich mir damit den EEPROM zerschießen?
Ein Beispiel von mir:
Ein Register sollte auf Tastendruck im EEprom geschrieben werden.
Zu wenig überlegt und es war genau anders herum, kein Tastendruck bewirkte
das schreiben...
Was passiert ?
EEprom wurde nur noch beschrieben, wie lange Dauert das schreiben ?
Irgendwas mit 1 mS, also etwa 1000 Schreibzugriffe in der Sekunde,
dumm nur wenn eeprom 100000 Schreibzugriffe hält.
Bis ich darauf gekommen bin, daß ich einen Fehler gemacht habe, war die EEprom Zelle kaputt und hat kein Inhalt mehr gehalten...
Wie gut, daß es noch weitere EEprom Zellen gab, wo ich was schreiben konnte...
Wenn Du mehrere Sachen im EEprom Speichern willst würde ich das etwa so machen:
Code:
.equ eeprompuffer = 0x00
.def null = r1
...
...
clr null
loop:
clr r16
ldi r19,1
loop1:
rcall eepromsave
inc r16
inc r19
cpi r16,20
brne loop1
loop2:
rjmp loop2
eepromsave:
sbic EECR,EEPE
rjmp eepromsave
out EECR,null
ldi r17,LOW(eeprompuffer)
add r17,r16
adc r18,null
out EEARH,r18
out EEARL,r17
out EEDR,r19
cli
sbi EECR,EEMPE
sbi EECR,EEPE
sei
ret
So in etwa ? es werden 21 EEpromzellen beschrieben
Wenn Du keine Interrupt benutzt kannst Du Dir auch cli sei sparen
Tja die Makros, sowas ist schonmal nicht gut
Code:
sbis PinB, 0
READMOTORVALUE
mit sbis überspringst Du nicht READMOTORVALUE sondern nur die erste Zeile im Makro, weil an der Stelle wo der Makroname steht, fügt der Assembler alles ein was zwischen .macro und .endmacro steht.
Gruß Sebastian
Lesezeichen