ESCUELA SUPERIOR DE INGENIERIA MECANICA Y ELECTRICA
INGENIERIA EN COMUNICACIONES Y ELECTRONICA
ACADEMIA DE COMPUTACION MATERIA: MICROPROCESADORES
PROF: JOSE LUIS BRAVO LEON
ALUMNO: FIRMA:
FECHA DE
ENTREGA:
PRACTICA No. 9
USART
OBJETIVO: Transmisión y recepción serie a través del módulo USART.
EQUIPO Y MATERIAL:
• Computadora personal • Módulo Bluetooth HC06
• Tarjeta del microcontrolador 18F4550 • Motor DC
• Osciloscopio • Transistor Darlington
DESARROLLO:
1.- Arme el siguiente circuito.
2.- Prueba de transmisión.
2.1 Elabore un programa que transmita en forma continua un caracter ‘#’ (23H) a través del puerto
de comunicación USART.
El programa contemplará la siguiente estructura:
a) Un programa principal encargado de manejar las subrutinas
b) subrutina Cpuertos.- para la configuración de puertos.
b) subrutina Cusart.- para configurar el USART.
c) subrutina Txbyte- para la transmisión de un caracter
2.2.- Anexe para cada diagrama el archivo con extensión .LST generado en la compilación.
Los diagramas de flujo propuestos se muestran a continuación:
Programa principal:
Hace el llamado a las subrutinas Cpuertos encargada de la
programación de puertos y Cusart para la configuración del INICIO
USART
Cpuertos
Amacena el dato de prueba en el registro Rdato y hace
llamado a la subrutina Txbyte para la transmisión del dato de
prueba. Cusart
Rdato 00100011
Txbyte
Cpuertos
ADCON1 0X0F
TRISA 0X00 Subrutina Cpuertos:
Encargada de la configuración de puertos.
TRISC 0X00
PORTA: ocho lineas de salida
PORTB: ocho líneas de entrada.
TRISD 0X00
PORTC: ocho líneas de salida
PORTD: ocho líneas de salida.
TRISB 0XFF Habilitación de INT0.
INTCON 0X90
RETURN
Subrutina Cusart
Deshabilita el módulo SSP. Cusart
Programa los bits 6 y 7 del PORTC para
transmisión y recepción serie. SSPCON1 0X00
Configura el baud rate a 9600 bps. TRISC,7 1 RCSTA 0X90
Habilita la transmisión con BAUD RATE alto. TRISC,6 0 BAUDCON 0X08
Habilita el puerto serial para recepción
continua. SPBRG val1 W RCREG
SPBRGH val2 W RCREG
TXSTA 0X24
RETURN
Subrutina Txbyte
Monitorea el bit TRMT hasta que la transmisión
Txbyte anterior haya concluido
Carga el dato a transmitir almacenado
NO
TRMT = 1 previamente en el registro Rdato y lo tranfiere al
registro de transmisión TXREG.
SI
W Rdato
TXREG W
RETURN
2.3.-Coloque la punta del osciloscopio en la línea de transmisión TX del microcontrolador.
2.4.- Verifique que la señal en el osciloscopio
corresponda a la señal mostrada en la figura
anexa.
2.5.- Mida el ancho del pulso del bit de inicio. T = _____________
2.6.- A partir del tiempo medido, calcule el BAUD RATE y verifique que sea 9600 bps.
2.7.- Modifique el programa fuente para transmitir un caracter ’a’
2.8.- Grafique en el siguiente recuadro la forma de onda obtenida en el osciloscopio indicando bit
de inicio, de final y los ocho bits de datos.
4.- Prueba de recepción.
4.1.- Modifique el programa principal de acuerdo
al siguiente diagrama: INICIO
Cpuertos
Cusart
Rdato 00100011
Txbyte
4.2.- Agregue la subrutina RxByte:
Rxbyte
RxByte
NO
RCIF = 1
SI
W RCREG
Subrutina RxByte
Rdato W Monitorea el bit RCIF hasta que una recepción se
haya realizado.
RETURN Carga el dato recibido y lo transfiere al registro
Rdato.
4.2.- Conecte la línea de recepción RX con la de transmisión TX, como se muestra en la figura
4.3.- Ejecute el programa y verifique que el carácter “#” es retransmitido en forma continua.
4.4.- Con el osciloscopio verifique que el dato transmitido corresponda al dato recibido.
4.5.- Grafique la forma de onda observada en el osciloscopio indicando bit de inicio, de final y los
ocho bits de datos.
4.6.- Retire el puente colocado en el punto 4.2 y verifique que la retransmisión sea suspendida.
5.- Aplicación.
5.1.- Arme el siguiente circuito.
+
1
VCC
A
-
2
RB7 RA0
RB6 RA1
RB5 RA2 RX
RB4 RA3
RB3 RA4 TX
RB2 RA5
RB1 RA6 HC06
MCU
RB0
VCC RC6
RC7
RD0 D0
RD1 D1
RD2 D2
RD3 D3
RD4
RD5 D4
RD6 D5
RD7 D6
RC9 D7
PIC18F4550
5.2.- Elabore un programa de acuerdo al diagrama de flujo mostrado a continuación, de forma tal
que reciba a través del puerto USART un carácter que determine la velocidad de giro del motor
conectado en la línea 1 del puerto PORTA.
Programa principal. INICIO
a) Inicia el contador de vueltas Rnv
b) Hace llamado a las subrutinas encargadas de configuración
Rnv 0
de puertos y configuración del USART.
c) Establece comunicación con un dispositivo externo a través
de la subrutina HandSh. Cpuertos
d) Utiliza la subrutina LEER para establecer la velocidad de giro
del motor que es utilizado en la rutina PWM. Cusart
HandSh
LEER
PWM
Subrutina HandSh.
Establece comunicación con el
transmisor y espera la recepción del
carácter de identificación. HandSh
Al recibir el carácter de identificación NO
RCIF = 1
se envia el mensaje “HOLA”. Rdato “O”
SI
En caso de recibir un carácter diferente al de RxByte TxByte
TxByte
identificación se transmite el carácter ”?”
SI Rdato “L”
Rdato = idc Rdato “H”
NO TxByte
Rdato “?”
Rdato “A”
TxByte
TxByte
Rdato 0x00
RETURN
LEER
Subrutina LEER.
RxByteN
Utiliza la subrutina RxByteN para recibir la velocidad de
giro del motor.
W Rdato
La rutina espera por el comando de velocidad y a partir de
PORTA.1 0
este establece los valores para los registros RH y RL.
W W ● 0x0F
SI
ZF = 1
NO
W 0X10 – W RH W
RL W
RETURN
Subrutina RxByteN
PRUEBA el estado de la bandera de recepción RCIF RxByteN
en caso de no estar activada retorna sin acción
alguna. NO
En caso de estar activada, carga el dato recibido y RCIF = 1
lo transfiere al registro Rdato. SI
W RCREG
Rdato W
PWM
RETURN
R6 RH
PORTA.1 1 Subrutina PWM
GTime Utiliza los registros RH y RL para establecer los tiempos en
estado alto y en estado bajo de la señal de control del motor.
PORTA.1 0 Utiliza la rutina Gtime para generar intervalos de tiempo.
NO
RL = 0 R6 RL
SI
GTime
RETURN
GTime
Subrutina GTime
Establece los valores de los registros Rth y Rtl para un tiempo de un
Rtcon 0x08 milisegundo. Estos valores son utilizados en la subrutina TMR0 el
número de veces establecida en el registro R6.
Rth 0xd1
Rtl 0x20
TMR0
R6 R6 - 1
NO
ZF = 1
SI
RETURN
TMR0
Subrutina TMR0
T0CON Rtcon
Toma los valores establecidos en los registros Rtcon, Rth
y Rtl para generar el tiempo requerido. TMR0H Rth
TMR0L Rtl
TMR0ON 1
NO SI
TMR0IF = 1
TMR0IF 0
TMR0ON 0
RETURN
RSI
Vector de INTERRUPCION:
Establece la ejecución de la rutina de servicio CUENTA para la
CUENTA
interrupción INTO.
Rutina de Servicio Cuenta.
Es ejecutada al aparecer un pulso en la línea de
interrupción INT0.
CUENTA
Se encarga de incrementar el registro Rnv que contiene
el número de vueltas.
W Rnv + 1
El contenido del registro Rnv es desplegado en código
BCD en el registro PORTD. Rnv Wda
Al término de la rutina de servicio es puesta en cero la PORTD Rnv
bandera de interrupción INT0IF.
INT0IF 0
RETFIE
CONCLUSIONES