Ein Beispiel von mir:Und wieso kann ich mir damit den EEPROM zerschießen?
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:
So in etwa ? es werden 21 EEpromzellen beschriebenCode:.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
Wenn Du keine Interrupt benutzt kannst Du Dir auch cli sei sparen
Tja die Makros, sowas ist schonmal nicht gut
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.Code:sbis PinB, 0 READMOTORVALUE
Gruß Sebastian





Zitieren

Lesezeichen