Hallo, ich habe mir ein Assemblerprogramm geschrieben das eine LED zu blinken bringen soll aber sie leuchtet nur. Hier ist das Assemblerprogramm: .include "4433def.inc" ;bzw. 2333def.inc ldi r16, 0xFF out DDRB, r16 ;Port B durch Ausgabe von 0xFF ins ;Richtungsregister DDRB als Ausgang konfigurieren ldi r16, 0b11110111 ldi r17, 0b11111111 loop: out PORTB, r16 rcall sub1 out PORTB, r17 rcall sub1 rjmp loop ;pause 2sec mit dem AVR-wartenschleifergenarator gemacht sub1: ldi R20, $48 WGLOOP0: ldi R21, $BC WGLOOP1: ldi R22, $C4 WGLOOP2: dec R22 brne WGLOOP2 dec R21 brne WGLOOP1 dec R20 brne WGLOOP0 ldi R20, $02 WGLOOP3: dec R20 brne WGLOOP3 nop nop ret Ende des programms Peter
Hi ! knall mal die zwei zeilen an den anfang deines programms: ldi r16,RAMEND out SP,r16 damit initialisierst du den stackpointer, das musst du machen damit du überhaupt calls verwenden kannst... ich denke das sollte dein problem beheben. lg
Hallo, jetzt geht es. Die 2 Zeilen muss ich dann immer rein machen wenn ich rcall benutzen will oder sehe ich das falsch? Peter
Hallo peter2 nein, das siehtst du richtig. Bei sprüngen wie rcall muß der Prozessor ja wissen, wohin er wieder zurück springen soll, bei ret. Diese Adressen schreibt er dann auf den SP. MFG Dieter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.