Цитата(NikP @ Mar 18 2010, 18:20)

AD0BUSY = 1;
//**3
V_out_k=Cena_razr*ADC_out; //**1
.
//***1
Так Вы даете команду на преобразование и тут же считываете содержимое, которое у Вас осталось от предыдущего преобразования. Это в корне неверно. В другой ситуации у Вас между этими строками попадет прерывание и Вы уже считаете новое значение (а может быть какое-то ложное).
Нужно запустить преобразование, дождаться снятия флага AD0BUSY (поллингом или, лучше, в прерывании), а затем считать нужное значение и только после этого можно давать команду на новое преобразование. Как-то так.
PS. После изменения канала мультиплексора AMX0P = хх и командой AD0BUSY = 1; необходимо обеспечить время заряда входных емкостей. У Вас идет без задержек - обеспечивается ли требуемое время? Могут быть ошибки в измерениях.