1.
заменить
if(Pin_ENC_F2) n |= EF2; //проверка линии F2
n ^= n >> 1;
на
if( Pin_ENC_F2 )
n ^= 3;
2. Ваш код опять неправильно обрабатывает последовательность 2-1-0-1-2. Как правильно сделать один шаг из четырех я написал ранее.
3. Чтобы ъоть как-то побороть энкодеры с окислами - заменить в моем коде строки
выкинуть глюкавый энкодер;
break;
на
return;
и пропустить оба сигнала энкодера через одинаковые ФНЧ первого порядка с последующим квантователем. Это позволит при быстром вращении выделить правильные переходы и задавить переходы от окислов, которые будут идти с большей частотой.