Nabend an alle... ich stell mich gerade wahnsinnig bescheuert an! Folgendes Problem: ich möchte bestimmte Bits von PORTB mit dem Wert aus einer uint8_t Variablen betanken, während die anderen Bits von PortB unverändert bleiben. Beispiel: uint8_t tmp = 0b00010100 Wenn ich nun PORTB = tmp setze, werden ja alle mit null definierten Bits auch null gesetzt. Nun möchte ich, das aus der Variablen tmp nur die kombination "101" die entsprechenden Bits auf PORTB ändert. Alle anderen Bits sollen hiervon unberührt bleiben. Ich glaub das Stichwort ist Bitmaskierung. Jedoch frage ich mich, wie ich die Maske in diesem Fall auf PORTB anwenden kann? Herzlichen Dank schonmal im Voraus... Grüße
chris schrieb: > kombination "101" die entsprechenden Bits auf PORTB ändert Das heißt Du willst die Einsen setzen, oder auch die Nullen am Port löschen? Wenn Du nur die Einsen aus Deiner Tempvariable setzen möchtest, ohne die Null in der Variable ebenfalls auf den Port zu übertragen, dann geht das einfach mit einem ODER:
1 | PORTB = PORTB |temp; |
Gruß
Hallo chris, wenn Du wirklich "101" setzen willst, sollte es so funktionieren uint8_t tmp_mask = 0b00011100; PORTB = (PORTB & ~tmp_mask) | (tmp & tmp_mask); Viele Grüße l_boppi
SUUUPPPPPER! Danke lboppi.... genau das wollte ich! Da wär ich so nich drauf gekommen... das ist DIE LÖSUNG! Allerherzlichen Dank für die superschnelle Lösung :)))))
Dann solltest Du nochmal im Tutorial vorbeischauen oder ein C-Buch lesen! Sind echt wichtige Grundlagen.
Hmm, wahrscheinlich hab ichs nicht kapiert... uint8_t mask = 0b00011100; uint8_t tmp = 0b00010100; PORTB = (PORTB & ~mask) | tmp;
Hrmpf... wenn ich jetz erzähle das ich studierter Informatiker bin... aber muss leider von Berufs wegen nur mit java Webapps schreiben... da hab ich mir nen knoten Gegrübelt... Bin voll raus aus hardwarenaher Programmierung in c. Aber ich gelobe Besserung und werd den K&R mal wieder ausm Keller holen. Versprochen
heinz schrieb: > Hmm, wahrscheinlich hab ichs nicht kapiert... > > uint8_t mask = 0b00011100; > uint8_t tmp = 0b00010100; > > PORTB = (PORTB & ~mask) | tmp; Mit dieser Variante hättest du das Problem das wenn in tmp zufällig nicht nur Bit[5:3] high sind, das du auch die anderen bits mit übergibst ... Beispiel: tmp= 0b11100011 würde in jedem Fall an PORTB 0b11100011 ergeben auch wenn PORTB 0x00 war.
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.