Написал небольшой кусочек кода для
подавления дребезга контактов, IMHO данный
код должен "фильтровать" ложные срабатывания
менее заданного периода.
Но почему-то не покидает ощущение того, что
в коде могут оказаться грабли

Какие еще есть правильные методы,
либо можно это сделать проще или красивее?
Пример для одного бита порта ввода:
#define BOUNCE_CANCELLATION_PERIOD 20
unsigned char BITcounter=0; //счетчик состояний бита
bit BITstate=0; //используемое (устойчивое) состояние бита (более 20 мсек)
bit BITmemory=0; // промежуточная переменная, запоминающаяя предыдущее состояние бита
bit toggled=0; //флаг,указывающий на изменение состояния бита
interrupt Timer0() //возникает 1 раз в мсек
{
if(BITmemory^BITn){if(toggled){BITcounter=0;} toggled=1;}
if(toggled ){BITcounter++;}
if(BITcounter==BOUNCE_CANCELLATION_PERIOD){BITstate=BITn;BITcounter=0;toggled=0;
}
BITmemory=BITn; //чтение с порта
}
Вот, примерно так...