mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik problem mit pic


Autor: oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: HDW (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

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

mfg  olaf

Autor: oli (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi


B'1111' = B'11110000'  <- ha, jetzt ist bei mir der groschen
gefallen.

alles klar.

Danke oli

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.