С Хай-теком всё в порядке, Вы сами себя замучили такой кашей, компилятор тут ни при чём. Ни к чему здесь наверняка ни асм-овые вставки, ни хитрости с прерываниями. Разберитесь сначала с битами конфигурации, работой АЦП. Выравнивание происходит правильно? MPLAB используете? В нём всё просто и удобно. Для объединения байтов в int есть несколько вариантов. Я использовал такой:
Код
.......
union {unsigned int wor; unsigned char by[2];} voltIN;
.......
Vcm.by[0]=ADRESL; // младший байт
Vcm.by[1]=ADRESH; // старший байт
.......
HEXDEC(Vcm.wor); // обращение к целому int-у
.......
И зачем Вам это:
Код
<span class="postcolor">volatile unsigned int U[3];// @ 0x20; //массив из трех двухбайтных элементов </span>
почему не просто:
Код
unsigned int U[3]; //массив из трех двухбайтных элементов