hallo
ich habe folgende probleme. 1. von pic's habe ich fast keine ahnung
und 2. ein problem mit folgenden: in dem unten stehenden 1.codefragment
wird der wert in Adres UND verknüpft mit 1111. wenn der wert in Adres
<15 (dezimal)ist soll der befehl "retlw 0" ausgeführt werden, wenn
der wert in Adres >15 ist soll der befehl "retlw 0" übersprungen
werden. so weit so gut. wenn ich jetzt allerdings nicht ganz falsch
liege ergeben aber auch bestimmte andere werte (z.B 32, 48, 64, 80, 96)
in Adres bei der UND verknüpfung das ergebnis 0 bzw. das Z flag wird
dementsprechend gesetzt und der befehl "retlw 0" ausgeführt. kann ich
jetzt wie bei dem 2. codefragment die auswertung umändern oder geht das
so nicht?
cu oli
1. codefragment
Retlw_Stufe
movf Adres,W
andlw b'1111' <- originale auswertung
btfsc STATUS,Z <- originale auswertung
retlw 0 ;wenn Adres <15; dann Vbatt<2.65V, Akku leer
movf Adres,W
addlw -0x10 ; die ersten 16 Werte abschneiden
andlw 0x7F ; zur Sicherheit, nur Werte 0 bis 127 erlauben
addwf PCL,F ; aber: kann nicht vorkommen, Adres max. ist 101 für
Vbatt=4.12V
retlw 0 ; 16
2. codefragment
Retlw_Stufe
movf Adres,W
sublw D'15' <- meine änderung
btfsc STATUS,C <- meine änderung
retlw 0 ; wenn Adres <15; dann Vbatt<2.65V, Akku leer
movf Adres,W
addlw -0x10 ; die ersten 16 Werte abschneiden
andlw 0x7F ; zur Sicherheit, nur Werte 0 bis 127 erlauben
addwf PCL,F ; aber: kann nicht vorkommen, Adres max. ist 101 für
Vbatt=4.12V
retlw 0 ; 16
Ich denke, dass das erste Codefragment schon stimmt. UND-Verknüpfung: 1 1 = 1 1 0 = 0 0 1 = 0 0 0 = 0 wenn B'1111' heißt B'11110000', dann ist: "alles kleiner gleich", bsp. 15: 00001111 UND 11110000 = 00000000 (Zero-Flag gesetzt) "alles größer gleich", bsp. 16: 00010000 UND 11110000 = 00010000 (kein Z-Flag) z.B. 17: 00010001 UND 11110000 = 00010000 (kein Z-Flag) z.B. 32: 00100000 UND 11110000 = 00100000 (kein Zero-Flag) Also alles, was größer gleich 16 ist, sorgt wegen der UND-Verknüpfung für das NICHTsetzen des Z-Flags. mfg Wolfram Hildebrandt
hallo, @HDW wieso bedeutet B'1111' = B'11110000'?, das habe ich jetzt noch nicht begriffen. mfg olaf
hi B'1111' = B'11110000' <- ha, jetzt ist bei mir der groschen gefallen. alles klar. Danke oli
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.