ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
8 июля
263129
silver (21.07.2011 17:48, просмотров: 18474)
Подскажите насчет обработки сигнала от энкодера.  Использую обычный механический энкодер пробую обрабатывать сигнал так void Timer4_ISR(void) interrupt 16 { SFRPAGE = CONFIG_PAGE; sost=P5&0x01; sost2=P5&0x10;//опрашиваю соответствующие пины порта if(sost==1) {encoder|=0x01;} if(sost==0) {encoder&=0xFE;} if(sost2==1) {encoder|=0x02;} if(sost2==0) {encoder&=0xFD;}//заношу в переменную эти значения encoder2=encoder; if (status != encoder2)//если теккущее состояние не равно предидущему //соответственно увеличиваю или уменьшаю значение { switch (encoder2) { case 0: if (status == 0x01) {status=0; temp --;} break; case 0x02: if (status == 0x03) {status=0; temp ++;} break; case 0x01: if (status == 0x00) {status=0; temp ++;} break; case 0x03: if (status == 0x02) {status=0; temp --;} break; } status = encoder; encoder=0; encoder2=0;// } delay(1000); } проблема в дребезге. Как лучше его устранить программно?