www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem bitweiser vergleich PIC ASM


Autor: Hugolein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus

bräuchte mal kurz hilfe, vielleicht fällt einem eine elegante lösung 
ein:
uC PIC in assembler

ich lese in meinem projekt unter anderem meine ports ein, und habe immer 
2 pins mit entgegengesetzem pegel, ich möchte überprüfen, ob das immer 
der fall ist oder ob ein fehler vorliegt und dementsprechend leds 
setzen.

led setzen aber nur pro pärchen ob defekt und das nur wenn mindestens 2 
mal oder öfter dieser fehler hintereinander  beim selbem pärchen 
auftritt.

für jeden möglichen fall jeweils eine abfrage mit abspeicherung zu 
machen finde ich sehr unelegant aufwendig und vorallem verbraucht es 
sicher zu viele ressourcen...

hat jemand eine idee oder kann er mir in assembler schreiben wie es 
aussehen müsste? wären portb also 8 pins, also 4 pärchen.

Ich danke schonmal im vorraus, vielleicht weiß jemand eine elegante und 
kurze lösung

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1xShift und XOR.

Autor: hugolein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
da sieht man den wald vor bäumen nicht xD wenn das so simpel gehen würde 
wäre es genial danke^^

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber nicht vergessen: Der PIC rotiert immer durch's Carry. Also je nach 
linkem oder rechten Bit (bei RLF bzw. RRF) das C zuerst setzen!

Gruss

Michael

Autor: Hugolein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wäre das demnach so richtig? wie muss die fehlerausgabe dann sein?

[code]
sigveri
    rrf altshift,f      ; rightshift in f
    movfw alt           ;
    xorwf altshift,f    ; exclusiv-oder in f
    rrf neushift,f      ; rightshift in f
    skpz                ; skip if zero
    incf fehler         ; increment fehler
    movfw neu           ;
    xorwf shiftfehler,f ; exclusiv-oder in f
    skpz                ; skip if zero
    incf shiftfehler    ; increment fehler
    btfss shiftfehler,1 ; wenn fehler = 2
    b  fehler
    clrf shiftfehler  ; clear fehler
    b   sigend
;---------------------------
fehler  btfsc
    bsf LED_A_Fehler
    btfsc
    bsf LED_B_Fehler
    btfsc
    bsf LED_C_Fehler
    b  sigend

Autor: Hugolein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meine signale sehen nämlih so aus:

0 0 -C C -B B -A A

geht das dann überhaupt so? schiebe ich überhaupt richtig, wie muss ich 
das carry setzen?

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hugolein,

rotieren war doch wohl die falsche Idee...lass mich nochmal nachfragen, 
bevor ich falschen Code schicke:

Du hast einen Port (B), als Eingang oder Ausgang? (R-M-W Problem!)
jedenfalls sind es hier nur noch drei Paerchen A..C.
Du willst immer einen Alarm erzeugen, wenn A = -A ODER B = -B oder C = 
-C, richtig?


Gruss

Michael

Autor: Michael Roek (mexman) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
war ein irrtum, rotieren geht doch und das Carry ist egal, da nur die 
geraden Bits vergelichen werden:

[code]

rrf   PortB, w    ;rotiere Port B nach rechts in W
movwf mirror      ;und speichere ab
comf  PortB, w    ;lade PortB invertiert nach W
xorf  mirror, w   ;vergleiche
andlw b'00010101  ;maskiere bit 0,2,4
bnz  fehler       ;wenn bit 0 oder bit 2 oder  bit 4 = 1 -> fehler
goto weitergehts

Autor: Hugolein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wunderbar vielen dank...

habe auch festgestellt, das ich in die verkehrte richtung schiebe...
aber deins ist eh kürzer und eleganter=)

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.