Forum: Mikrocontroller und Digitale Elektronik PIC Assembler- Problem


von Michael R. (elektr-hobbyist)


Angehängte Dateien:

Lesenswert?

Hallo alle zusammen.

Ich habe ein Problem mit meinem Programm.
Es geht um die Stelle ab dem Label count_up.
Hier erfolgt die Rückkehr aus dem Unterprogramm wait_1s.
Im Arbeitsregister steht bei der Rückkehr, der Wert .255.
Nach

clrf  PORTD
und
incf  count_number,1

soll mit movf  count_number, der Wert, der in count_number steht (in 
diesem Fall .1), in das Arbeitsregister geladen werden.
Laut MPLAP SIM passiert dies aber nicht. Der Wert im Arbeitsregister 
bleibt bei .255.
Was mache ich hier falsch?

Ich habe das Assemblerfile angehängt.
Bitte nicht wundern. Das Programm ist zur Fehlerermittlung etwas 
gekürzt.

Ich hoffe Ihr könnt mir helfen.

L.G.

Micha

von Michael (Gast)


Lesenswert?

Hallo Micha
versuch doch einmal anstatt "movf" "movfw" zu verwenden.

lies dazu einmal folgendes durch:
http://www.to-pic.com/movf.php

MfG

von Michael R. (elektr-hobbyist)


Lesenswert?

Ah, mit movfw bzw. mit movf count_number,w funzt es!
Vielen lieben Dank.
Ich hatte die Erklärung zum movf- Befehl, auf Sprut´s Homepage, so 
verstanden, dass wenn man nur movf eingibt, automatisch davon 
ausgegangen wird, dass der Inhalt der danach genannten Speicherzelle, in 
das Arbeitsregister geladen werden soll.
So kann man sich irren. Man muss also doch noch definieren das der 
Inhalt der Speicherzelle nach w kopiert werden soll.

Danke für deine schnelle Hilfe.

L.G.

Micha

von W.S. (Gast)


Lesenswert?

Michael R. schrieb:
> in
> das Arbeitsregister geladen werden soll.

W ist beim PIC eigentlich kein Arbeitsregister oder gar Akku, sondern 
eher ein Ergebnis-Auffang-Register. Am besten, du gewöhnst dir an, immer 
nur ,W oder ,F zu schreiben, also z.B.
  MOVF PortA,W
  MOVF PortA,F

(wenn dein Assembler das ,F mitmacht). Da kommst du nicht so leicht in 
die Versuchung, was Falsches darunter zu verstehen.

W.S.

von Christian (Gast)


Lesenswert?

PIC Assembler, das waren noch Zeiten ;)

Mit movfw kopert man den Wert einer Speicherzelle in das Arbeitsregister 
W
Mit movwf kopiert man W wieder in eine Speicherzelle.
Das hätte ich auch noch gewusst ;)

von Hans F. (spartrafo)


Lesenswert?

W.S. schrieb:
> W ist beim PIC eigentlich kein Arbeitsregister oder gar Akku, sondern
> eher ein Ergebnis-Auffang-Register.

Worin begründet sich Deine Aussage? Laut MC: W = "Working register 
(accumulator)"

W kann Quelle und/oder Ziel einer Operation der ALU sein.

Christian schrieb:
> Mit movfw kopert man den Wert einer Speicherzelle in das Arbeitsregister
> W

Diese Instruktion gibt es nicht wirklich (pseudo-instruction).

von W.S. (Gast)


Lesenswert?

Hans Franz schrieb:
> Worin begründet sich Deine Aussage?

Auf langjähriges Programmieren von PICs. Guck dir einfach mal den 
Befehlssatz an.

W.S.

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.