А я вообще для дискретных устройств по другому поступаю.
Создаю в памяти образы входных и выходных бит.
В основном цикле в одном блоке получаю все входные битовые переменные, далее тело обработки, далее - в одном блоке вывожу все выходные. Естественно, приколы типа повисеть в прерывании пару секунд - не наш метод