Forum: Mikrocontroller und Digitale Elektronik Frage zur Bitmaskierung


von Dariusz K. (geqoo)


Lesenswert?

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ß

von Matthias L. (Gast)


Lesenswert?

>möchte ich die 4 Zustände jedes Tasters

Taser ist gedrückt oder nicht.

Welche anderen beiden Zustände haben deine Taster?

von Dariusz K. (geqoo)


Lesenswert?

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.

von Bödefeld (Gast)


Lesenswert?

> 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.

von Dariusz K. (geqoo)


Lesenswert?

> 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.

von troll (Gast)


Lesenswert?

Bitmanipulation kennst du?

von Dariusz K. (geqoo)


Lesenswert?

Da steht, was ich gesucht habe, danke!

von IchBinDieBitmaske (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.