Sei sulla pagina 1di 12

USART PIC Comunicación

serial

USART PIC, viene de receptor


transmisor síncrono asíncrono universal, es una forma de comunicación
entre dispositivos que tengan esta capacidad, donde los datos son
enviados en grupos de 8 bits o de 9 bits pero bit por bit, esto es en
serie, por eso se dice que esta es una comunicación serial, en esta
sección se comentará sobre este tipo de comunicación utilizando
el módulo USART del microcontrolador PIC, con el módulo USART PIC el
microcontrolador puede comunicarse e intercambiar datos con el
ordenador, con otros microcontroladores, etc.

Para la comunicación entre microcontroladores y para la comunicación


entre el microcontrolador y el ordenador, se necesitan 2 hilos de
conducción para la transmisión y recepción de datos, y un hilo de
conducción para la conexión de los comunes o GND que tienen que ser
los mismos, para la comunicación serial entre el microcontrolador y el
ordenador se seguirá la norma RS232.
Si la comunicación USART PIC es asíncrona, uno de los hilos será
para la transmisión de los datos de un dispositivo a otro y el otro hilo
será para la recepción de datos entre un dispositivo a otro, la
transmisión y la recepción pueden ocurrir en forma simultanea, lo que si
se tiene que cumplir es que la frecuencia de trabajo de ambos
dispositivos tiene que ser la misma, a esto se le conoce como los
baudios que viene a ser la cantidad de bits por segundo que se
transmitirán entre ambos dispositivos.
Si la comunicación USART PIC es síncrona, uno de los hilos será
utilizado tanto para la transmisión y la recepción de datos por lo que la
transmisión no puede ocurrir en forma simultanea, el otro hilo será
utilizado para enviar la señal de reloj de sincronización entre ambos
dispositivos, en este caso uno de los dispositivos es llamado maestro y el
otro esclavo, el maestro es el que controla la señal de reloj y cuando se
inicia o finaliza la comunicación.

El microcontrolador
PIC utilizado como modelo será el PIC16F877A, los pines de este
microcontrolador que trabajan con el módulo USART PIC son el pin RX o
pin receptor y el pin TX o pin transmisor, los que en la imagen están
resaltados resaltados.
El pin RX es el pin para la recepción de datos y tendrá que ser
configurado como una entrada digital.
El pin TX es el pin para la transmisión de datos y tendrá que ser
configurado como una salida digital.
El pin RX del PIC tiene que ser conectado al pin TX del otro dispositivo.
El pin TX del PIC tiene que ser conectado al pin RX del otro dispositivo
Los comunes de ambos dispositivos también tienen que estar conectados
entres si.
Los niveles de tensión con los que trabajan los pines del módulo USART
PIC son de 0V y 5V un bajo será 0V mientras que un alto será 5V, por
eso cuando la comunicación es entre microcontroladores la conexión
entre pines se puede hacer directamente, pero cuando la comunicación
es entre el microcontrolador y un ordenador la conexión entre pines
tiene que hacerse a través de un conversor de nivel como el MAX232,
ya que los niveles de tensión para la comunicación serial del ordenador
son mayores que para el PIC típicamente entre -12V y 12V, además
de trabajar con lógica negativa, esto es para el ordenador un bajo será
12V mientras un alto será -12V.
Hay otra manera de conectar el PIC con el ordenador para la
comunicación serial mediante resistencias y la compuerta inversora
tipo Schmitt 74HC14 como se ve en la siguiente imagen.

El socket donde se conectará el PIC con el ordenador para la


comunicación serial es del tipo DB9 y se conoce como puerto serie, pero
resulta que este tipo de puerto ya no viene en los ordenadores portátiles
que son los que hoy en día la mayoría utiliza, lo que traen ahora son
puertos USB, por lo que para realizar la comunicación serial con el
módulo USART PIC será necesario la utilización de un conversor SERIE-
USB como el que se muestra en la siguiente imagen.
El
conector DB9 es el que se utiliza para la comunicación serial con el
módulo USART PIC, este conector consta de de 9 pines, los hay hembra
y macho, de este conector solo se utilizarán 3 pines, uno para el pin RX,
otro para el pin TX y el otro para el tierra, estos pines tiene una
numeración que hay que respetar.

El conversor serie-USB viene con el conector DB9 macho, si el cable que


trae es corto se tendrá que conseguir un cable serie DB9 del que la
hembra se conectará al conector DB9 macho del conversor serie-USB y
el DB9 macho del cable serie DB9 al microcontrolador PIC ya sea a
través del MAX232 o con el uso de la compuerta inversora como se
comento lineas arriba, por lo que los pines a conectar del DB9 macho
con el módulo USART PIC son en el siguiente orden:

 El pin 2 que es pin receptor RX del conector DB9 macho que viene del
