Вывожу значение регистра ADCDATAL, в шестнадцатеричном виде, в результате показывает постоянно разные значения: 3400, 2а00, 2800, 2600 и тп.
Значение ADCDATAH не прыгает, 3а00. Хотя после первого ресета изменилось.
Если вот такой код загрузить, то получается абракадабра, то 12288, то -2457, 16384 и тп.
void display_voltage(void) interrupt 6 {
unsigned int ADCValue;
unsigned char lcd_buffer[6];
ADCValue = (ADCDATAL + (ADCDATAH&0x0F))<<12;
//ADCValue=(long)(ADCValue*2500UL/4096);
//ADCValue=(ADCValue/1000);
sprintf (lcd_buffer,"U=%i V", ADCValue);
send_lcd(set_first_line, lcd_buffer);
}
Цитата(rezident @ Oct 4 2010, 19:01)

Почему <<12? Должно быть <<8 . Причем скобки не там стоят.
Код
ADCValue = ADCDATAL + (ADCDATAH&0x0F)<<8;
Ну ADCDATAH это ведь старший байт, а в старшей его тетраде хранится номер канала, поэтому как я понимаю ее нужно обнулить и передвинуть в самый конец. Или я неправильно понимаю?
Заметил что значения все эти прыгают независимо от того подключена ли батарейка к АЦП или нет