Forum: Mikrocontroller und Digitale Elektronik problem mit pic


von oli (Gast)


Lesenswert?

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

von HDW (Gast)


Lesenswert?

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

von oli (Gast)


Lesenswert?

hallo,

@HDW
wieso bedeutet  B'1111' = B'11110000'?, das habe ich jetzt noch
nicht begriffen.

mfg  olaf

von oli (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.