void Auswertung_Eingaenge (void) { for (uint8_t i=0; i<=15; i++) // Auswertung der Einheit bzw. Type: High-Byte Bit 4 bis 6 { // siehe https://www.mikrocontroller.net/articles/Bitmanipulation#Standard-C_4 if ((DLWerte.t.Temp[i] & 0x7000) == 0) // Bit 4 bis 7 = 0 ? --> Eingang unbenutzt Type_Eingang[i] = UNBENUTZT; // 0 if (DLWerte.t.Temp[i] & 0x1000) // Bit 4 gesetzt? --> digital Type_Eingang Type_Eingang[i] = DIGITAL; // 1 if (DLWerte.t.Temp[i] & 0x2000) // Bit 5 gesetzt? --> Temperatur Type_Eingang[i] = TEMPERATUR; // 2 if ((DLWerte.t.Temp[i] & 0x3000) == 0x3000) // Bit 4 und 5 gesetzt? --> Volumenstrom Type_Eingang[i] = VOLUMENSTROM; // 3 if ((DLWerte.t.Temp[i] & 0x6000) == 0x6000) // Bit 5 und 6 gesetzt? --> Strahlung Type_Eingang[i] = STRAHLUNG; // 4 if ((DLWerte.t.Temp[i] & 0x7000) == 0x7000) // Bit 4 bis 6 gesetzt? --> RAS (Raumsensor) { Type_Eingang[i] = RAS; // 5 // Betriebsmodus von RAS: High-Byte Bit 1 und 2 if ((DLWerte.t.Temp[i] & 0x0600) == 0) // Bit 1 und 2 = 0 ? --> Auto-Betrieb RAS_Mode_Eingang[i] = AUTO; // 0 if (DLWerte.t.Temp[i] & 0x0200) // Bit 1 = 1 ? --> Normal-Betrieb RAS_Mode_Eingang[i] = NORMAL; // 1 if (DLWerte.t.Temp[i] & 0x0400) // Bit 2 = 1 ? --> Absenk-Betrieb RAS_Mode_Eingang[i] = ABSENK; // 2 if ((DLWerte.t.Temp[i] & 0x0600) == 0x0600) // Bit 1 und 2 = 1 ? --> Standby-Betrieb RAS_Mode_Eingang[i] = STANDBY; // 3 } } for (uint8_t i=0; i<=15; i++) // Umwandlung in Integer durch maskieren der Bit 4 bis 6 { // Bit 4 - 6 kodieren die Einheit bzw. Type if (Type_Eingang[i] <= STRAHLUNG) // RAS hat andere Kodierung! { if (DLWerte.t.Temp[i] & 0x8000) // neg Zahl? DLWerte.t.Temp[i] |= 0xF000; // Bit 4 bis 6 setzten else DLWerte.t.Temp[i] &= ~0xF000; // bei pos Zahl Bit 4 bis 6 löschen } else if (Type_Eingang[i] == RAS) // RAS als Sensor { // Wie muß RAS Temperaturwert maskiert werden??? } } }