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