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.