ordenador, se conectará a través del MAX232 o con el uso de la
compuerta inversora y la resistencia de 1K al pin transmisor o pin TX
del microcontrolador.
 El pin 3 que es pin transmisor TX del conector DB9 macho que viene
del ordenador, se conectará a través del MAX232 o con el uso de la
compuerta inversora y la resistencia de 22K al pin receptor o pin RX
del microcontrolador.
 El pin 5 que es pin GND o tierra o común del conector DB9 macho
que viene del ordenador, se conectará al pin Vss del
microcontrolador.

Las conexiones del módulo USART PIC con el ordenador a través de la


compuerta inversora y las resistencias, con el uso del conversor serie-
USB será como se indica en la siguiente imagen.

USART PIC PROGRAMACIÓN


Para programar el módulo USART PIC en el PIC16F877A, se utilizan los
siguientes registros: el registro TXSTA, el registro RCSTA, el
registro SPBRG, el registro TXREG, el registro RXREG, y si se
utilizan interrupciones USART PIC los registros PIE1 y PIR1.
El registro TXSTA es el registro de control de la transmisión de datos.

El bit7 CSRC es útil cuando se utiliza la comunicación serial síncrona,


mediante este bit se elige la fuente de reloj esto es quien de los
dispositivos será el maestro, en la comunicación serial asíncrona este bit
no tiene efecto.
El bit6 TX9 Es para elegir si la transmisión de datos será a 9 bits o a 8
bits, si este bit se pone a 1 la transmisión será a 9 bits y se este bit se
pone a 0 la transmisión será a 8 bits.
El bit5 TXEN Este es el bit que habilita la transmisión de datos, al
ponerlo a 1 se habilita la transmisión de datos y si se lo pone a 0 la
transmisión de datos estará deshabilitada.
El bit4 SYNC Con este bit se elige el tipo de comunicación serial a
utilizar con el módulo USART PIC, al ponerlo a 1 la comunicación serial
será síncrona y al ponerlo a 0 la comunicación será asíncrona.
El bit3 no se utiliza.
El bit2 BRGH Este bit es para seleccionar la velocidad de los baudios,
que es la cantidad de bits que se enviarán por segundo en el modo
asíncrono, si se pone a 1 será de alta velocidad, si se pone a 0 será de
baja velocidad.
El bit1 TRMT Este bit indica el estado del registro TSR utilizado para la
transmisión de datos, trabaja automáticamente, si está a 1 indica que el
registro esta vació, si está a 0 indica que el registro está lleno.
El bit 0 TX9D Este bit será el noveno bit se se utilizan 9 bits en la
transmisión de datos.
El Registro RCSTA Es el registro de control de la recepción de datos.

El bit7 SPEN Este bit es que permite la habilitación del uso del módulo
USART PIC, si se pone a 1 se habilita el uso del módulo USART PIC, si se
pone a 0 no es posible utilizar el módulo USART PIC.
El bit6 RX9 Es para elegir si la recepción de datos será a 9 bits o a 8
bits, si este bit se pone a 1 la recepción será a 9 bits y se este bit se
pone a 0 la recepción será a 8 bits.
El bit5 SREN Este es el bit se utiliza en el modo síncrono para habilitar
la recepción síncrona, en el modo asíncrono no es utilizado.
El bit4 CREN Con este bit se habilita la recepción continua de datos al
ponerlo a 1, si se pone a 0 la recepción continua de datos
está deshabilitada.
El bit3 ADDEN Es utilizado en el modo asíncrono si la recepción de
datos es de 9 bits. Si la recepción de datos es a 8 bits no es utilizado
El bit2 FERR Este bit trabaja automáticamente si se pone a 1 es que se
ha recibido un dato no válido.
El bit1 OERR Este bit trabaja automáticamente y se pondrá a 1 si se
ha producido un error por sobreescritura del dato recibido.
El bit 0 RX9D Este bit será el noveno bit se se utilizan 9 bits en la
recepción de datos.
El registro SPBRG Es el registro donde se debe cargar el valor con el
que se elige la velocidad de transmisión de los datos, esto es los baudios
o la cantidad de bits por segundo que se enviarán en la comunicación
serial con el módulo USART PIC, trabaja junto con el bit BRGH del
registro TXSTA.
El valor a cargar en el registro SPBFG se calcula con las siguientes
fórmulas que dependerán de la velocidad elegida con el bit BRGH, de la
frecuencia del oscilador utilizado y de si la comunicación será síncrona o
asíncrona.

