#include <16F877A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
#use delay(clock=4000000)
#include <lcd_portc.c>
/******************************************************************************/
//Definicion de variables.
int cuenta,cambio;
/*****************************************************************************/
// Vector interrupcion.
#INT_RB
void ext_isr(){
switch(cambio){
case 0: if((input(PIN_B4))&&(!input(PIN_B5))){
cuenta++;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x01;
}else{
if((!input(PIN_B4))&&(input(PIN_B5))){
cuenta--;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x02;
}
}
break;
case 1: if((input(PIN_B4))&&(input(PIN_B5))){
cuenta++;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x03;
}
break;
case 2: if((input(PIN_B4))&&(input(PIN_B5))){
cuenta--;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x03;
}
break;
case 3: if((!input(PIN_B4))&&(input(PIN_B5))){
cuenta++;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x04;
}else{
if((input(PIN_B4))&&(!input(PIN_B5))){
cuenta--;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0x05;
}
}
break;
case 4: if((!input(PIN_B4))&&(!input(PIN_B5))){
cuenta++;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0;
}
break;
case 5: if((!input(PIN_B4))&&(!input(PIN_B5))){
cuenta--;
lcd_gotoxy(1,2);
printf(lcd_putc,"%U",cuenta);
cambio=0;
}
break;
default: break;
}
}
/******************************************************************************/
void main(){
cuenta=0;
cambio=0;
enable_interrupts(int_rb); //habilita la interrupcion externa (Rb0).
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Prueba");
enable_interrupts(GLOBAL);
do{
}while(TRUE);
}