und weiter geht das lustige Fragenstellen ^^ also: da ich keinen kompletten Eingang mehr frei hab, hab ich die Lichtschranken auf mehrere Eingänge aufteilen müssen Sie liegen jetzt auf PD2-PD3-PD4-PD5-PD6-PD7 und PB0-PB1 und ich möchte daraus jetzt ein Byte aufbauen mit folgender Reihenfolge: PD2-PD3-PD4-PD5-PD6-PD7-PB0-PB1 natürlich könnte ich die einzelnen Bits getrennt voneinander abfragen und ggf. im Ergebnis-Byte setzen, aber so viel Zeit hab ich nicht ^^ (außerdem muss es da doch eine schönere Lösung geben) mfg, Johannes
Hmm, Varialble definieren und Bit setzten. Das ist zu einfach oder Deine Frage ist nicht richtig gestellt?
PD zweimal nach rechts schieben und mit 0x3F verUNDen. PB zweimal nach rechts schieben (ohne carry) oder sechs mal nach links und mit 0x03 verUNDen. Beide Register nun miteinander verODERn. Stichwort Maskierung
Dafür gibt es keine wirklich schöne Lösung. Das Hauptproblem ist, dass du die Wertigkeit der Bits umgedreht haben willst (oder hast du dich nur ungeschickt ausgedrückt, da oben). Wenn PD2 als Bit7 gesetzt werden soll, bleibt nicht viel übrig außer ABfragen und Bit setzen. Wnn dem nicht so ist dann ist das ganze ein simples Schieben und ver-odern der beiden Teile: unsigned char Total; unsigned char PinD, PinB; PinD = PIND; PinB = PINB; Total = ( Pind << 2 ) | ( PinB & 0x03 );
x = (PIND & 0xFC) | (PINB & 0x03); Dann steht aber PD7-PD6-PD5-PD4-PD3-PD2-PB1-PD0 in x...
> Hmm, Varialble definieren und Bit setzten. Das ist zu einfach oder > Deine Frage ist nicht richtig gestellt? also ich habe die bytes 00###### und ##000000 (wobei # für die werte steht, die ich haben will, und 0 für uninteressante werte (muss aber nicht 0 sein)) jetzt möchte ich daraus ######## machen, die reihenfolge der # ist die gleiche wie oben. und ich kann es nicht von hand machen, da mein programm das öfters erledigen soll.
was ich noch vergessen hatte: assembler ^^ (macht die sache natürlich nicht gerade schöner)
In welcher Sprache programmierst du? Und wäre es noch möglich die Sache anderstrum anzuschließen, dass sich das Byte aus: PD7-PD6-PD5-PD4-PD3-PD2-PB1-PB0 zusammensetzt, dann könntest ganz einfach mit: tmp = R16 tmp2 = R17 in tmp, PinD ;PortD einlesen andi tmp, 0b11111100 ;Die unteren beiden Bits löschen in tmp2, PinB ;PortB einlesen andi tmp2, 0b00000011 ; Die obenren 6 Bits löschen or tmp, tmp2 ;Logisch ODER verknüpft. dein Byte ist in tmp. Ansonsten müsstens du deine Positionen deines eingelesenen Bytes verschieben. Gruß Marc
ich glaube jetzt haben wirs. danke marc hatte mich oben in der reihenfolge vertan, wobei die reihenfolge eigentlich egal ist ^^
übers Carryflag aus einem Register raus, andere Richtung in ein zweites Register rein, also 6* ror rol dann ist die Reihenfolge gespiegelt
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.