www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik T89C51RD2 Assembleranfänger


Autor: Rainer "S." (rayxyz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
vieleicht kann mich (Bin abs. Newbie im Programmieren) irgend jemand 
etwas unterstützen.

Ich hab mir ein 8051 Entwicklunsboard (peter Dannegger) nachgebaut und 
kann auch schon mit Flip 3.3.0 und MCtools mit meinem Board 
kommunizieren.
Der uP ist ein T89C51RD2-IM.
Aber beim Anfangen gibt es schon Schwierigkeiten.

Habe mir aus verschiedenen Foren ein Lauflicht abgeschaut.
Leider setzt meine Wartefunktion nicht ein. Es leuchtet immer nur LED1.
Ich stell den Code einfach mal ein.
Gebe ich beim Startwert 11111101 ein, leuchtet auch LED2. Mit 
Umstellungen war auch nichts zu erreichen.
Vieleicht ist es ja nur ein kleiner Tip.

ORG 0000h
ljmp main
main:  mov P0, #11111110b          ; Startwert zu Tor 4 ausgeben

warte: mov R7, #00000001b          ; CPU-Reg R6 mit 01h laden
       mov R6, #00000000b          ; CPU-Reg R6 mit 00h laden
       mov R5, #00000000b          ; CPU-Reg R5 mit 00h laden

       inc R7
       inc R6
       inc R5
loop:  djnz R5,loop
       djnz R6,loop
       djnz R7,loop
       ret
mlop:  call warte            ; eine Zeit warten
       mov  A,P0             ; Wert in Tor 4 zum Akku
       rl   A                ; Inhalt A rotiere rechts
       mov  P0,A             ; Inhalt nach P0 ausgeben
       jmp  mlop             ; nach mlop springen
       end

Hoffe auf feedback
Danke
Rainer

Autor: Werner Lötknecht (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Hauptfehler ist der Befehl RET. Dadurch wird mlop nie erreicht.In 
MAIN muss der Befehl jmp  mlop folgen. Sonst erfolgt ein undefinierter 
Rücksprung.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit PC-Programmierung hat das ja nun doch recht wenig zu tun -> 
Verschoben

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
In Unterfunktionen (warte:) darf man nicht hineinlaufen, schreibe sie 
hinter die Mainloop oder springe darüber hinweg.

Und hau das inc r7, inc r6, inc r5 raus.


Peter

Autor: Rainer "S." (rayxyz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für Eure Hilfe.

Ich  habe es geschafft, und werde mich gleich an weitere Aufgaben 
trauen.

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.