Continuando con la saga, al final me ha salido mejor de lo que esperaba, hice una funcion mas para cambio de velocidad de UART que me funciona perfectamente, ya que anteriormente el cambiar la velocidad en caliente del PIC era imposible, os dejo el codigo para CCS:
/******************************************************************/
//Funcion para el cambio de velocidad y limpieza de buffer del PIC
void cambia_velocidad_uart (int16 velocidad)
{
disable_interrupts(INT_RDA);
if (velocidad == 4800) //solo valido de 1 a 5
set_uart_speed(4800);
else if (velocidad == 9600)
set_uart_speed(9600);
else if (velocidad == 19200)
set_uart_speed(19200);
else if (velocidad == 38400)
set_uart_speed(38400);
else if (velocidad == 57600)
set_uart_speed(57600);
limpia_buffer232();
enable_interrupts(INT_RDA);
}
/******************************************************************/
Y por supuesto la creme de la creme
//limpieza buffer de recepcion RS232 30-04-2010
void limpia_buffer232 (void)
{
while(kbhit()) {
getc();
}
//Limpia el bit Overrun Error OERR limpiando el bit CREN de RCSTA
//Útil para cuando se quiere ignorar una cadena RS232
bit_clear(*0x0FAB,4);
//Y lo vuelve a activar
bit_set(*0x0FAB,4);
}
Saludos!!!