IAR действительно позволяет ADC сразу считать.
Код
unsigned int tmp=ADC;
А вот так, например, у меня от таймера перебирает каналы:
Код
#pragma vector=TIMER0_OVF_vect
__interrupt void TIMER0()
{
static unsigned char adc_chanel=0;
unsigned int value=ADC;
switch(adc_chanel)
{
case 0:
U0=value;
adc_chanel++;
break;
case 1:
U1=value;
adc_chanel++;
break;
case 2:
U2=value;
adc_chanel++;
break;
case 3:
U3=value;
adc_chanel=6;
break;
case 6:
U6=value;
adc_chanel++;
break;
case 7:
U7=value;
adc_chanel=0;
break;
}
//Запустим следующее преобразование
ADMUX=adc_chanel;
ADCSR|=(1<<ADSC);
}