Envío Gratis en compras mínimas de $1200 mxn Enviamos a toda la Republica Mexicana
Buscar

Ensamblador 5: Comunicación RS232 (Miuva Pro)

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).

  1. 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.
  2. Activa el puerto serial asíncrono limpiando el bit SYNC y activando el bit SPEN
  3. Si necesitas interrupciones, activa el bit, RCxIE.
  4. Si la recepción deseada es de 9 bits, activa el bit RX9.
  5. Activa la recepción activando el bit, CREN.
  6. 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.
  7. 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.
  8. Lee los datos de 8 bits recibidos leyendo el registro RCREGx.
  9. Si un error ocurrió, limpia el error limpiando el bit activado, CREN.
  10. 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.:

  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.
  2. Activa el puerto serial asíncrono limpiando el bit SYNC y activando el bit, SPEN.
  3. Si se desean interrupciones, activa el bit, TXxIE.
  4. Si se desea transmisión de 9 bits, activa el bit TX9.
  5. Activa la transmisión activando el bit, TXEN, el cual habilitará el bit, TXxIF.
  6. Si la transmisión de 9 bits fue seleccionada, el noveno bit se cargará en TX9D.
  7. Carga el dato al registro TXREGx (comienza la transmisión).
  8. 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
Nuestro código quedará de la siguiente forma:

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