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
da sieht man den wald vor bäumen nicht xD wenn das so simpel gehen würde wäre es genial danke^^
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
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
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?
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
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
wunderbar vielen dank... habe auch festgestellt, das ich in die verkehrte richtung schiebe... aber deins ist eh kürzer und eleganter=)
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.