Los ejemplos que se harán serán para la transmisión asíncrona a alta


velocidad por lo que la fórmula que se utilizará será:
Velocidad en baudios=Fosc/(16*(SPBRG+1))
Es importante recordar que la velocidad en baudios de los dispositivos
que se estén comunicando tienen que ser iguales, la mas común es la de
9600 baudios, si en la fórmula anterior se reemplaza y se despeja se
tendrá:
SPBRG=(Fosc/(16*9600))-1
de donde:
SPBRG=(Fosc/153600)-1
Por ejemplo si el oscilador es de 4MHz se tendrá
SPBRG=(4000000/153600)-1=25
Por lo que para obtener un una velocidad de 9600 baudios se tendrá que
cargar el registro SPBRG con 25.
Hay un cuadro en la hoja de datos donde se tienen algunos valores a
cargar en este registro para el modo síncrono y asíncrono dependiendo
de la frecuencia del oscilador utilizado y de la velocidad elegida.
El registro TXREG Es el registro donde se debe escribir el dato que se
quiera enviar el la comunicación serial con el módulo USART PIC.
El registro RCREG Es el registro donde se debe leer al recibir
algún dato en la comunicación serial con el módulo USART PIC.
El registro PIE1 Al poner el bit4 de este registro a 1 se habilita el uso
de interrupciones por la finalización de la transmisión del dato y al poner
el bit5 de este registro a 1 se habilita el uso de las interrupciones por la
finalización de la recepción del dato.
El registro PIR1 El bit bit4 de este registro se pondrá a 1 cuando se ha
terminado la transmisión del dato, luego se pondrá automáticamente a
0, si esta habilitada la interrupción por finalización de la transmisión del
dato este bit será el que indica que ha ocurrido la interrupción. El bit5 de
este registro se pondrá a 1 cuando se ha terminado la recepción del
dato, luego se pondrá automáticamente a 0, si esta habilitada la
interrupción por finalización de la recepción del dato este bit será el que
indica que ha ocurrido la interrupción.
USART PIC PROGRAMACIÓN en el
XC8
Para la programación del módulo USART PIC se utilizará el XC8, ya que
este permite trabajar directamente con los registros y esto es de gran
ayuda para conocer mucho mas sobre el manejo de los
microcontroladores PIC, en este caso se comentará como se puede
proceder para utilizar el módulo USART PIC del PIC16F877A, lo aquí
comentado es muy similar para otros microcontroladores PIC
Para iniciar el módulo USART PIC.
Los pines del PIC116F877A para el manejo del módulo USART PIC son el
pin RC7 para la recepción de datos por lo que en este caso se le llama
pin RX, y el pin RC6 para la transmisión de datos, en este caso se le
llama pin TX, el pin RX se tiene que configurar como una entrada digital
y el pin TX se tiene que configurar como una salida digital, esto en el
XC8 se puede hacer así:
TRISCbits.TRISC7=1;//pin RX como una entrada digital
TRISCbits.TRISC6=0;//pin RX como una salida digital
Configuración del registro TXSTA para el control de la transmisión de
datos, en este caso se hará para que la transmisión sea a 8 bits en
forma asíncrona de alta velocidad por lo que:
El bit7 en modo asíncrono no se usa por lo que se pondrá a 0.
El bit6 se pondrá a 0 para que la transmisión sea a 8 bits.
El bit5 se pondrá a 1 para que esté habilitada la transmisión de datos.
El bit4 se pondrá a 0 porque la transmisión será asíncrona.
El bit3 no se utiliza por lo que se lo pondrá a 0.
El bit2 se pondrá a 1 para que el módulo USART PIC trabaje a alta
velocidad.
El bit1 es un bit de estado trabaja automáticamente e indica cuando el
registro donde se coloca el dato a transmitir está lleno o vacío, se lo
puede poner a 1 o a 0 para iniciar, en este caso se lo pondrá a 1 porque
se está iniciando y tendría que estar vacío.
El bit0 no se utiliza porque es el bit de paridad cuando se utiliza la
transmisión de 9 bits pero como se utilizará la transmisión a 8 bits no
influye y se lo pondrá a 0.
Luego en la inicialización del módulo USART PIC el registro TXSTA en el
XC8 quedará así:
TXSTA=0b00100110;// 8bits, transmisión habilitada, asíncrono, alta
velocidad
Configuración del registro RCSTA para el control de la recepción de
datos, en este caso se hará para que la recepción sea a 8 bits en forma
asíncrona de alta velocidad por lo que:
El bit7 se pondrá a 1 para habilitar el uso del módulo USART PIC.
El bit6 se pondrá a 0 para que la recepción sea a 8 bits.
El bit5 se pone a 0 porque no se usa en la comunicación asíncrona.
El bit4 se pone a 1 para habilitar la recepción de datos.
El bit3 se pone a 0 porque la recepción será a 8 bit.
El bit2 este bit trabaja automáticamente cuando se pone a 1 indica que
se ha recibido un dato no válido.
El bit1 este bit trabaja automáticamente cuando se pone a 1 indica que
se ha producido un error por sobreescritura de algún dato recibido.
El bit0 no se utiliza porque es el bit de paridad cuando se utiliza la
recepción de 9 bits pero como se utilizará la recepción a 8 bits no influye
y se lo pondrá a 0.
Luego en la inicialización del módulo USART PIC el registro RCSTA en el
XC8 quedará así:
RCSTA=0b10010000;//habilitado el USART PIC, recepción 8
bits, habilitada, asíncrono
Carga del registro SPBRG para los baudios o la cantidad de bits por
segundo para la comunicación serial, como será a alta velocidad por lo
que el bit BRGH del registro TXSTA se puso a 1 y en forma asíncrona, se
utilizará la fórmula.
Velocidad en baudios=baudios=Fosc/(16*(SPBRG+1))
Al despejar se tendrá
SPBRG=(Fosc/(16*baudios))-1
En los ejemplos que se harán se utilizará una Fosc de 4Mhz y la
velocidad será de 9600 baudios, por lo que al reemplazar se tendrá que
el valor a cargar en el registro SPBRG será de 25, luego en el XC8 será:
SPBRG=25;//para una velocidad de 9600baudios con un oscilador de
4Mhz
Entonces se puede iniciar el módulo USART PIC en el XC8 de la siguiente
manera:
La inicialización podría hacerse dentro de una función a la que se le
puede dar el nombre que se quiera, en este caso se la
llamará iniciar_usart() lo que en el XC8 será así:
Para la recepción de datos con el módulo USART PIC.
Los datos que se reciben son de tipo caracter, cuando se va recibir un
dato a través del pin RX se tendrá que esperar a que el bit5 del registro
PIR1 se ponga a 1, este bit indica que se ha completado la recepción del
dato, el dato recibido es de tipo caracter char y estará en el registro
RCREG, cuando se lee el dato guardándolo en alguna variable de tipo
caracter char este bit se pondrá automáticamente a 0, la recepción de
los datos en el XC8 se hará en una función a la que se le puede llamar
como se desee, en este caso se le llamará recibe_caracter_usart().

