Ich habe den Fehler jetzt mit Hilfe des Disassembler gefunden:
87: while (zeit<750) ;
+0000017C: 91800060 LDS R24,0x0060 Load direct from data
space
+0000017E: 91900061 LDS R25,0x0061 Load direct from data
space
+00000180: E022 LDI R18,0x02 Load immediate
+00000181: 3E8E CPI R24,0xEE Compare with immediate
+00000182: 0792 CPC R25,R18 Compare with carry
+00000183: F3E0 BRCS PC-0x03 Branch if carry set
+00000184: E020 LDI R18,0x00 Load immediate
+00000185: E2E0 LDI R30,0x20 Load immediate
+00000186: E4FE LDI R31,0x4E Load immediate
Das Problem ist, dass der Sprungbefehl nur 3 Befehle zurück reicht. Es
müssten die Register R24 und R25 aber wieder neu aus dem Speicher
geladen werden. Es müssten also die ersten zwei LDS Befehle auch wieder
ausgeführt werden. Wie mache ich das dem Compiler klar? Er rechnet
anscheinend nicht damit das ein Interrupt den Speicher ändern könnte.