uchar PORTBbuf; if(RBIF){//下降沿触发 PORTBbuf=PORTB; switch(PORTBbuf&0b00010100){ case 0b00000000: case 0b00010100:lengthcnt--; break; case 0b00000100: case 0b00010000:lengthcnt++; break; default: break; } PORTBbuf=PORTB; RBIF=false; if(lengthcnt&0x8000){lengthcnt=0;} else{ if(lengthcnt>20000){lengthcnt=20000;} } } ---------------------------------------------- 实际测试了一下,目前确实没看到有什么误差。 做法:把A相信号连接到了MCU的电平变化中断上,不过是上升沿和下降沿都肯定有电平变化中断的发生,当MCU发生电平变化中断后,将执行上面的这段代码,A相连接到PORTB.4上,B相连接到PORTB.0上,PORTBbuf=PORTB;--》读取PORTB端口状态,下面的switch(PORTBbuf&0b00010100)则根据冬发君的不同正转,相同则反转的方法计算编码盘的脉冲数。
再次感谢HWM老师、冬发君、洗丸剂先生的帮助, 目前来说,这个问题似乎已经解决了,呵呵,继续测试测试,看看是否还会有其他问题!!! |