Hola,
Tengo un problema con las interrupciones con la USART usando el compilador de microchip C18.
Tengo un programa que me envía datos al pc y los leo perfectamente desde el hiperterminal pero que no me recibe correctamente o la interrupción en la recepción no me funciona: Tras estar 20 o 30 sgundos enviando un 5 un montón de veces desde el hiperterminal entonces me salta a la interrupción y además el valor que hay almacenado en el RCREG no se corresponde al enviado. No sé que estoy haciendo mal. La parte del código es esta:
//El código de la interrupción
#pragma code high_vector=0x08
void interrupt_at_high_vector(void)
{
_asm GOTO high_isr _endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr(void){
unsigned char data;
/*Obtener el caracter recibido de la USART*/
if (DataRdyUSART())
{
data = ReadUSART();
}
/*Clear the interrupt flag*/
PIR1bits.RCIF = 0;
}
//---------------------------------------------------------------------
//Y la Configuración de la USART dentro del main
//---------------------------------------------------------------------
OpenUSART( USART_TX_INT_OFF &
USART_RX_INT_ON &
USART_ASYNCH_MODE &
USART_EIGHT_BIT &
USART_CONT_RX &
USART_BRGH_HIGH,
25 ); //12 19200 y 25 para 9600
/*Enable interrupt priority*/
RCONbits.IPEN = 1;
/*Make receive interrupt high priority*/
IPR1bits.RCIP = 1;
/*Enable all high priority interrupts*/
INTCONbits.GIEH = 1;