Опрашиваю периодически (часто) по таймеру состояние выводов энкодера. Для устранения дребезга проверяю состояние за два периода, и если оно совпадает, считаю состояние устойчивым.
Сравниваю новое состояние с предыдущим устойчивым (разность нахожу). Если разность:
0 - ничего не делаю
1 - добавляю 1 к счетчику энкодера
-1 - вычитаю 1 из счетчика энкодера
2 или -2 - ошибка (слишком быстро вращается), ничего не делаю.
Периодически (редко) пересылаю состояние изменившихся органов управления (в том числе, счетчики энкодеров) по последовательному порту тому, кому надо. :-)
После этого счетчик энкодера обнуляю.
Типа того. На PIC16

На C.