Ahora vamos a aprender a utilizar el módulo EUSART del PIC para realizar comunicación mediante el protocolo RS232, es importante recordar que todos los datos necesarios siempre están en los datasheets, por lo tanto siempre que queremos utilizar algún recurso podemos buscar la información en las secciones correspondientes, para el caso del módulo EUSART podemos encontrar incluso un paso a paso de como configurarlo tanto para recepción como para transmisión.
Encontraremos que para habilitar el módulo EUSART, será necesario poner el Puerto C como entrada, colocando un 0xFF en el registro TRISC.
RECEPCIÓN DE DATOS
Para esto podemos ir a la sección 20.2.2 de la hoja de datos, donde encontraremos EUSART ASYNCHRONOUS RECEIVER (Recepción asíncrona EUSART).
- Inicializa el registro SPBRGH:SPBRG para los baudios adecuados, Activa o limpia los bits BRGH y BRG16, como se requiera, para alcanzar los baudios deseados.
- Activa el puerto serial asíncrono limpiando el bit SYNC, y activando el bit, SPEN.
- Si la señal del pin RX será invertida, activa el bit RXDTP.
- Si deseas interrupciones, activa el bit, RCIE.
- Si se dese recepción de 9 bits, activa el bit, RX9.
- Activa la recepción activando el bit, CREN.
- El bit bandera, RCIF, será activado cuando la recepción esté completa y una interrupción será generada si el bit habilitado, RCIE, que fue activado.
- Lee el registro RCSTA para obtener el noveno bit (si fue activado) y determinar si un error ocurrió durante la recepción.
- Lee los 8 bits de datos recibidos, leyendo el registro RCREG.
- Si un error ocurrió, limpia el error limpiando el bit habilitado, CREN.
- Si se están usando interrupciones, asegúrate de que los pines GIE y PEIE en el registro INTCON están activos.
El código hasta antes de la lectura de los datos recibidos, sería el siguiente:
;CONFIGURACIÓN PARA LA RECEPCIÓN DE DATOS movlw D'12' movwf SPBRG ;Configuración de baudios adecuada (9600) bcf TXSTA,BRGH ;Low speed bcf BAUDCON,BRG16 ;Selección de velocidad adecuada (8 bit) Solo SPBRG bcf TXSTA,SYNC ;Puerto serial asíncrono bsf RCSTA,SPEN ;Habilita puerto serial bsf RCSTA,CREN ;Habilitamos la recepción
ENVÍO DE DATOS
Estos pasos los podemos encontrar en la sección 20.2.1.:
- Inicializa los registros SPBRGH:SPBRG para los baudios adecuados, activa o limpia los bits BRGH y BRG16, como se requiea, para alzancar los baudios deseados.
- Activa el puerto serial asíncrono limpiando el bit, SYNC y activando el bit SPEN.
- Si la señal del pin TX será invertida, activa el bit TXCKP.
- Si deseas interrupciones, activa el bit, TXIE.
- Si deseas transmisión de 9 bits, activa el bit TX9.
- Activa la transmisión activando el bit, TXEN, que también activará, el bit TXIF.
- Si la transmisión de 9 bits fue seleccionada, el noveno bit debe cargarse en el bit, TX9D.
- Carga el dato al registro TXREG (comienza la transmisión).
- Si se están usando interrupciones, asegúrate de que los bits GIE y PEIE en el registro INTCON estén activos.
El código, hasta antes del envío de los datos será:
;CONFIGURACIÓN PARA EL ENVÍO DE DATOS movlw D'12' movwf SPBRG ;Configuración de baudios adecuada (9600) bcf TXSTA,BRGH ;Low speed bcf BAUDCON,BRG16 ;Selección de velocidad adecuada (8 bit) Solo SPBRG bcf TXSTA,SYNC ;Puerto serial asíncrono bsf RCSTA,SPEN ;Habilita puerto serial bsf TXSTA,TXEN ;Habilitamos el envío
RECEPCIÓN Y ENVÍO
Lo que realizará nuestro programa, será estar en espera de que llegue información, en el momento de que llega se almacenan los 8 bits recibidos y esos mismos bits se envían por RS232, esto nos servirá para ver si estamos recibiendo y enviando correctamente, ya que la misma información se mostrará en los leds y se recibirá por el dispositivo con el que nos estamos comunicando.
ESPERA btfss PIR1,RCIF ;Esperamos a que esté lista la conversión goto ESPERA ;Regresamos a espera movff RCREG,recibido ;Almacenamos el dato recibido movff recibido,PORTB ;Mostramos el dato recibido en el puerto B movff recibido,TXREG ;Enviamos por TX el mismo dato recibido bsf RCSTA,CREN ;Habilitamos la recepción de datos goto ESPERA ;Regresamos a esperar la recepción de un dato
Nuestro código quedará de la siguiente forma:
CÓDIGO FINAL
LIST P = 18F4550 ;PIC a utilizar INCLUDE <P18F4550.INC> ;************************************************************ ;Configuración de fusibles CONFIG FOSC = HS CONFIG PWRT = ON CONFIG BOR = OFF CONFIG WDT = OFF CONFIG MCLRE = ON CONFIG PBADEN = OFF CONFIG LVP = OFF CONFIG DEBUG = OFF CONFIG XINST = OFF ;*********************************************************** ;Código CBLOCK 0x080 recibido ENDC ORG 0x00 ;Iniciar el programa en el registro 0x00 movlw 0x00 movwf TRISB ;Puerto B como salida movlw 0xFF movwf TRISC ;CONF. PARA HABILITAR EUSART ;CONFIGURACIÓN PARA LA RECEPCIÓN DE DATOS movlw D'12' movwf SPBRG ;Configuración de baudios adecuada (9600) bcf TXSTA,BRGH ;Low speed bcf BAUDCON,BRG16 ;Selección de velocidad adecuada (8 bit) Solo SPBRG bcf TXSTA,SYNC ;Puerto serial asíncrono bsf RCSTA,SPEN ;Habilita puerto serial bsf RCSTA,CREN ;Habilitamos la recepción ;CONFIGURACIÓN PARA EL ENVÍO DE DATOS movlw D'12' movwf SPBRG ;Configuración de baudios adecuada (9600) bcf TXSTA,BRGH ;Low speed bcf BAUDCON,BRG16 ;Selección de velocidad adecuada (8 bit) Solo SPBRG bcf TXSTA,SYNC ;Puerto serial asíncrono bsf RCSTA,SPEN ;Habilita puerto serial bsf TXSTA,TXEN ;Habilitamos el envío ESPERA btfss PIR1,RCIF ;Esperamos a que esté lista la conversión goto ESPERA ;Regresamos a espera movff RCREG,recibido ;Almacenamos el dato recibido movff recibido,PORTB ;Mostramos el dato recibido en el puerto B movff recibido,TXREG ;Enviamos por TX el mismo dato recibido bsf RCSTA,CREN ;Habilitamos la recepción de datos goto ESPERA ;Regresamos a esperar la recepción de un dato end