En el programa veo OSCCAL=0, si usas cristal no afecta.
Pero si usas el oscilador interno tienes que hacer OSCCAL= AL DATO
DE LA ULTIMA POSICION DE MEMORIA, siempre y cuando no este
borrado. Este dato es la calibracion de fabrica que da microchip.
Si se ha borrado tendras que calcularlo, el dato esta sobre 60decimal.
Tambien para en contrar mejor el dato usa una velocidad mas
baja de serie y programa por ejemplo un contador que incrementa
el valor de osccal desde cero despues de una pausa envia el valor
osccal al puerto serie lo monitorizas y llegara un momento que
veas el valor de ajuste, lo suficientemente bueno como para
que funciones la rutina serie.
OSCCAL= AL DATO DE LA ULTIMA POSICION DE MEMORIA... el dato esta sobre 60decimal