www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik was ist hier falsch?


Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stackpointer einstellen ???????????????


MFG
Dieter

Autor: Daniel Aue (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter2 (peter zimmer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.