Yo estoy usando el 16F628A con salida serie, oscilador interno y master reset interno.
Las comunicaciones a 9600. recibo 3 caracteres por la puerta serie y contesto con uno cada 50 milisegundos aproximadamente. Todo esto va a una red de 50, a 100 nodos rs485 y me funciona de vicio (muy bien). Hay instalados unas 5000 unidades y van bien las comunicaciones.
Puedes tener problema si transmites cadenas largas por la puerta serie opr la inestabilidad del oscilador, pero si transmites pocos caracteres no tendrás problemas.
Mis setings en el programa son estos:
"***************************************
"* FUSIBLES *
"***************************************
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT "Reloj interno solo
@ DEVICE pic16F628, WDT_OFF " Watchdog Timer desconectado
@ DEVICE pic16F628, PWRT_ON " Power-On Timer conectado
@ DEVICE pic16F628, BOD_ON " Brown-Out Detect conectado
@ DEVICE pic16F628, MCLR_OFF " Master Clear Externo desconectado
@ DEVICE pic16F628, LVP_OFF " Low-Voltage Programming desconectado
@ DEVICE pic16F628, CPD_OFF " Data Memory Code Protect desconectado
@ DEVICE pic16F628, PROTECT_ON " Program Code Protection conectado
"*****************************
"* DEFINE *
"*****************************
DEFINE OSC 4 " Ajuste de la frecuencia del oscilador en 4MHz
DEFINE SER2_BITS 8 "Ajusto la transmision a 8 bits sin paridad
DEFINE NO_CLRWDT 1 "Obligo a que no ponga CLRWD automatico
define CHAR_PACING 1000 "Tiempo entre caracteres de la puerta serie 1ms
pintran var PORTB.2 "Pin de transmision serie
pinreci VAR PORTB.1 "Pin de recepcion serie
dato1 var BYTE "Almacena el 1er dato de la puerta serie
dato2 var BYTE "Almacena el 2o dato de la puerta serie
dato3 var BYTE "Almacena el 3er dato de la puerta serie
velocidad=84 "Ajusto la velocidad a 9600,N,8,1 modo verdadero
espera=95 "Tiempo de espera de recepcion 95 milisegundos
serin2 pinreci,velocidad,espera,sigo,[dato1,dato2,dato3]
Espero que te sirva,
Saludos,
Ricky