//::::::::::::::::::::::::::::::::::::::::::::::::::::::
// Входы
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
void Inputs_Processor(void/*u8_t* sel_port, u8_t sel_pin*/)
{
unsigned char i;
unsigned char tmp; //*sel_port &= ~(1 << sel_pin);
i = 0;
do
{
//Если таймер антидребезга пустой
if(dig_inputs.debounce_timer[i] == 0)
{
//Если процедура антидребезга не проводилась
if((dig_inputs.debounce_timeout & (1 << i)) == 0)
{
//Если значение на пине изменилось
tmp = dig_inputs.state;
if(((tmp & (1 << i)) == 0) != ((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) == 0))
{
if((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) != 0)
{
dig_inputs.tmp_state |= (1 << i);
}
else
{
dig_inputs.tmp_state &= ~(1 << i);
}
dig_inputs.debounce_timer[i] = DIG_INPUT_DEBOUNCE_TIME; //Запустим антидребезг
dig_inputs.debounce_timeout |= (1 << i);
}
}
else
{
//Если процедура антидребезга проводилась
//Если значение на пине снова изменилось
tmp = dig_inputs.tmp_state;
if(((tmp & (1 << i)) == 0) != ((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) == 0))
{
if((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) != 0)
{
dig_inputs.tmp_state |= (1 << i);
}
else
{
dig_inputs.tmp_state &= ~(1 << i);
}
dig_inputs.debounce_timer[i] = DIG_INPUT_DEBOUNCE_TIME; //Запустим антидребезг
}
else
{
//Если в теч. времени антидребезга значение на пине не менялось
//запомним новое значение
if(((dig_inputs.state & (1 << i)) == 0) != ((dig_inputs.tmp_state & (1 << i)) == 0))
{
if((dig_inputs.tmp_state & (1 << i)) != 0)
{
dig_inputs.state |= (1 << i);
}
else
{
dig_inputs.state &= ~(1 << i);
}
dig_inputs.hold &= ~(1 << i); //Сбросим флаг удержания
}
dig_inputs.debounce_timeout &= ~(1 << i);
}
}
}
else
{
//Если процедура антидребезга в процессе
//Если значение на пине снова изменилось
tmp = dig_inputs.tmp_state;
if(((tmp & (1 << i)) == 0) != ((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) == 0))
{
//Запомним новое значение
if((DIG_IN_PIN & (1 << (DIG_IN_1 + i))) != 0)
{
dig_inputs.tmp_state |= (1 << i);
}
else
{
dig_inputs.tmp_state &= ~(1 << i);
}
dig_inputs.debounce_timer[i] = DIG_INPUT_DEBOUNCE_TIME; //Перезарядим таймер антидребезга
}
}
i++;
}while(i //*sel_port |= (1 << sel_pin);
}