Frage zu Spruts Lauflicht Beispiel

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 07 1 2025  01:23:10      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Frage zu Spruts Lauflicht Beispiel

    







BID = 384150

Herrminator

Gelegenheitsposter



Beiträge: 87
 

  


Hallo zusammen,

habe mich gestern durch das Lauflicht Beispiel von Sprut durchgearbeitet. Habe hinter jede Zeile geschrieben was der PIC macht. Nun verstehe ich den Parameter F nicht in folgendem Programmteil:

; Warteschleife 250 ms

Wait
movlw D'250' ; 250 ms Pause
movwf loops

Wai
movlw .110 ; Zeitkonstante für 1ms
movwf loops2
Wai2 nop ;
nop
nop
nop
nop
nop
--> decfsz loops2, F ; 1 ms vorbei?
goto Wai2 ; nein, noch nicht
;
--> decfsz loops, F ; 250 ms vorbei?
goto Wai ; nein, noch nicht
retlw 0 ; das Warten hat ein Ende

end

In der Befehlsbeschreibung heisst es:

Syntax: DECFSZ f,d
Bedeutung: wenn d=0: Vom Wert in f wird 1 abgezogen,
und das Ergebnis in W gespeichert.

wenn d=1: Vom Wert in f wird 1 abgezogen,
und das Ergebnis wieder in f gespeichert.

Ist das Ergebnis der Subtraktion Null, dann wird der nächste Befehl im Programm übersprungen, und mit dem übernächsten weitergebacht.
----------------------------------------------------------
Das heißt für mich das das kleine f aus der Beschreibung mein loops bzw loops2 ist. Wenn ich das aber richtig verstanden habe sollte jetzt dich 0 oder 1 folgen.
Oder für was steht das f ?

Bin mal gespannt was ich da falsch verstanden habe.

MfG

Tobias







BID = 384797

qutom

Gelegenheitsposter



Beiträge: 58
Wohnort: Marl

 

  

Hallo.... vieleicht kann ich da weiterhelfen...

Der Befehl:
DECFSZ f,d

Heisst:
Vermindere um 1, überspringe nächsten Befehl, wenn f=0.
Der Inhalt von "f" wird um 1 erniedrigt und das Ergebnis, wenn
d=0 im W Register
d=1 im f Register, gespeichert. Ist das Ergebnis gleich Null, dann wird der nächste Befehl übersprungen.

Das W Register ist das Working Register, sozusagen der Akkumulator. Das f Register ist der Ram Speicher.

So kann man einfache Zeitschleifen machen.
z.b.

movlw 055H ; Lade 55Hex im Akkumulator
movwf count ; Kopiere Akkumulator ins Ram Speicher

loop:
decfsz count,f ; Decrementiere Ram Speicher 55Hex um 1
goto loop ; ist der Ram Speicher irgendwann leer,
Return ; dann überspringe "goto loop" und springe
; zum Return




BID = 384817

Herrminator

Gelegenheitsposter



Beiträge: 87

Danke erst mal. Dein Beispiel habe ich verstanden. Gleich mal simuliert.

Wenn ich das richtig verstanden habe heißt das :

DECFSZ f,d f=count d=1

was bedeutet das von dezimal 85 bis 1 im f Register also in der Speichervariablen count abgezogen wird. Und bei 0 dann in das Register W (Akku) 0 geschrieben wird und dann der nächste Befehl übersprungen wird ? Somit wäre W = 0

Jetzt bin ich mal gespannt....

BID = 385259

stepp64

Gesprächig


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 162

Hallo,

für das d in den Befehlen musst du nicht unbedingt eine 0 oder eine 1 schreiben. Du kannst auch W oder F schreiben. Der Befehl DECFSZ count,0 ist das selbe wie DECFSZ count,W. Es ließt sich halt einfach besser wenn da W oder F statt 0 oder 1 steht. Den Wert hinter dem Komma musst du immer angeben, wenn es die Syntax verlangt. Machst du dass nicht, setzt der Compiler automatisch den Wert auf F und gibt einen Hinweis aus. Das ist könnte dann falsch werden, wenn du das Ergebnis eigentlich in W haben wolltest. Also immer schön mit angeben ob das Ziel F oder W sein soll.

Der DECFSZ arbeitet nicht ganz so wie du es beschrieben hast.

DECFSZ count,w bedeutet, dass von dem Wert in count 1 abgezogen wird und das Ergebnis nach w kopiert wird (count verändert sich nicht!). Dann wird verglichen, ob das Ergebnis gleich 0 ist. Ist dem so, wird der nächste Befehl übersprungen, ansonsten nicht. Dieser Befehl ist eigentlich völlig sinnlos, da sich count nicht verändert und der Test somit immer gleich verläuft. Dieser Befehl macht nur Sinn, wenn du das Ergebniss nach f kopierst, also DECFSZ count,f. Dann kannst du damit Zählschleifen bauen, die solange durchlaufen werden, bis count gleich 0 wird. Der Wert hinter dem Komma gibt immer das Ziel der Operation an!

Gruß Sven

[ Diese Nachricht wurde geändert von: stepp64 am 12 Nov 2006 22:18 ]

BID = 392169

Herrminator

Gelegenheitsposter



Beiträge: 87

Hallo zusammen,
entschuldigt war mal wieder auf Service im Ausland. Danke an euch. Jetzt habe ichs verstanden.

Liebe Grüße

Tobias


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 22 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182686904   Heute : 217    Gestern : 7485    Online : 417        7.1.2025    1:23
1 Besucher in den letzten 60 Sekunden        alle 60.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.0629210472107