Fisch wrote:
> Hallo.
> Wenn du das ganze Register auslesen möchtest:
> variableL = ADCL
> variableH = ADCH
Dafür bietet jeder mir bekannte AVR-C-Compiler ein 16-Bit-Register ADC
oder ADCW an. Das Auslesen der Einzelregister ist in C unsinnig, außer,
man hat ADLAR gesetzt und will nur das High-Byte auslesen. Die
Verwendung des 16-Bit-Registers sorgt auch dafür, dass man sich um die
Reihenfolge des Auslesens keine Gedanken machen muss. Und wenn man es
doch unbedingt machen will, muss man eben unbedingt beachten, dass das
Low-Byte vor dem High-Byte gelesen werden muss.
> Wenn du nur einzelne Bits checken willst:
>
> if (ADCL & (1<<Bit))
> //Bit gesetzt
> else
> //Bit nicht gesetzt
Das geht schief. Wenn ADCL gelesen wird, muss IMMER anschließend ADCH
gelesen werden, weil sonst beide Register gesperrt bleiben und der ADC
keinen neuen Wert reinschreiben kann! Abgesehen davon ist es i.d.R.
sinnfrei, in den ADC-Datenregistern einzelne Bits abzufragen...