Como podras ver en varias consultas en algunos de los foros de diferentes lenguajes, deberas hacer manejo del control de errores que posee la usart.
Hay un bit quem te indica error de recepcion, por lo tanto deberas testearlo transcurridos algunos milisegundos (Hserin posee esa opcion) y saltas a una etiqueta donde reseteas el bit de error.
Sino el micro se cuelga!!
El hecho que hayas cambiado de velocidad de micro hace que el error posible de recepcion de la UART sea mas aceptable, por lo cual tarda mas en producirse.
Esto es comprobable cuando hay tramas muy largas (preguntale a Pacala sino) y el error porcentual se acumula, originando un error de recepcion por falta de sincronismo.
Aqui va un ejemplo de como utilizar la interrupcion y considerar el bit de error:
Codigo:
disable
Interrupcion:
INTCON.7 = 0 "apago interrupciones generales
INTCON.6 = 0 "idem con perifericas
INTCON.5 = 0 "idem con Int de TMR0
if (PIR1.5 = 1) then "no es interrupcion del TMR0, es TX
hserin Espera,LabelExit2,[WAIT (">"
,hex2 DirIn,SKIP 1,hex2 CheckIn]
" hserin Espera,LabelExit,[WAIT (">",RX4),SKIP 1,hex2 CheckIn]
" hserin Espera,LabelExit,[hex2 DirIn,SKIP 1,hex2 ChecKIn]
gosub CalcCheckIn
if (DirIn = Direccion)and (ChecKIn = MiCheck) then
Gosub PrepDigitos
gosub TXint
endif
endif
if (INTCON.2 = 1) then "Si hay bandera de interrupcion por Timer0
ticks = ticks + 1 " Cuenta partes de segundo
INTCON.2 = 0 " Reseteo bandera de interrupcion por Timer0
IF ticks < 61 Then LabelExit
" 61 ticks por segundo (16.384ms por tick)
ticks = 0 " Paso un segundo - actualizo tiempo
Convert = ticks
second = second + 1
CantConv = AuxConv "guardo cantidad de conversiones por segundo
AuxConv = 0 "limpio auxiliar de conversiones por segundo
Var1 = Var2 "guardo actualizaciones de display por segundo
Var2 = 0 "limpio actualizaciones de display por segundo
IF second >= 3600 Then "si algo no paso antes borro cuenta
second = 0
endif
endif
LabelExit2:
RCSTA.4 = 0 "reparo error de recepcion
LabelExit:
RCSTA.4 = 1 "habilito recepcion continua
INTCON.7 = 1 "enciendo interrupciones generales
INTCON.6 = 1 "idem con perifericas
INTCON.5 = 1 "idem con Int de TMR0
RESUME

Codigo:
wsave var BYTE $020 SYSTEM
wsave1 var BYTE $0a0 SYSTEM
wsave2 var BYTE $120 SYSTEM
wsave3 var BYTE $1a0 SYSTEM
ssave var BYTE BANK0 SYSTEM
psave var BYTE BANK0 SYSTEM
;*****************************************************************************************
;*****************************************************************************************
;
; If you are using a PIC with 2K or less,
; you MUST unremarke the lines that follow.
;
; movwf wsave ;only for PICs with 2k or less
; swapf STATUS,w ;only for PICs with 2k or less
; clrf STATUS ;only for PICs with 2k or less
; movwf ssave ;only for PICs with 2k or less
; movf PCLATH,w ;only for PICs with 2k or less
; movwf psave ;only for PICs with 2k or less
;
;*****************************************************************************************
;*****************************************************************************************
; interrupcode follows here
bla
bla
bla
ble
;end of interruptcode
; restorecode follows here
movf psave,w ;restore
movwf PCLATH
swapf ssave,w
movwf STATUS
swapf wsave,f
swapf wsave,w
retfie
seguro que al salir no restaura correctamente los registros , intenta así