if anweisung in abhängikeit eines Bit in einer Variable

Gast #965223
Hallo wie kann man eine if Anweisung in C programmieren die nur auf ein 
Bit ein einer Variablen reagiert ich habe ein atmega16 z.B.

1
uint8_t Speicher;  
2
Speicher = PINC;   // 8 bit aus Pin C in die Variable laden 
3

4
  if (Speicher)   // Hier soll stehen das die if anweisung nur reagiert -
5
   {              // wenn das 1 Bit in der Variable Speicher eine 1 ist -
6
                  // egal wie die anderen Bits sind.
7
    Programm teil
8
   }

Danke schon mal bitte in leicht erklären bin noch neu in diesem Wasser 
:-)
Gast #965230
>if (speicher & 0x01)

Hier müssen die anderen bit aber 0 sein die if anweisung soll aber 
starten egal was die anderen bits machen!

oder habe ich das nicht richtig verstanden
#965235
stefan wrote:
>>if (speicher & 0x01)
>
> Hier müssen die anderen bit aber 0 sein
Nein.

> die if anweisung soll aber
> starten egal was die anderen bits machen!
Das tut die auch! Bitte schau mal in einem C-Buch oder im 
AVR-GCC-Tutorial nach, was der &-Operator macht!

> oder habe ich das nicht richtig verstanden
Hast Du nicht.

Und lies Dir mal die Forenregeln durch bzw. den Artikel zum Thema 
Netiquette. Groß- und Kleinschreibung und Zeichensetzung sind kein 
Luxus!
Gast #965244
Aller Anfang ist schwer. Und Bitmanipulationen in C sind etwas 
gewöhnungsbedürftig. Normalerweise würde man das so machen:
1
// in einer .h  Datei
2
#define BIT_TO_TEST 1
3

4
// in der .c Datei
5
if ( PINC & (1<<BIT_TO_TEST) ){
6
     // do something if bit is set
7

8
}

Das & ist eine Bitweise UND-Verknüpfung. Wenn PINC zum Beispiel 
0b10101010 wäre, dann ist (1<<BIT_TO_TEST) gleich 0b00000010 und als 
Ergebnis der UND-Verknüpfung kommt dann
1
0b10101010
2
0b00000010
3
----------
4
0b00000010

heraus. Dies ist ungleich 0 also TRUE und der Anweisungsteil der If 
Anweisung wird ausgeführt.

Wäre PINC = 0b10101000 dann würde folgendes herauskommen:
1
0b10101000
2
0b00000010
3
----------
4
0b00000000

Dies ist gleich 0 also FALSE und der Anweisungsteil der If Anweisung 
wird nicht ausgeführt.

Es wird also wie gewollt nur das Bit 1 getestet.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.