Para la transmisión de datos con el módulo USART PIC.


Los datos que se transmiten son de tipo caracter, cuando se va
transmitir un dato a través del pin TX se tendrá que esperar a que
el registro TSR donde se ponen los datos que se van a enviar esté vacío,
esto se hace esperando a que el bit1 TRMT del registro TXSTA se ponga
a 1, este bit indica que se ha completado la transmisión de un dato
anterior mientras el dato que está en espera se coloca en el registro
TXREG, cuando se vacíe el registro TSR se podrá enviar el otro dato que
está esperando en el registro TXREG pasándolo en forma automática al
registro TSR, el dato transmitido es de tipo caracter char, cuando se
pasa el dato del registro TXREG al registro TSR este bit se pondrá
automáticamente a 0, la transmisión de los datos en el XC8 se hará en
una función a la que se le puede llamar como se desee, en este caso se
le llamará envia_caracter_usart().

Para la transmisión de cadenas de caracteres con el módulo


USART PIC se puede utilizar la función vista anteriormente para la
transmisión de caracteres para enviar cadenas de caracteres, para ello
se creará otra función que se puede llamar como se desee pero en este
caso se le llamará envia_cadena_usart().
ARCHIVO DE CABECERA PARA EL
USO DEL MÓDULO USART PIC EN
EL XC8
Se puede agrupar todas la funciones vistas anteriormente para el uso del
módulo USART PIC en el XC8 en forma asíncrona, 8 bits y a 9600
baudios en un archivo de cabecera al que se le llamará en este
caso usart.h, aunque se le puede dar el nombre que se desee, se hará
uso de este archivo de cabecera en los ejemplos que se realizarán con el
PIC16F877A, si se utiliza otro pic u otra velocidad de comunicación es
fácil hacer los cambios que se necesiten dentro del archivo usart.h, se
verá algún ejemplo.
C

Potrebbero piacerti anche