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


von Reinhard Schenk (Gast)


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?

von Peter D. (peda)


Lesenswert?

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


Peter

von Sergey (Gast)


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

von Reinhard Schenk (Gast)


Lesenswert?

Hallo Sergey,

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

MfG
Reinhard

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.