Gast
#1355718
Hallo zusammen. Ich bin ein uC-Neuling und habe mal ein kleines Programm ausprobiert und will nur mal Anfangs was Blinken lassen, dann bin ich schon mal zufrieden. Ich nutze AVR STudio und eine STK500 Wenn ich mein Programm im AVR Studio simuliere, geht alles wunderbar. Wenn ich das gleiche aber auf den uC lade, dann läuft das Programm aber nicht nach dem Return an die letzte Stelle, sondern fängt wieder von vorne an. Ich vermute dass es am Stack-Pointer liegt. Ich bekomm es aber nicht gebacken weil ich einfach ein hilfloser Anfänger bin. /* ******************************************************** */ .include "m8def.inc" ; Definitionsdatei für den Prozessortyp einbinden ; Stackpointer initialisieren .def tmp=r17 ldi tmp,low(ramend) out SPH,tmp ldi tmp,high(ramend) out SPL,tmp ; I/Os Definieren (A-C=OUT, D=IN) ldi r16, 0xFF ; lade Arbeitsregister r16 mit der Konstanten 0xFF out DDRA, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben ldi r16, 0x00 ; lade Arbeitsregister r16 mit der Konstanten 0x00 out DDRD, r16 ; Inhalt von r16 ins IO-Register DDRB ausgeben loop: ; 10101010 und 01010101 im Wechsel, jedes Register gleichzeitig ldi r16, 0b01010101 ; in r16 laden out PORTA, r16 rcall Zeit ldi r16, 0b10101010 ; in r16 laden out PORTA, r16 rcall Zeit rjmp loop ; zurück zu loop /* *************************** */ Zeit: /**** ZEIT *******/ ldi r20, 0xf0 ldi r21, 0xff ldi r22, 0x00 Zeit_21_m: dec r20 cp r20,r22 ; Vergleiche Register BRNE Zeit_21_m ; Wenn ungleich, Springe zu Zeit_21_m ldi r20, 0xff dec r21 cp r21,r22 ; Vergleiche Register BRNE Zeit_21_m ; Wenn ungleich, Springe zu Zeit_21_m RET /* ******************************************************** */ Kann mir jemand helfen und sagen was ich vergessen habe? Wäre klasse!