Hola:
Llevo un rato con este código y no consigo ver donde está el error. No consigo que entre la interrupción para la recepción serie. Se queda todo el rato en el main. El código es para programar comandos AT con el bluetooth HC05 o HC06. Una vez que se le envía un comando AT, el Bluetooth responde OK o un String con la información del comando AT. En este caso le programo el nombre del dispositivo. Debería recibir OK pero no entra la interrupción.
#include <16f88.h>
#device adc=10
#fuses INTRC_IO,NOWDT,NOPROTECT,NOLVP,NOWRT,NODEBUG,NOMCLR
#use delay(internal=8M)
#use rs232(baud=38400,xmit=PIN_B5,rcv=PIN_B2)
#include "flex_lcd420.c"
#byte TRISA = 0x85
#byte TRISB = 0x86
#byte OPTION_REG = 0x81
#bit RBPU = OPTION_REG.7
char BLUE_BUFFER[20];
int aux=0;
#int_RDA //vector de interrupción al recibir por la UART
void RDA_isr(){
BLUE_BUFFER[0]=getc();
BLUE_BUFFER[1]=getc();
BLUE_BUFFER[2]=getc();
BLUE_BUFFER[3]=getc();
aux=1;
}
void main(){
RBPU = 0; // Pull-up enabled
setup_adc_ports(SAN2|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
enable_interrupts(INT_RDA); //habilita interrupción por recepción
enable_interrupts(global);
set_adc_channel(2);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"AT commands...");
delay_ms(2000);
printf("AT+NAME=HC05");
putc('\r'); //Transmite CR
putc('\n'); //Transmite avance de linea
delay_ms(500);
while(1){
if(aux){
lcd_gotoxy(1,1);
printf(lcd_putc,"\fBT Answer:");
lcd_gotoxy(1,2);
printf(lcd_putc,"BT: %2c",BLUE_BUFFER);
delay_ms(100);
}else{
lcd_gotoxy(1,1);
printf(lcd_putc,"\fWaiting BT...");
delay_ms(100);
}
}
}