Está en la página 1de 9

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

También podría gustarte