MICROCONTROLADORES M.Sc. César Augusto Peña C. Profesor de planta – Ingeniería mecatrónica Universidad de Pamplona
TRANSMISIÓN Y RECEPCIÓN ASÍNCRONA SERIAL
TRANSMISIÓN Y RECEPCIÓN ASÍNCRONA SERIAL
GENERADOR DE BAUDIOS FrecuenciaBaudios = Fosc/ ( K * ( X + 1 ) )
X = Valor cargado en el registro SPBRG K = 64 si el Bit BRGH = 0 (Baja velocidad) K = 16 si el Bit BRGH = 1 (Alta velocidad)
GENERADOR DE BAUDIOS Despejando X: X = ( Fosc/ (FrecuenciaBaudios* K) ) - 1 Con BRGH = 1 tendremos K = 16, obtener una frecuencia de 9600 Bps X = ( 4 Mhz / (9600 * 16) ) – 1 X = 25.042 Aproximando 25
GENERADOR DE BAUDIOS Reemplazando X por 25: FrecuenciaBaudios = 4Mhz/ ( 16 * ( 25 + 1 ) ) FrecuenciaBaudios = 9615.38 Bps Error = (9615.38 – 9600)/9600 Error = 0.16025 %
BAUDIOS (BRGH = 1)
BAUDIOS (BRGH = 0)
REGISTRO TXSTA CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
CSRC: Bit de selección de reloj, en modo asincrono no influye TX9: Habilita el bit 9 de transmisión 1 – Selecciona transmisión de 9 bits. 0 – Selecciona transmisión de 8 bits. TXEN: Activa la transmisión 1 – Transmisión activada 0 – Transmisión desactivada SYNC: Bit de selección del modo del USART 1 – Modo síncrono 0 – Modo asíncrono
TX9D
REGISTRO TXSTA CSRC
TX9
TXEN
SYNC
-
BRGH
TRMT
BRGH: Bit de selección de la velocidad en baudios 1 – Alta velocidad 0 – Baja velocidad TRMT: Bit de estado del registro de desplazamiento de transmisión 1 – TSR vacio 0 – TSR NO vacio TX9D: Bit 9 del dato a transmitir
TX9D
REGISTRO RCSTA SPEN
RX9
SREN
CREN ADDEN FERR
SPEN: Habilitación del puerto serie 1 – Puerto serie habilitado 0 – Puerto serie No habilitado RX9: Habilita el bit 9 de recepción 1 – Selecciona recepción de 9 Bits 0 – Selecciona recepción de 8 Bits SREN: No influye en modo asíncrono CREN: Configura recepción continua 1 – Habilita modo de recepción continua 0 – Deshabilita modo de recepción continua
OERR
RX9D
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC • • • • • • •
Si utiliza el PIC16f628 no olvide apagar los comparadores con el registro CMCON, Si utiliza el puerto A como E/S digitales. Configure los pines RX (RB1) como entrada y TX (RB2) como salida. Configurar modo asíncrono SYNC = 0 (TXSTA) Especificar la velocidad a través del registro SPBRG y el Bit BRGH de TXSTA Se habilita el puerto serie (SPEN = 1) y se selecciona el modo de recepción continua (CREN = 1) Activar Transmisión (TXEN = 1) Habilitar Interrupciones correspondidentes si se quiere, en el registro PIE1: bit RCIE(Recepción) y TXIE(transmisión)
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC Para el programa que se propone solamente la recepción se configura para interrupción. Por lo tanto cuando el PIC termina de recibir un dato del computador se produce una interrupción donde se debe tratar bajando la bandera RCIF para volver a recibir y a la vez se lee el dato enviado por el PC del registro RCREG Para la transmisión basta con bajar la bandera TXIF e insertar el dato a transmitir en el registro TXREG y esperar a que el bit TMRT del registro TXSTA vuelva a 1
REGISTRO DE CONTROL DE INTERRUPCIONES INTCON (PIC16F628) GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
PEIE: Permiso de interrupciones de periféricos 1 – Permite interrupciones de periféricos 0 – Prohíbe interrupciones de periféricos
REGISTRO PIE1 (PIC16F628) EEIE
CMIE
RCIE
TXIE
-
CCP1IE
TMR2IE
TMR1IE
RCIE: Bit de activación de la interrupción por recepción USART 1 – interrupción activa 0 – interrupción inactiva TXIE: Bit de activación de la interrupción por transmisión USART 1 – interrupción activa 0 – interrupción inactiva
REGISTRO PIR1 (PIC16F628) EEIF
CMIF
RCIF
TXIF
-
CCP1IF
TMR2IF
TMR1IF
RCIF: Bandera de activación de la interrupción por recepción USART 1 – El buffer de recepción esta lleno 0 – El buffer de recepción esta vacio
TXIF: Bandera de activación de la interrupción por transmisión USART 1 – El buffer de recepción esta vacio 0 – El buffer de recepción esta lleno
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC ;AUTOR: CÉSAR AUGUSTO PEÑA C ;PIC: 16F268 ;FUNCION: PROGRAMA QUE RECIBE DATOS DEL COMPUTADOR, LOS MUESTRA POR EL PUERTO A ;Y LOS VUELVE A ENVIAR AL COMPUTADOR ;CARACTERISTICAS: ;OSCILLATOR: INTRC I/O ;WATCHDOG TIMER: OFF ;POWER UP TIMER: ON ;BROWN OUT DETECT: DISABLE ;MASTER CLEAR ENABLE: DISABLE ;LOW VOLTAGE PROGRAM: DISABLE ;DATA EE READ PROTECT: DISABLE ;CODE PROTECT: OFF
list p=16f628 ;Tipo de procesador INCLUDE "P16F628.Inc" ;Librerias de Registros del PIC ;**************************** DEFINICION DE REGISTROS *********************************** CBLOCK .32 LEIDO_COMP endc RX equ 1 ;PORTB<1>: Pin RX PIC 16F628 TX equ 2 ;PORTB<2>: Pin TX PIC 16F628 ;**************************************************************************************** org 00 goto INICIO
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC org bcf bcf INTER_RX btfss goto bcf movf movwf movwf call REGRESAR retfie
04 STATUS, RP1 STATUS, RP0 PIR1,RCIF REGRESAR PIR1,RCIF RCREG,W LEIDO_COMP PORTA TX_REG
;Rutina de transmisión del dato contenido en W al PC TX_REG bcf PIR1,TXIF movwf TXREG bsf STATUS, RP0 bcf STATUS, RP1 TX_ON btfss TXSTA,TRMT goto TX_ON bcf STATUS, RP0 return
;Banco 0 ;Interrupcion producida por recepcion? ;No. Otro tipo de interrupción ;Si. Bajar bandera ;Lectura dato recibido ;carga valor leido del computador a este registro ;Mostrar el valor por el puerto A ;llama subrutina para enviar el dato ;retorna de la interrupcion.
;baja Bandera de transmisión ;Carga el valor al registro a transmitir ;Banco 1 ;Registro transmitido ;No. ;Banco 0
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC INICIO
clrf movlw movwf bsf clrf clrf bsf bcf movlw movwf movlw movwf bsf bcf clrf clrf
PORTA 0X07 CMCON STATUS,RP0 TRISA TRISB TRISB,RX TRISB,TX b'00100100' TXSTA .25 SPBRG PIE1,RCIE STATUS,RP0 PORTA PORTB
;Inicializa el puerto A ;Apaga los comparadores y ;Activa los pines como I/O ;Banco 1 ;Puerto A como salida ;Puerto B como salida ;Configura pin de RX ;Configura pin de TX ;Configuracion USART ;y activacion de transmision ;9600 baudios ;Habilitacion interrupcion RX ;Banco 0
PROGRAMA PARA RECIBIR Y TRANSMITIR DATOS AL PC
ciclo
movlw movwf
b'10010000' RCSTA
movlw movwf
b'11000000' INTCON
bsf bsf movlw addlw call nop goto END
PORTA,0 PORTA,2 .7 30h TX_REG ciclo
;Configuracion de la usart ;Habilitacion del puerto serie SPEN<7> ;Modor de recepcion continua CREN<4> ;Permiso Interrupciones generales GIE<7> ;Permiso perifericos que NO se controlan con INTCON
;Carga Valor decimal ;Transformacion ASCII ;Envia dato al computador
PROGRAMA MATLAB % NOMBRE: % AUTOR: % FUNCION: %
uC_PC.m M.Sc. Cesar Augusto Peña C Envia un caracter (ASCII) por el puerto serial 1 del computador y recibe un byte binario
clc % Borra pantalla PUERTO1 = serial('COM1'); % Especifica que se trabaja con el puerto serial 1 set(PUERTO1,'BaudRate',1200); % 1200 Baudios fopen(PUERTO1) % Abre el puerto fprintf(PUERTO1,'7') % Envia el caracter ASCII en este caso '7' X = fread(PUERTO1,1); % X = dato binario recibido por el computador fclose(PUERTO1) % Cierra el puerto