При каком прерывании ее вызывать - компилятор узнает из строчки:
interrupt[ADC_INT]
По-первому зарезервированному слову - interrupt - он узнаёт, что речь идет об обработчике прерывания, а номер вектора прерывания (адрес куда физически, внутри МК перескочит программа при возникновении прерывания) будет подставлен вместо ADC_INT препроцессором компилятора перед компиляцией
Очень информативна и тем ценна для обучающегося следующая строка программы:
PORTB = (unsigned char) ~(ADCW>>2);
Давайте проанализируем, как она работает.
= оператор присваивания. Он означает присвоить значение выражения справа от оператора присваивания той переменной, что указана слева от него.
Значит нужно вычислить выражение справа и поместить его в переменную PORTB.
Вычислим, что справа от оператора присваивания.
ADCW - это переменная слово
VMLAB только 8 светодиодов - значит нужно отобразить 8 старших бит результата - т.е. биты_9_2 - для этого мы сдвигаем все биты слова ADCW вправо на 2 позиции