#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短才行,手指是沒可能達到這速度