Вместо:
Цитата
tmp = (unsigned int) ADCL;
tmpH = (unsigned int) ADCH; tmpH = tmpH << 8;
tmp = tmp + tmpH;
tmp = tmp >> 2; // получаем результат в младших 8 битах
я бы сделал так:
Код
tmp = (unsigned int) ADCL;
tmpH = (unsigned int) ADCH;
tmp+=tmpH*0x100;
tmp>>=2;
Хотя вроде можно к ADC обратится как 16-разрядному регистру, поэтому первые 3 операции можно исключить.
Все вышесказанное верно, если у вас не включен режим выравнивания результата влево.