//------------------ Фильтрация сигналов цифрового ввода: --------------------
void Exe_Dio(void)
{
if(fInp)
{
fInp = 0; //сброс флага опроса
if(!Port_IN1) In_Cnt[0]++; //обновление счетчиков
if(!Port_IN2) In_Cnt[1]++;
if(!Port_IN3) In_Cnt[2]++;
if(!Port_IN4) In_Cnt[3]++;
if(!--Smp_Cnt) //если сделаны все выборки
{
Smp_Cnt = SAMPLES; //перезагрузка счетчика выборок
if(In_Cnt[0] > IN_THRS1) In_State |= 1;
if(In_Cnt[0] < IN_THRS0) In_State &= ~1;
if(In_Cnt[1] > IN_THRS1) In_State |= 2;
if(In_Cnt[1] < IN_THRS0) In_State &= ~2;
if(In_Cnt[2] > IN_THRS1) In_State |= 4;
if(In_Cnt[2] < IN_THRS0) In_State &= ~4;
if(In_Cnt[3] > IN_THRS1) In_State |= 8;
if(In_Cnt[3] < IN_THRS0) In_State &= ~8;
In_Cnt[0] = 0; //очистка счетчиков фильтра
In_Cnt[1] = 0;
In_Cnt[2] = 0;
In_Cnt[3] = 0;
}
}
}