ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
22 ноября
4308 Топик полностью
=AlexD= (14.01.2004 09:59, просмотров: 1) ответил suhum на Проблема с голбальным массивом (+)
Вот так будет понятнее? 

#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;
    }
}