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 TX9D

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

REGISTRO TXSTA
CSRC TX9 TXEN SYNC BRGH TRMT TX9D

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

REGISTRO RCSTA
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D

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

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

;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

;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
movlw movwf movlw movwf b'10010000' RCSTA b'11000000' INTCON ;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

ciclo

bsf bsf movlw addlw call nop goto END

PORTA,0 PORTA,2 .7 30h TX_REG ciclo

;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