if anweisung in abhängikeit eines Bit in einer Variable

Gast #965223
Lesenswert?

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 
:-)
#965235
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren