Все заработало

Но есть две проблемы:
1. Если вход АЦП "висит" воздухе, то дисплей показывает значение опорного напряжения. Это в принципе понятно, но иногда наблюдается аномалия: внезапно напряжение начинает падать, а потом снова восстанавливается до 2.5В (опорное напряжение АЦП). Снова держится некоторое время на 2.5В, а потом опять начинает падать. Если подать на АЦП какое либо напряжение, например батарейку 1.5В, то он показывает напряжение батарейки без каких либо сбоев.
Вообщем то это не страшно, главное напряжение измеряет как надо, вот следующая проблема меня волнует гораздо больше:
2. Если сначала подключить батарейку, а потом заземлить вход АЦП, то последние 2 разряда "зависают". То есть в дисплей никакой информации он них не посылается, хотя они должны сброситься в 0. Например, подключаю батарейку, он показывает: 1.578, потом заземляю вход АЦП и дисплей показывает: 0.078. Если же заземлить вход АЦП и нажать ресет, то на дисплее появляется 0.0.
То есть на дисплей не выводятся последние 2 разряда при нулевом напряжении. Как эту проблему исправить?
Вот рабочий код:
void display_voltage(void) interrupt 6 {
unsigned int ADCValue;
ADCValue = ADCDATAL + (ADCDATAH&0x0F)*256;
ADCValue=((long)ADCValue*2500)/4096;
sprintf (lcd_buffer,"U=%d.%d", ADCValue/1000, ADCValue%1000);
send_lcd(set_first_line, lcd_buffer);
}