problem mit pic

Gast #48822
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
Gast #48823
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.