#include <18F2550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,VREGEN
#use delay(clock=4000000)
//Pines para lcd_flex
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E PIN_C2
#include "flex_lcd.c"
int8 interrupcion=0;
int1 primer;
///LLAMADA FUNCION INTERRUPCION
#INT_EXT
void IntRB0()
{ if(primer==0){
primer=1;
}else{
interrupcion++;
if(interrupcion>9){ //9?
interrupcion=0;//Resetea
}
lcd_putc('\f'); //borra lcd
lcd_gotoxy(1,1);
printf(lcd_putc
,"Esperando interrupcion \n"); //muestra por pantalla el mensaje delay_ms(10);
printf(lcd_putc
,"Interrupcion:%u",interrupcion
); delay_ms(200);//Evitar rebotes
}
}
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
///PROGRAMA
primer=0;
interrupcion=0;
lcd_init(); //inicializa lcd
lcd_putc('\f'); //borra lcd
//Mensaje de inicio y conteo interrupciones
printf(lcd_putc
,"Esperando interrupcion \n"); //muestra por pantalla el mensaje delay_ms(10);
printf(lcd_putc
,"Interrupcion:%u",interrupcion
); delay_ms(1000);//Evitar rebotes
//Activamos interrupciones e interrupcion externa en rb0
//SE hace despues de usar el lcd para evitar rebotes al conectar la corriente
enable_interrupts(int_ext); //activar interrupcion externa
ext_int_edge(H_TO_L); //configuracion:interrupcion cuando señal esta en alta
enable_interrupts(GLOBAL); //todas las interrupciones activadas
while(1)
{
}
}