Gast
#364773
Immer wieder stoße ich auf folgendes Problem. In einem Register möchte
ich ein oder mehrere Bits setzen und den Rest unverändert lassen.
Leider weiß ich nicht ob das jeweilige Bit eine 0 oder eins sein wird
weil es z. B. aus einer Variablen kommt. Sonst könnte ich ja mit:
x |= (1 << Bitnummer); // wird ein Bit in x gesetzt
x &= ~(1 << Bitnummer); // wird ein Bit in x geloescht
arbeiten.
Im Aktuellen Fall möchte ich beim ATmega8 den Analogwert an belibigen
Pins auslesen. Dazu soll dann nur noch der Pin in ADMUX angepasst
werden. Der Rest zum einstellen des ADC´s wurde bereits in einer Init
erledigt:
unsigned int Read_ADC(unsigned char pin)
{
unsigned int AD_Result;
ADMUX = ?????????; // Kanal / Pin einstellen
ADCSRA |= (1<<ADSC); // ADC Starten
while(ADCSRA & (1<<ADSC)); // AD Wandlung abwarten
AD_Result = ADCL; // Unteren 8 Bit des Meßwertes auslesen
AD_Result |= (ADCH<<8); // Oberen 8 Bit des Meßwertes auslesen
return AD_Result;
}
Gesucht ist also für ????????? so was wie "pin<<0" aber ohne das der
Rest (Bit7:4) des Registers verändert wird.
Hat da jemand eine Idee?