Ich möchte mir vor eine Portopertaion die Bits 5,6, und 7 merken, und nach der Operation wieder genau so setzt wie sie vor der Operation waren. Aber nur die 3 Bits, alle andern sollen unverändert bleiben. Wie kann man das am schnellsten lösen ? Das merken habe ich mal so gelöst: unsigned char portd_old = 0x00; portd_old = PORTD & 0xE0; Aber wie setzte ich die Bits jetzt wieder möglichst effektiv ohne die anderen Bits zu beeinflussen ? Gruß Alex
Die eine grosse boolsche Operation hast du doch schon gefunden, da kann der Weg zur Anderen doch auch nicht soooooo schwer sein.... Und wenn du doch nicht drauf kommst kannst du deine Merkvariable auch einfach in eine Weitere umspeichern und später zurücklesen :-) Viele Wege führen nach Rom. bye Frank
Ach so, vergiss das rückspeichern, du wolltest ja die restlichen Bits nicht anfassen. Also nur die Operation suchen die das Gegenteil von der bisher genutzten macht.
Na ja. Mit einer Operation kommt er bei der Restaurierung nicht weiter. Es sind schon 2 Operationen: Mit der ersten werden gezielt alle zu restaurierenden Bits auf 1 gesetzt. Mit der 2-ten werden dann die 0-Bits aus der gemerkten Variable gesetzt. @Alexander: Wie man Bits gezielt auf 0 setzen weist du ja schon: Mit einem &: Überall wo in der Maske eine 0 steht, kommt im Ergebnis mit Sicherheit auf eine 0 hin. Die andere Operation ist ein |. Mit der kann man Bits gezielt auf 1 zwingen.
Danke für die Tips. Das scheint eine Lösung zu sein: // Status von Bit 5,6 und 7 merken unsigned char portd_old = 0x00; portd_old = PORTD & 0xE0; /* Do something */ // Status von Bit 5,6 und 7 wiederherstellen PORTD &= ~(0xE0); PORTD |= portd_old; Gruß Alex
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.