Forum: Mikrocontroller und Digitale Elektronik was ist hier falsch?


von peter2 (peter zimmer) (Gast)


Lesenswert?

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

von Dieter (Gast)


Lesenswert?

Stackpointer einstellen ???????????????


MFG
Dieter

von Daniel Aue (Gast)


Lesenswert?

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

von peter2 (peter zimmer) (Gast)


Lesenswert?

Hallo,
jetzt geht es.
Die 2 Zeilen muss ich dann immer rein machen wenn ich rcall benutzen 
will oder sehe ich das falsch?

Peter

von Dieter (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.