Naja. Leider bedeutet der Code nicht das, was Du verbal beschreibst.
Das hier:
1 | if ((GainSen1 | GainSen2 | GainSen3 | GainSen4) == 0x13)
|
bedeutet nicht, dass die Bedingung war wird, falls einer der
GainSenX-Werte == 0x13 ist.
Vielmehr bedeutet es, dass die Bedingung wahr wird, falls _die
Bitweise-Oder Verknüpfung aller_ GenSenX Werte == 0x13 ist.
Dem Fehlerbeispiel entsprechend ergibt das Folgendes:
Seien Bit 6 und Bit 1 des Schalter gesetzt.
GainSen1 = ((PIND >> 6)&0x03)|0x10;
GainSen4 = (PIND & 0x03)|0x10;
mit Eingabe ergibt sich:
GainSen1 = ((0x82 >> 6)&0x03)|0x10;
GainSen4 = (0x82 & 0x03)|0x10;
nach dem schieben:
GainSen1 = (0x02 & 0x03)|0x10;
GainSen4 = (0x81 & 0x03)|0x10;
nach der Und-Verknüpfung
GainSen1 = (0x02 |0x10;
GainSen4 = (0x01)|0x10;
nach der Oder Verknüpfung
GainSen1 = 0x12;
GainSen4 = 0x11;
In der IF-Bedingung werden diese Werte nochmal Oder-Verknüpft.
GainSen1 | ... | GainSen4;
0x12 | ... | 0x11;
was eben 0x13 ergibt.
Erst danach vergleichst Du ja mit 0x13.