Forum: Compiler & IDEs Wahrscheinlich einfaches schiebe Problem


von tacklemoe (Gast)


Lesenswert?

Bin mal wieder überfordert ;)
Habe ein Byte das 8 Tasten darstellt. Jetzt möchte ich natürlich gerne
wissen welche Tasten gedrückt sind damit ich entsprechend auf die
jeweilige Taste reagieren kann.
Die Tasten sind 0 aktiv, also wenn sie gedrückt sind erscheint eine log
0.

Wie komme ich jetzt an die einzelnen Bits ran?

Gruß und danke im Vorraus
tacklemoe

von Juergen (Gast)


Lesenswert?

z.B indem du eine Schleife acht mal durläufst und dabei dein Byte mit
einem "Mask-Byte" logisch UND verknüpfst. Das Mask-Byte setzt Du am
Anfang der vor der Schleife auf 1, dann wird in der Schleife abgefragt,
ob die Uund-Verknüpfung 0 ergibt (dann war der Taster gedrückt) und am
Ende der Schleife schiebst Du das die 1 im Maskbyte um eine Stelle nach
links, durläufst die Schleife wieder und fragst so die anderen Taster
ab.

von tacklemoe (Gast)


Lesenswert?

Ähm, und wie sehe das im Code aus? Ich hab mich da jetzt bissle probiert
aber bin net wirklich weitergekommen :(
Mein Ansatz ging in diese Richtung:

   for(i=0;i<8;i++)
   {
   if(i2c_buffer && mask_byte) rprintf("%d ",i);

   mask_byte <<= 0;
   }

Allerdings werden dann immer alle Bits angezeigt.

von Dieter (Gast)


Lesenswert?

Schon fast gut


   mask_byte = 1
   for(i=0;i<8;i++)
   {
   if(i2c_buffer & mask_byte) rprintf("%d ",i);
   /* nur ein & zeichen
      beide Bytes verunden  */
   mask_byte <<= 1; /* einmal links schieben */
   }

habe es selbst nicht getestet.

Dieter

von tacklemoe (Gast)


Lesenswert?

Jep das klappt. Jetzt seh ich's auch selbst.. Hab nicht das
bitvergleichende AND genommen ;)

Gruß und danke
tacklemoe

von Richard (Gast)


Lesenswert?

Wenn du nicht das Maskbyte verschiebst, sondern deine eingelesenen
Werte, dann erhältst du immer die Werte 0 oder 1 und nicht 1, 2, 4...
wie bei der aktuellen Umsetzung. (Falls dich das stört).

von tacklemoe (Gast)


Lesenswert?

Danke für den Tipp. Die jetzige Lösung ist aber grade richtig für meinen
Anwendungszweck, ich übergebe die entsprechenden BitNummern direkt an
eine Funktion die dann weitermacht :)

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.