Вот так будет понятнее?
#define Fnum 3
unsigned char a_mtemp[Fnum];
unsigned char a_dtemp[Fnum];
unsigned char amp_offset;
unsigned char Temp_cur;
#define MUX_offset 0x16
#define MUX_dry 0x14
#define MUX_moist 0x17
void LoadTemperature(void)
{
unsigned int temp;
unsigned char i;
ADCSR |= 1 << ADSC; // strat conversion
while ((ADCSR & (1 << ADIF)) == 0);
ADCSR |= (1 << ADIF); //clear interrupt flag
temp = ADC;
switch (ADMUX)
{
case MUX_offset:
amp_offset = temp;
ADMUX = MUX_moist;
break;
case MUX_moist:
ADMUX = MUX_dry;
break;
case MUX_dry:
for (i = 0; i < Fnum - 1; i++)
{
a_dtemp[i] = a_dtemp[i + 1];
}
a_dtemp[Fnum] = (temp - amp_offset) / (Fnum + 1); // <----- а зачем ты здесь делишь?
temp = 0;
for (i = 0; i < Fnum; i++)
{
temp += a_dtemp[i];
}
temp /= Fnum + 1; // <----- получается два раза?
Temp_cur = temp;
ADMUX = MUX_offset;
break;
}
}