PIC: Variablen abfragen Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
Autor |
PIC: Variablen abfragen Suche nach: pic (2054) |
|
|
|
|
BID = 390032
Peo Gesprächig
Beiträge: 181 Wohnort: Baden-W.
|
|
Hallo
kann ich, und wenn ja wie, in einem PIC den Wert von Variablen abfragen, um damit eine logische Verknüpfung zu machen á la
"Wenn Variable = Wert dann mach irgendwas"
mfg
Peo |
|
BID = 390060
stepp64 Gesprächig
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
|
Hallo
wäre nicht schlecht, wenn du sagen würdest in welcher Sprache und auf welchem PIC du programmierst.
In Assembler kannst du bei den 14-Bit PICs (12F... und 16F...) das machen, indem du z.Bsp. einen exlusiven ODER-Vergleich mit der Variable machst. Sind beide Werte gleich, kommt Null heraus und das Zero-Flag im STATUS-Register wird gesetzt. Dieses kannst du dann abfragen. Also wenn du z.Bsp. wissen willst, ob die Variable den Wert 15 hat, dann würde ich das so machen:
Code : |
movlw .15 ;Vergleichswert nach W
xorwf Variable,w ;exclusives ODER
btfss STATUS,Z ;Ergebnis gleich 0?
goto Ungleich
Gleich
.....
|
|
Gruß Sven
[ Diese Nachricht wurde geändert von: stepp64 am 1 Dez 2006 22:52 ]
[ Diese Nachricht wurde geändert von: stepp64 am 1 Dez 2006 22:52 ] |
|
BID = 390187
Peo Gesprächig
Beiträge: 181 Wohnort: Baden-W.
|
Danke
Das hilft mir sehr viel weiter.
Ich gehe davon aus, dass ich nach erfolgreichem Abgleich das Z Bit wieder auf Null setzen muss:
bcf STATUS,Z
mfg
Peo
|
BID = 390249
Nukeman Schriftsteller
Beiträge: 754 Wohnort: bei Kleve
|
Hallo Peo!
Das wird normalerweise nicht gemacht ( Z-Flag per Hand löschen).
Man geht normalerweise immer davon aus, dass es vor
einer Operation einen willkürlichen Zustand hat.
( Es gibt natürlich sonderfälle, wo man das Ergebnis der
letzten Operation mehrfach verwenden kann )
Mit jeder neuen Operation, die das Z-Flag beeinflusst,
da wird es ja sowieso neu gesetzt/gelöscht und kann danach
abgefragt werden.
Du brauchst also nichts wieder herstellen. Jede Operation,
die das Z-Flag abfragt, wird es vorher entsprechend
beeinflussen. Das ist ja der Sinn des Ganzen.
Gruß,
Stefan
|
BID = 390484
stepp64 Gesprächig
Avatar auf fremdem Server ! Hochladen oder per Mail an Admin
Beiträge: 162
|
Hallo,
schau mal bitte ins Datenblatt zu deinem PIC. Dort findest du am Ende alle ASM-Befehle die dein PIC kennt aufgelistet (INSTRUCTION SET). In dieser Tabelle ist zu jedem Befehl genau angegeben, welches Flag im STATUS-Register gesetzt wird, wenn du den entsprechenden Befehl benutzt (Status Affected). Diese Tabelle solltest du am Anfang immer vor dir liegen haben, da manchmal die Flags nicht so gesetzt werden, wie man es erwarten könnte.
Bsp. INCF setzt das Z-Flag wenn das Ergebnis 0 ist. Man könnte denken, dass auch das C-Flag gesetzt wird, da ja ein Überlauf von 255 nach 0 auftritt. Dem ist aber nicht so.
ADDWF und SUBWF setzen das C-Flag genau engegengesetzt herum. Während der ADD-Befehle das C-Flag setzt, wenn ein Überlauf auftritt, wird bei dem SUB-Befehl bei Überlauf das C-Flag gelöscht.
Manche Befehle setzen gar kein Flag (z.Bsp. MOVLW, BCF, BSF). Das kann man manchmal vor bedingten Sprüngen bewusst ausnutzen, da die Bittestbefehle ja immer nur einen Befehl überspringen.
Aber schau es dir einfach mal in Ruhe an. Die Status-Flags sind sehr wichtig, da du ohne diese eigentlich kein gescheites Programm zusammen bekommst.
Gruß Sven
|
|
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 17 Beiträge im Durchschnitt pro Tag heute wurden bisher 8 Beiträge verfasst © x sparkkelsputz Besucher : 182087261 Heute : 1740 Gestern : 6155 Online : 816 28.9.2024 10:20 4 Besucher in den letzten 60 Sekunden alle 15.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0272159576416
|