COMUNICACIÓN SERIE PIC-PIC: EL USART
La familia de los pic 16F87x disponen de un módulo USART (Universal
Synchronous / Asynchronous Receiver Transmiter.) para la comunicación serie. El
USART puede implementar una comunicación síncrono y asíncrono.
La conexión USART utiliza el conocido
protocolo de comunicación serie RS232.
(El protocolo RS-232 es una norma que rige los
parámetros de uno de los modos de comunicación serial. Por medio de este
protocolo se estandarizan las velocidades de transferencia de datos, la forma
de control que utiliza dicha transferencia, los niveles de voltajes utilizados,
el tipo de cable permitido, las distancias entre equipos, los conectores, etc)
La comunicación serial se lleva a cabo asíncronamente es decir que no es
necesaria una señal (o reloj) de sincronización: los datos pueden enviarse en
intervalos aleatorios. Cada palabra de información o dato se envía
independiente de los demás.
Una palabra o dato de información
tiene 8 o 9 bits de longitud. Cada carácter se encuentra precedido por un bit
de inicio (START) y finaliza con un bit
de parada (STOP).
1.Conexión básica comunicación USART:
Este es el circuito básico de una
conexión USART entre dos miscrocontroladores:
|
2.Registros asociados a una comunicación asíncrona
2.1. Registro TXSTA
2.2. Registro SPBRG (Bauds Rate Generator Register)
La tasa de baudios (en inglés baud rate)
es el número de unidades de señal por segundo.
Aunque a veces se confunden los baudios con los bits por segundo, son
conceptos distintos. El primero queda definido como el número de estados de la
señal por segundo, si sólo existe dos estados entonces baudio es equivalente a
bit por segundo. Baudio y bit por segundo se diferencian cuando es necesario
más de un bit para representar más de dos estados de la señal. Un baudio puede
contener varios bits.
La frecuencia en baudios (bits por
segundo) según la norma RS232C se debe efectuar a un valor normalizado,
330,600,1200,2400,4800,9600,19200 etc…
El módulo USART de los microcontroladores posee un divisor de frecuencias que genera Baud rate .
3.El esquema del circuito es el siguiente:
;File name: Conexion USART pic a pic EMISOR.asm
;Micro: 16F876A
;CPU Clock : 4 MHz
;Verification: 26-05-2014
;Description: El módulo USART. Recepción asíncrona.
;El módulo USART de los dispositivos PIC16F87X incorpora el hardware necesario para implementar
;comunicación serie asíncrona full-duplex o sincrona half-duplex.
;En el ejemplo se envia un dato por el termina TX. El programa envia un codigo binario dependiendo
;del pulsador que esté presionado:
;Conection:
;RC6/Tx- Conectada al RX DEL Pic slave
;RB0 a RB7 conectada a pulsadores
;------------------------------------------------------------------------------------------------------------------------------------------------------
INCLUDE "P16F876.inc" ;File include
ERRORLEVEL -302 ;Elimina MPASM warning message 302
#define Fosc 4000000 ;Define velocidad de trabajo 4Mhz
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
goto INI
;<<<<<<-------------------------------------------------Inicio del programa ------------------------------------------------->>>>>>>
INI
clrf PORTB
clrf PORTC
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
movlw b'11111111' ;Puerto B como entrada,
movwf TRISB
movlw b'10111111' ; RC7/RX entrada,
movwf TRISC ; RC6/TX salida
movlw b'00100100' ; Configuración USART
movwf TXSTA ; y activación de transmisión
movlw .25 ; 9600 baudios
movwf SPBRG
bcf STATUS,RP0 ; Bank00
movlw b'10010000' ; Configuración del USART para recepción continua
movwf RCSTA ; Puesta en ON
call TX_DATO ;Transmisión del dato almacenado en W
call Retardo_50ms
goto Loop
movwf TXREG ; Mueve el byte a transmitir al registro de transmision
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
TX_DAT_W btfss TXSTA,TRMT ; ¿Byte transmitido?
goto TX_DAT_W ; No, esperar
bcf STATUS,RP0 ; Si, vuelta a Bank00
return
;<<<<<<-------------------------------------------------------Fin del programa------------------------------------------------->>>>>>>
END
4.Este es el programa receptor escrito en ASM:
; File name: Conexion USART pia a pic RECEPTOR.asm -
; Micro: 16F876A -
; CPU Clock : 4 MHz -
; Verification: 7-06-2013 -
; Description: El módulo USART. Recepción asíncrona.
;En el ejemplo se provoca una interrupción cada vez que se recibe un carácter vía serie. El
;programa de tratamiento visualiza, sobre los leds conectados a la Puerta B,
;el código binario del carácter recibido. Igualmente retransmite el carácter recibido, a
;modo de ECO.
;Conection:
;RC7/Rx- Conectada al TX del pic Master
;RB0 a RB7 conectada a diodos led
;<<<<<<-------------------------Define tipo de microcotrolador -------------------------->>>>>>>
LIST p=16F876 ;Tipo de micro
INCLUDE "P16F876.inc" ;File include
ERRORLEVEL -302 ;Elimina MPASM warning message 302
#define Fosc 4000000 ;Define velocidad de trabajo 4Mhz
;<<<<<<------------------------Define palabra de configuracion -------------------------->>>>>>>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
ORG 0 ;Vector reset
goto INI
ORG 4 ;Vector interrupción
goto Interrupcion
; Se transmite via Serie el dato que esta en el registro W
TX_DATO bcf PIR1,TXIF ; Restaura el flag del transmisor
movwf TXREG ; Mueve el byte a transmitir al registro de transmision
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
TX_DAT_W btfss TXSTA,TRMT ; ¿Byte transmitido?
goto TX_DAT_W ; No, esperar
bcf STATUS,RP0 ; Si, vuelta a Bank00
return
; Tratamiento de interrupción
Interrupcion
btfss PIR1,RCIF ; ¿Interrupción por recepción?
retfie; ; No, falsa interrupción
bcf PIR1,RCIF ; Si, reponer flag
movf RCREG,W ; Lectura del dato recibido
movwf PORTB ; Lo muestra por la puerta B
call TX_DATO ; Transmisión del dato como eco
retfie
;<<<<<<-------------------------------Inicio del programa ------------------------------->>>>>>>
INI
bcf STATUS, RP0 ;ir al banco ...
bcf STATUS, RP1 ;.. registro 0
clrf PORTA ;Pone a 0 la linea PortA
clrf PORTB ;Pone a 0 la linea PortB
clrf PORTC ;Pone a 0 la linea PortC
movlw b'00000000' ;Arresta ...
movwf ADCON0 ;ADC
bsf STATUS, RP0 ;Se seleciona el banco de registro 1
movlw b'00000110' ;Configura registro ADCON....
movwf ADCON1 ;como digital
movlw b'00000001' ;Configura RA0 como entrada...
movwf TRISA ;...en RA0 se conecta el SW1
clrf TRISB ;Pone a 0 la linea PORTB
clrf TRISC ;Pone a 0 la linea PORTC
movlw b'10111111' ; RC7/RX entrada,
movwf TRISC ; RC6/TX salida
movlw b'00100100' ; Configuración USART, modo asíncrono de 8bits
movwf TXSTA ; TX en ON. Activación de transmisión
movlw .25
movwf SPBRG ; 9600 baudios con Fosc=4Mz
bsf PIE1,RCIE ; Habilita interrupción en recepción
bcf STATUS,RP0 ; Seleccionas el Bank00
movlw b'10010000' ; Configuración del USART para recepción continua
movwf RCSTA ; Puesta en ON
movlw b'11000000' ; Habilitación de lasinterrupciones en general
movwf INTCON ; PEIE y GIE en ON
Loop
goto Loop
END
; Micro: 16F876A -
; CPU Clock : 4 MHz -
; Verification: 7-06-2013 -
; Description: El módulo USART. Recepción asíncrona.
;En el ejemplo se provoca una interrupción cada vez que se recibe un carácter vía serie. El
;programa de tratamiento visualiza, sobre los leds conectados a la Puerta B,
;el código binario del carácter recibido. Igualmente retransmite el carácter recibido, a
;modo de ECO.
;Conection:
;RC7/Rx- Conectada al TX del pic Master
;RB0 a RB7 conectada a diodos led
;<<<<<<-------------------------Define tipo de microcotrolador -------------------------->>>>>>>
LIST p=16F876 ;Tipo de micro
INCLUDE "P16F876.inc" ;File include
ERRORLEVEL -302 ;Elimina MPASM warning message 302
#define Fosc 4000000 ;Define velocidad de trabajo 4Mhz
;<<<<<<------------------------Define palabra de configuracion -------------------------->>>>>>>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _DEBUG_OFF & _CPD_OFF
ORG 0 ;Vector reset
goto INI
ORG 4 ;Vector interrupción
goto Interrupcion
; Se transmite via Serie el dato que esta en el registro W
TX_DATO bcf PIR1,TXIF ; Restaura el flag del transmisor
movwf TXREG ; Mueve el byte a transmitir al registro de transmision
bsf STATUS,RP0 ; Bank01
bcf STATUS,RP1
TX_DAT_W btfss TXSTA,TRMT ; ¿Byte transmitido?
goto TX_DAT_W ; No, esperar
bcf STATUS,RP0 ; Si, vuelta a Bank00
return
; Tratamiento de interrupción
Interrupcion
btfss PIR1,RCIF ; ¿Interrupción por recepción?
retfie; ; No, falsa interrupción
bcf PIR1,RCIF ; Si, reponer flag
movf RCREG,W ; Lectura del dato recibido
movwf PORTB ; Lo muestra por la puerta B
call TX_DATO ; Transmisión del dato como eco
retfie
;<<<<<<-------------------------------Inicio del programa ------------------------------->>>>>>>
INI
bcf STATUS, RP0 ;ir al banco ...
bcf STATUS, RP1 ;.. registro 0
clrf PORTA ;Pone a 0 la linea PortA
clrf PORTB ;Pone a 0 la linea PortB
clrf PORTC ;Pone a 0 la linea PortC
movlw b'00000000' ;Arresta ...
movwf ADCON0 ;ADC
bsf STATUS, RP0 ;Se seleciona el banco de registro 1
movlw b'00000110' ;Configura registro ADCON....
movwf ADCON1 ;como digital
movlw b'00000001' ;Configura RA0 como entrada...
movwf TRISA ;...en RA0 se conecta el SW1
clrf TRISB ;Pone a 0 la linea PORTB
clrf TRISC ;Pone a 0 la linea PORTC
movlw b'10111111' ; RC7/RX entrada,
movwf TRISC ; RC6/TX salida
movlw b'00100100' ; Configuración USART, modo asíncrono de 8bits
movwf TXSTA ; TX en ON. Activación de transmisión
movlw .25
movwf SPBRG ; 9600 baudios con Fosc=4Mz
bsf PIE1,RCIE ; Habilita interrupción en recepción
bcf STATUS,RP0 ; Seleccionas el Bank00
movlw b'10010000' ; Configuración del USART para recepción continua
movwf RCSTA ; Puesta en ON
movlw b'11000000' ; Habilitación de lasinterrupciones en general
movwf INTCON ; PEIE y GIE en ON
Loop
goto Loop
END
5.Este es el video: