#define ROTATE_A PIND.2
#define ROTATE_B PIND.3
uchar CW=0;
uchar CCW=0;
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if(ROTATE_A!=ROTATE_B)
{
CW++;
}
else CCW++;
}
void main(void)
{
if ((CW|CCW)!=0)
{
DATA=DATA+CW-CCW;
}
CW=0;
CCW=0;
delay_ms(50);
}
//////////////////////////////////////////
占用一个外中断,电平变化触发,CW是顺时针转过的脉冲,CCW是逆时针
每50ms处理一下数值,如果想要出错,起码脉冲时间要比50ms/256短才行,手指是没可能达到这速度