#include <16f876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,BROWNOUT,PUT
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
/////////////////////////////Working Vars//////////////////////////////////////
int16 counter=0;
int1 ina=0,inb=0,PLast=0;
/////////////////////////////////////////
#INT_RB
void rb_isr(void){
ina=input(pin_b4);
inb=input(pin_b5);
///////////////////////////////////////////
if((PLast==0)&&(ina==1)){
if(inb==0){counter--;}
else {counter++;}
}
PLast = ina;
printf("Encoder = %05Ld \r",counter);
}
////////////////////////////////////////////////////////////////////////////////
void main(void) {
set_tris_a (0b00000001);
set_tris_b (0b11110001);
set_tris_c (0b10000001);
setup_adc_ports(NO_ANALOGS);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
printf("\rRotary Encoder Test\r");
delay_ms(500);
///////////////////////////////////////////
while (true){
}
}