Die fragliche main-routine übersetzt er folgendermaßen
Code:
int main (void) {
L_$01E8:
01E8 LDI YL,$5F ; set stack
01EA LDI YH,$04
01EC OUT SPH,YH
01EE OUT SPL,YL
USART_Init();
01F0 CALL L_$008E
DDRB = 0xff;
01F4 LDI r24,$FF
01F6 STS DDRB,r24
sei ();
01FA SEI
USART_transmit('\n');
01FC LDI r24,$0A
01FE CALL L_$00A8
USART_transmit_string("Begruessungstext");
0202 LDI r24,$6F
0204 LDI r25,$00
0206 CALL L_$0104
USART_transmit('\n');
020A LDI r24,$0A
020C CALL L_$00A8
for (;;) {}
L_$0210:
0210 RJMP L_$0210
}
0212 4C 45 44 20 6F 66 66 00 LED off.
021A 4C 45 44 20 6F 6E 00 4D LED on.M
0222 6F 69 6E 2C 20 73 6F 6C oin\, sol
022A 6C 20 69 63 68 20 42 69 l ich Bi
0232 65 72 20 68 6F 6C 65 6E er holen
023A
und hinten hat der die dauerschleife for (;; )
L_$0210:
0210 RJMP L_$0210
das ist alles pipifein.
Was dich quält, ist der Watchdog, der immer wieder einen reset auslöst.
(und daher wieder von vorn beginnt)
den kannst du bei den fuses abdrehen (WDEN oder so ähnlich)
hat eigentlich mit dem Programm garnix zu tun. Auf die Idee hätt ich auch gleich kommen können. aber was soll's
Lesezeichen