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:


3.Este es el programa emisor escrito en ASM:
;------------------------------------------------------------------------------------------------------------------------------------------------------
;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
;------------------------------------------------------------------------------------------------------------------------------------------------------

;<<<<<<----------------------------------------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
;<<<<<<-------------------------------------------------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

   Loop      comf  PORTB,W ;Complementa a 1 los datos de la puerta B y los deposita en W
   call        TX_DATO           ;Transmisión del dato almacenado en W  
   call        Retardo_50ms
   goto       Loop

;<<<<<<---------------------Se transmision 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

INCLUDE <RETARDOS.INC>
;<<<<<<-------------------------------------------------------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

5.Este es el video: