Wahrscheinlich einfaches schiebe Problem

Gast #76128
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
Gast #76129
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.
Gast #76130
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.
Gast #76131
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
Gast #76133
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).

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.