Que tal Josepunki,
Antes que nada y sin causar ninguna ofensa ni herir sentimientos. Te recomiendo que simpre que uses cualquier micro tengas el datasheet de este contigo ya que ahi se encuentra la respuesta a muchas preguntas del funcionameinto de cada uno de los perifericos de los micorocntroladore. Para el caso del USART existe un solo capitulo que habla de como configurar y usar el USART.
Para tu caso voy a darte un peuqnio empujon, para lo que necesitas y te mostrare que todo esta ahi en el datasheet, solo hay que leer detenidamente y con paciencia.
Ok, comencemos.
Primero antes que nada debes saber que el protocolo serial asincrono consta de 1 bit de paro, 8 o 9 bits de datos (aunque existen otras configuraciones, pero no estan soportadas directamente por este micro), 1 bit de paro. Y debido a que es asincrono necesitamos definirle un baudrate o velocidad de transmision en la que existen varias de ellas, las mas comune son:
1200 bps
2400 bps
4800 bps
9600 bps
19200 bps
38400 bps
57600 bpss
115200 bps
Las anteriores son baudrates standard, pero se pueden generar valores no standar. Entonces la pregunta es como donfigura ese baud rateLeyendo el datasheet en delmicrocontrolado en la pagina 63 ahi se encuntras las ecuaciones que nos ayudan a configura el baud rate. y nos muestra 3, pero solo dos definene el modo asincrono que son:
LOW speed: BR = Fosc/(64(X+1))
High speed: BR = Fosc/(16(X+1))
Asi pues no esta diciendo que el micro en forma asincrona tiene dos modos de operacion: Low speed y High speed el cual se configura en el bit BRGH (bit 2 del rgistro TXSTA), el cual si es 0 es low speed y 1 para high speed.
Como no mencionas el baud rate que deseas voy suponer y proponer que deseas 9600 bps.
Entonces, veamos si es posible obtneer ese baud rate en el modo de low speed.
Despejando X de la primera ecuacion:
X = (Fosc/(64*BR)) - 1
Sustituyendo:
X = (4Mhz/(64*9600))-1
X = (4MHz/614400)-1
X= 6.5 -1
X = 5.5
Pero como solo pueden ser valores enteros este debe ser 6 el cual se cargara en el registro SPBRG
Ahora veamos cual es el porcentaje de error que obtendria con este valor en el SPBRG.
Primero Regresando a la ecuacion 1.
BR = 4MHz/(64(6+1))
BR = 4MHz(64*7)
BR = 4MHz/448
BR = 8928.57 bps
Entonces el porcentaje de error es:
%E = ((8928.57-9600)/9600)*100
%E = ((-671.43)/9600)*100
%E = -.069 *100
%E = -6.99%
Como puedes ver el nivel de porcentaje es muy alto, el standard serial recomineda que el error debe ser maximo del 3%. Por lo tanto no es posible generar ese baud rate en modo low speed.
Ahora veamos que pasa en modo high speed.
Despejando X de la ecuacion 2;
X= (Fosc/(16*BR)) - 1
Sustituyendo:
X = (4MHz/(16*9600)) - 1
X = (4MHz/153600) -1
X = 26.04 -1
X = 25.01 o sea 25.
Calculemos el baud rate generado con este valor.
BR = 4MHz/(16(25+1))
BR = 4MHz/(16*26)
BR = 4MHz/416
BR = 9615.38 bps
el porciento de error es:
%E = ((9615.38-9600)/9600)*100
%E = (15.38/9600)*100
%E = 0.0016 *100
%E = 0.16%
Como puedes ver el porcentaje de error es muy pequenio, menor al 1%, por lo tanto es aceptado.
Ahora ya sabes que debe colocar un 1 en el bit BRGH y que el registro SPBRG lo debes cargar con 25 decimal.
Con respecto a tu pregunta que cuantos bits, eso depende de tu procotocolo aunque lo standar es 8 bits.
Con respecto a que si es posible generar una interrupcion cuando se reciben datos ,calro que es posible y en el datasheet lo explica perfectamente. En las pagina 67 explica como configurar la transmision y en la pagina 69 la recepcion ademas de mencionar si se desea obtner una interrupcion cuando se reciben datos.
Saludos y espero que esta basta explicacion te ayude y vuelvo repetir no te molestes ni te ofendas, pero todo esto esta en el datasheet.
Elreypic.