У меня в промышленном контроллере цифровые входы выполнены на оптронах, которые питаются переменкой. Поэтому на порты микроконтроллера поступает пульсирующий сигнал, который обязательно нужно фильтровать. Хотя и для постоянки это не лишнее. Фильтрация производится в окне 20 мс. Входы опрашиваются через 1 мс по флагу, который выставляется в прерывании. В зависимости от считанного значения производится inc/dec переменных, ассоциированных с каждым дискретным входом. Когда окно заканчивается, принимается решение о состоянии входов. Для этого значения переменных сравниваются с порогами, а затем обнуляются. Порога два, чтобы иметь гистерезис. Результат сравнения (текущее состояние входов) заносится в переменную, где каждому входу отведен бит. Вот эту переменную и мониторит процесс, которому требуется знать состояние входов.