www.mikrocontroller.net

Forum: Compiler & IDEs Wahrscheinlich einfaches schiebe Problem


Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Juergen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: tacklemoe (Gast)
Datum:

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

Gruß und danke
tacklemoe

Autor: Richard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: tacklemoe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.