ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
264258 Топик полностью
silver (28.07.2011 14:56, просмотров: 79) ответил Леонид Иванович на Не просто в одинаковом, а когда оба контакта замкнуты.
в общем, с учетом всех советов, получилось у меня вот что  void Timer4_ISR(void) interrupt 16 { SFRPAGE=CONFIG_PAGE; encoder=P5&17;//получаю данные с порта if (encoder!=encoderprev)//если два соседних состояния не равны { if (encoderprev==0)//если в предыдущем состоянии контакты были разомкнуты { if (prevprev==encoder||prevprev==17)//и если предпредыдущее состояние было //начало вращения либо "покой"(оба контакта замкнуты) { if (encoder==1){temp++;}// увеличиваю либо уменьшаю величину if (encoder==16){temp--;} }} if (encoderprev==17)// если предыдущее состояние было "покой" { if (prevprev==encoder||prevprev==17) { if (encoder==16){temp++;} if (encoder==1){temp--;} }} prevprev=encoderprev; encoderprev=encoder; encoder=0; } работает, относительно предыдущего кода нормально, но не всегда срабатывает, иногда чтобы значение увеличилось на единицу нужно провернуть рукоятку несколько раз, а иногда наоборот, чуть провернул и сразу идет увеличение значения на несколько единиц. В обшем не совсем стабильно.