Hola a todos, estoy realizando un contador, con PIC16F877A, y las interrupciones por cambio de estado en los pines RB6 (Cuenta ascendente) y RB7(cuenta descendente). El caso es que no consigo que me muestre el valor actualizado del contador en el LCD. Se me queda en 0 todo el rato. Depurando el código veo que entra en la rutina de interrupción y sale de esta sin problema, no se a que puede deberse. La libreria del LCD que estoy utilizando es LCDD.C para la placa de desarrollo UNIDS-6.Está casi todo comentado porque he probado simplemente a imprimir un mensaje en la interrupción pero tampoco me lo muestra.
#include <16f877a.h>
#fuses HS, NOWDT
#use delay(clock=8000000)
#include <LCD_digi2_unids6.c>
#USE FAST_IO(B)
long contador;
long pulsaciones;
#int_rb
void interrupt_irs(void){
//delay_ms(50);
printf(lcd_putc, "INTERRUPCIÓN");
//delay_ms(500);
/*
if(input(PIN_B6)==0){
contador=contador+1;
pulsaciones=pulsaciones+1;
}
if(input(PIN_B7)==0){
contador=contador-1;
pulsaciones=pulsaciones+1;
}
if(contador==100) contador=0;
if(contador==-1) contador=99;
if(pulsaciones==1000) pulsaciones=0;
*/
}
void main(){
lcd_init();
delay_ms(100);
contador=0;
pulsaciones=0;
port_b_pullups(true);
lcd_gotoxy(1,1);
printf(lcd_putc, "Cuenta = %lu", contador);
delay_ms(250);
lcd_gotoxy(1,2);
printf(lcd_putc, "Pulsaciones = %lu", pulsaciones);
delay_ms(250);
set_tris_B(0xFF);
clear_interrupt(int_rb);
enable_interrupts(int_rb);
enable_interrupts(global);
while(true){
sleep();
/*delay_cycles(1);
lcd_putc("\f");
delay_ms(500);
lcd_gotoxy(1,1);
delay_ms(500);
printf(lcd_putc, "Cuenta = %lu", contador);
delay_ms(500);
lcd_gotoxy(1,2);
delay_ms(500);
printf(lcd_putc, "Pulsaciones = %lu", pulsaciones);
delay_ms(500);*/
}
}
Gracias de antemano y un saludo.