www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler Programm für 16F84a


Autor: Reinhard Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in einer Aufgabe aus der Schule, wird in eimen UP 3 x der Befehl
RETLW 03
RETLW 02
RETLW 01
 angegeben.

Loop
MOVF  Zaehl,0
Call  UP
ADDWF ERG 1
RLF  ERG 1
DECFSZ Zaehl 1
Goto Loop
End

UP
ADDWF  PC 1
NOP
RETLW 03
RETLW 02
RETLW 01

Wie funktioniert das Programm?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum schaust Du nicht einfach ins PIC-Datenblatt, was der Befehl RETLW 
bedeutet?


Peter

Autor: Sergey (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Womit ist ERG/ZAEHL initialisiert?

ADDWF PCL,1 = Wert aus W zu PCL (Program Counter LOW) addieren,
wird in Tabellen verwendet.

RETLW X = "Return with Literal in W", Laden des Wertes X in W
und Sprung zur letzten Adresse, die am Stack liegt (Beenden der
Subroutine)

RLF = "Rotate LEFT file", Register nach Links shiften (hinausgeschobenes
Bit kommt ins Carry-Flag, das "alte" Carry Flag kommt an die freie 
Position...

MOVF X,0 = Das Register X in W laden
MOVF X,1 = Das Register X in X laden (in sich selbst laden, ergibt nur 
einen
Sinn um Flags zu setzen)

DECFSZ X = "Decrement File and Skip if ZERO" = Register X um 1 
vermindern.
Sollte X null werden, den darauffolgenden Befehl als NOP behandeln 
(nicht ausfuehren)

END = Kein Assembler Befehl, sondern nur die MPASM Endmarkierung, die 
dein Professor falsch gesetzt hat... dieses Programm kann also nicht 
funktionieren, weil UP darunter steht.


1. Iteration:
W = ZAEHL
*** NOP AUS SUBROUTINE ***
W = W
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP

2. Iteration:
W <- ZAEHL
*** RETLW 3 AUS SUBROUTINE ***
W = 3
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP

3. Iteration:
W <- ZAEHL
*** RETLW 2 AUS SUBROUTINE ***
W = 2
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP

4. Iteration:
W <- ZAEHL
*** RETLW 1 AUS SUBROUTINE ***
W = 1
ERG = ERG + W
ERG = ERG <<1
ZAEHL = ZAEHL - 1
*** TEST OB "ZAEHL" 0 IST, WENN NEIN GOTO LOOP

Autor: Reinhard Schenk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sergey,

danke für Deine Anwort, hast mir sehr geholfen.

MfG
Reinhard

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.