Guten Abend alle zusammen, ich habe hier mal eine Frage. Vielleicht habe ich einfach nur ein Brett vor dem Kopf oder ich bin wirklich zu blöd. Also ich habe hier auf meinem Board 4 Taster und da ich platzsparend arbeiten will, möchte ich die 4 Zustände jedes Tasters mit 2 Bit in einem Byte speichern, also die ersten 2 Bit des Bytes für den ersten Taster, die zweiten 2 Bit für den zweiten Taster, und so weiter. Dazu nehmen wir bei Programmstart einmal 0b00000000 an. Meine Frage ist jetzt: Wie kann ich 2 bestimmte Bits dieses Bytes überschreiben? Jetzt denkt ihr sicher alle: Klar, mit einer Bitmaske. Ich will aber, dass sich die anderen Bits dabei nicht verändern. Wie mache ich das? Danke schonmal. Gruß
>möchte ich die 4 Zustände jedes Tasters
Taser ist gedrückt oder nicht.
Welche anderen beiden Zustände haben deine Taster?
So wie ich das hiernach verstanden habe: http://www.mikrocontroller.net/articles/Entprellung Soll es 4 Zustände geben. Ich will eben, dass mein Programm nur weiter fortgeführt wird, wenn der Taster zum Beispiel gedrückt wurde und losgelassen wurde, dafür die 4 Zustände, so wie es auch in dem Artikel steht.
> Klar, mit einer Bitmaske. > Ich will aber, dass sich die anderen Bits dabei nicht verändern. Wieso "aber"? DAS genau ist doch Sinn einer Bitmaske... Wenn die Bits 1 werden sollen: logisches ODER mit den Bits. Wenn die Bits 0 werden sollen: logisches AND mit dem Komplement der Bits.
> Wieso "aber"? DAS genau ist doch Sinn einer Bitmaske... > Wenn die Bits 1 werden sollen: logisches ODER mit den Bits. > Wenn die Bits 0 werden sollen: logisches AND mit dem Komplement der > Bits. Das ist genau der Teil, wo ich ein Brett vor dem Kopf habe. Ich denke irgendwie, dass die Bits bei einem logischen AND den Rest überschreiben und bei einem logischen ODER nicht das gewünschte Ergebnis bringen.
vielleicht so? Tasten Status: 0babcdefgh header:
1 | #define TASTENSTATUS_SET_A 0b10000000
|
2 | #define TASTENSTATUS_SET_B 0b01000000
|
3 | |
4 | #define TASTENSTATUS_RESET_A 0b01111111
|
5 | #define TASTENSTATUS_RESET_B 0b10111111
|
6 | |
7 | #define TASTENSTATUS_SET_C 0b00100000
|
8 | #define TASTENSTATUS_SET_D 0b00010000
|
9 | |
10 | #define TASTENSTATUS_RESET_C 0b11011111
|
11 | #define TASTENSTATUS_RESET_D 0b11101111
|
12 | ...
|
main:
1 | unsign char TastenStatus; |
2 | |
3 | // Tasten Status 0 abfragen
|
4 | if (..) |
5 | {
|
6 | /* SET A */
|
7 | if (..) |
8 | {
|
9 | TastenStatus |= TASTENSTATUS_SET_A; |
10 | }
|
11 | /* RESET A */
|
12 | if(..) |
13 | {
|
14 | TastenStatus &= TASTENSTATUS_RESET_A; |
15 | }
|
16 | }
|
17 | ...
|
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.