Спойлер
Код: Выделить всё
interrupt [ADC_INT] void adc_isr(void)
{
// Read the 8 most significant bits
// of the AD conversion result
switch (ADMUX) {
case 0x64 : //PC4
{
ADCvol2[z2]=ADCH;
zz2+=ADCvol2[z2];
z2++;
if (z2>=10) {adctotal_2=zz2/10; z2=0; zz2=0;}
if ((adctotal_2+1 == adctotal_22)||(adctotal_2-1 == adctotal_22)||(adctotal_2+2 == adctotal_22)||(adctotal_2-2 == adctotal_22))
{ADC_CURRENT=adctotal_2;
adctotal_22=(adctotal_2+adctotal_22+adctotal_22)/3;}
else
{
ADC_CURRENT=adctotal_2;
adctotal_22=adctotal_2;
}
ADMUX = 0x65;
break;
}
case 0x65 : //PC5
{
ADCvol1[z1]=ADCH;
zz1+=ADCvol1[z1];
z1++;
if (z1>=10) {adctotal_1=zz1/10; z1=0; zz1=0;}
if ((adctotal_1+1 == adctotal_12)||(adctotal_1-1 == adctotal_12)||(adctotal_1+2 == adctotal_12)||(adctotal_1-2 == adctotal_12))
{ADC_U_DCBUS=adctotal_1;
adctotal_12=(adctotal_1+adctotal_12+adctotal_12)/3;}
else
{
ADC_U_DCBUS=adctotal_1;
adctotal_12=adctotal_1;
}
ADMUX = 0x63;
break;
}
case 0x63 : //PC3
{
ADCvol3[z3]=ADCH;
zz3+=ADCvol3[z3];
z3++;
if (z3>=10) {adctotal_3=zz3/10; z3=0; zz3=0;}
if ((adctotal_3+1 == adctotal_32)||(adctotal_3-1 == adctotal_32)||(adctotal_3+2 == adctotal_32)||(adctotal_3-2 == adctotal_32))
{ADC_U_3PHASE=adctotal_3;
adctotal_32=(adctotal_3+adctotal_32+adctotal_32)/3;}
else
{
ADC_U_3PHASE=adctotal_3;
adctotal_32=adctotal_3;
}
ADMUX = 0x62;
break;
}
case 0x62 : //PC2
{
ADCvol4[z4]=ADCH;
zz4+=ADCvol4[z4];
z4++;
if (z4>=10) {adctotal_4=zz4/10; z4=0; zz4=0;}
if ((adctotal_4+1 == adctotal_42)||(adctotal_4-1 == adctotal_42)||(adctotal_4+2 == adctotal_42)||(adctotal_4-2 == adctotal_42))
{ADC_TEMP_IRAMS=adctotal_4;
adctotal_42=(adctotal_4+adctotal_42+adctotal_42)/3;}
else
{
ADC_TEMP_IRAMS=adctotal_4;
adctotal_42=adctotal_4;
}
ADMUX = 0x64;
break;
}
};
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
}


