Hola de nuevo.
He echo este programa de prueba.
Lo tengo conectado a hyperterminal.
Cuando pulso PIN_A0 habilito interrupción, pulso cualquier tecla PC y me aparece en LCD.
Si pulso PIN_A1 deshabilito interrupción, pulso cualquier tecla en teclado de PC y no me aparece en LCD pero en cuanto pulso PIN_A0 me aparecen los caracteres que había pulsado cuando estaba deshabilitada la interrupción.
Si pulso muchas teclas estando deshabilitada interrupción se queda colgado PIC.
Este es el programa.
Gracias.
#include <16F876.h>
#include <STRING.h>
#fuses XT,NOWDT,PUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) //manejo del RS232
#include <flex_lcd.h>
void serial_isr (void);
void Add_buffrec (char c);
#int_rda
void serial_isr()
{
output_low(PIN_B0);
if(kbhit())
{
Add_buffrec(getc());
}
}
void Add_buffrec (char c)
{
output_low(PIN_B1);
lcd_putc(c);
}
void main (void)
{
SET_TRIS_A(0xFF); //Configuramos Puerto A como entradas
SET_TRIS_B(0x00);
OUTPUT_B(0x00);
lcd_init();
lcd_putc("Esperar");
delay_ms(5000);
lcd_init();
while (true)
{
if (input(PIN_A0))
{
enable_interrupts(GLOBAL);
enable_interrupts(int_rda);
output_high(PIN_B0);
while (input(PIN_A0))
{
}
}
if (input(PIN_A1))
{
disable_interrupts(int_rda);
while (input(PIN_A1))
{
}
}
}
}