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 SPBRGHx:SPBRGx para los baudios adecuados. Activa o limpia los bits BRGH y BRG16, como se requiere, para lograr los baudios deseados.
- Activa el puerto serial asíncrono limpiando el bit SYNC y activando el bit SPEN
- Si necesitas interrupciones, activa el bit, RCxIE.
- Si la recepción deseada es de 9 bits, activa el bit RX9.
- Activa la recepción activando el bit, CREN.
- El bit bandera, RCxIF, se activará cuando la recepción está completa y una interrupción será generada si el bit habilitado, RXcIE, fue activado.
- Lee el registro RCSTAx para obtener la información del noveno bit (si fue activado) y determina si un error ocurrió durante la recepción.
- Lee los datos de 8 bits recibidos leyendo el registro RCREGx.
- Si un error ocurrió, limpia el error limpiando el bit activado, CREN.
- Si se usan interrupciones, asegúrate de que GIE y PEIE en el registro INTCON estén activos.
;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 SPBRGHx:SPBRGx para los baudios apropiados. 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 se desean interrupciones, activa el bit, TXxIE.
- Si se desea transmisión de 9 bits, activa el bit TX9.
- Activa la transmisión activando el bit, TXEN, el cual habilitará el bit, TXxIF.
- Si la transmisión de 9 bits fue seleccionada, el noveno bit se cargará en TX9D.
- Carga el dato al registro TXREGx (comienza la transmisión).
- Si se usan interrupciones, asegúrate de que los pines GIE y PEIE en el registro INTCON estén activos
En el código hasta antes del envío de datos, se hará de la siguiente forma:
;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,RC1IF ;Esperamos a que esté lista la conversión goto ESPERA ;Regresamos a espera movff RCREG1,recibido ;Almacenamos el dato recibido movff recibido,PORTJ ;Mostramos el dato recibido en el puerto B movff recibido,TXREG bsf RCSTA,CREN ;Habilitamos la recepción de datos goto ESPERA ;Regresamos a esperar la recepción de un dato
LIST P = 18F87J50 ;PIC a utilizar INCLUDE <P18F87J50.INC> ;************************************************************ ;Configuración de fusibles CONFIG FOSC = HS CONFIG DEBUG = OFF CONFIG XINST = OFF ;*********************************************************** ;Código CBLOCK 0x000 recibido ENDC ORG 0x00 ;Iniciar el programa en el registro 0x00 goto INICIO INICIO movlw 0x00 movwf TRISJ ;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,RC1IF ;Esperamos a que esté lista la conversión goto ESPERA ;Regresamos a espera movff RCREG1,recibido ;Almacenamos el dato recibido movff recibido,PORTJ ;Mostramos el dato recibido en el puerto B movff recibido,TXREG bsf RCSTA,CREN ;Habilitamos la recepción de datos goto ESPERA ;Regresamos a esperar la recepción de un dato end