Sie sind auf Seite 1von 7

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.

+
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
2.- 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:

2.1.- Un programa principal encargado de manejar las siguientes subrutinas:


a) Cpuertos.- para la configuración de puertos.
b) Cusart.- para configurar el USART.
c) 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: INICIO

Hace el llamado a las subrutinas Cpuertos encargada de la


programación de puertos y Cusart para la configuración del Cpuertos
USART

Amacena el dato de prueba en el registro Rdato y hace Cusart


llamado a la subrutina Txbyte para la transmisión del dato de
prueba.
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
Cusart Subrutina Cusart

SSPCON1  0X00 Deshabilita el módulo SSP.


Programa los bits 6 y 7 del PORTC para
TRISC,7  1 RCSTA  0X90 transmisión y recepción serie.

TRISC,6  0 BAUDCON  0X08 Configura el baud rate a 9600 bps.

SPBRG  val1 W  RCREG


Habilita la transmisión con BAUD RATE alto.
Habilita el puerto serial para recepción
SPBRGH  val2 continua.
W  RCREG

TXSTA  0X24
RETURN

Subrutina Txbyte Txbyte


Monitorea el bit TRMT hasta que la transmisión
anterior haya concluido NO
TRMT = 1
Carga el dato a transmitir almacenado
SI
previamente en el registro Rdato y lo tranfiere al
registro de transmisión TXREG. W  Rdato

TXREG  W

RETURN

RxByte

NO
RCIF = 1

SI
W  RCREG
Subrutina RxByte
Monitorea el bit RCIF hasta que una recepción se
Rdato  W
haya realizado.

RETURN Carga el dato recibido y lo transfiere al registro


Rdato.
3.- Prueba de transmisión.
3.1.-Coloque la punta del osciloscopio en la línea de transmisión TX del microcontrolador.

3.2.- Verifique que la señal en el osciloscopio


corresponda a la señal mostrada en la figura
anexa.

3.3.- Mida el ancho del pulso del bit de inicio. T = _____________

3.4.- A partir del tiempo medido, calcule el BAUD RATE y verifique que sea 9600 bps.

3.5.- Modifique el programa fuente para transmitir un caracter ’a’

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

Rxbyte

4.2.- Conecte la línea de recepción RX con la de transmisión TX.


4.3.- Con el osciloscopio verifique que el dato transmitido corresponda al dato recibido.
4.4.- Grafique la forma de onda observada en el osciloscopio indicando bit de inicio, de final y los
ocho bits de datos.
5.- Aplicación.
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

HandSh

NO
RCIF = 1
Rdato  “O”
SI
RxByte TxByte
TxByte

SI Rdato  “L”
Rdato = idc Rdato  “H”

NO TxByte

Rdato  “?”
Rdato  “A”

TxByte Subrutina HandSh.


TxByte
Establece comunicación con el
transmisor y espera la recepción del
Rdato  0x00 carácter de identificación.

RETURN Al recibir el carácter de identificación


se envia el mensaje “HOLA”.

En caso de recibir un carácter diferente al de


identificación se transmite el carácter ”?”
LEER
Subrutina LEER.
RxByte
Utiliza la subrutina RxByte para recibir la velocidad de giro
W  Rdato del motor.
PORTA.1 0
W  W ● 0x0F La rutina espera por el comando de velocidad y a partir de
este establece los valores para los registros RH y RL.
SI
ZF = 1

NO
W  0X10 – W RH  W

RL  W

RETURN

PWM

R6  RH
Subrutina PWM
PORTA.1  1
Utiliza los registros RH y RL para establecer los tiempos en
estado alto y en estado bajo de la señal de control del GTime
motor.
Utiliza la rutina Gtime para generar intervalos de tiempo.
PORTA.1  0

NO
GTime RL = 0 R6  RL

SI
Rtcon  0x08 GTime

Rth  0xd1 RETURN

Rtl  0x20

TMR0

R6  R6 - 1

NO
ZF = 1 Subrutina GTime
SI Establece los valores de los registros Rth y Rtl para un tiempo de un
milisegundo. Estos valores son utilizados en la subrutina TMR0 el
RETURN número de veces establecida en el registro R6.
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

Vector de INTERRUPCION:
Establece la ejecución de la rutina de servicio CUENTA para la
interrupción INTO.
RSI

CUENTA

CUENTA

W  Rnv + 1
Rutina de Servicio Cuenta.

Rnv  Wda Es ejecutada al aparecer un pulso en la línea de


interrupción INT0.
PORTD  Rnv Se encarga de incrementar el registro Rnv que contiene
el número de vueltas.
INT0IF  0
El contenido del registro Rnv es desplegado en código
BCD en el registro PORTD.
RETFIE
Al término de la rutina de servicio es puesta en cero la
bandera de interrupción INT0IF.

CONCLUSIONES

Das könnte Ihnen auch gefallen