Para tu interrupción debería quedar algo así...
void RDA_is()
{
recibido = ' ';
dato_recibido = TRUE;
}
y el programa principal...
void main()
{
lcd_init();
lcd_putc("\fRecibiendo...");
enable_interrupts(Global);
enable_interrupts(INT_RDA);
while(TRUE)
{
if (dato_recibido == TRUE)
{
Hacer todas las evaluaciones de switch
dato_recibido = FALSE;
}
}
}
Por supuesto dato_recibido tiene que ser una variable global para poder modificarla tanto en la interrupción como en el bloque principal
No sé como manejará CCS los fuses, pero la idea es la siguiente...
HSPLL le indica al pic que se usa un cristal de cuarzo HS (high speed), pero que la frecuencia de trabajo está dada por el PLL interno.
PLL5 indica que la entrada del PLL viene dada por la entrada del cristal dividido 5. Esto es 20MHz/5 = 4MHz (siempre la entrada del PLL tiene que ser de 4MHz)
CPUDIV indica cual es el factor de división a partir de la frecuencia del PLL para obtener la frecuencia del CPU. El PLL genera 96MHz, por lo tanto si tienes CPUDIV2, la frecuencia de CPU es 48MHz.
En el datasheet tienes la información respecto a las distintas posibilidades del oscilador.