You are on page 1of 5

UNIVERSIDAD NACIONAL AUTONOMA DE MXICO

LAB. DE MICROCONTROLADORES

PRCTICA 4

PUERTOS PARALELOS III


MOTORES DE CORRIENTE DIRECTA

Amado Esparza Martn del Campo

02/10/2017
MOTORES DE CORRIENTE DIRECTA
Circuito L293B PUENTE H corriente salida 1

L293D PUENTE H corriente salida 600 [ma]

Asignacin tarjeta de laboratorio

EN=1 encendido

EN=0 apagado

DIR=1 sentido horario

DIR= 0 sentido antihorario

XOR
0 0 0
0 1 1
1 0 1
1 1 0

Entrada Salida
PORTA PORTB
SWITCH Motores

PORTB

EN2 DIR2 EN1 DIR1


0 0 0 0
0 0 1 1
1 0 0 0
1 1 0 0

PORTA

B5 B4 B3 B2 B1 B0
0 0 0 0 0 0 Paso1
0 0 0 0 1 0 Paso2
0 0 0 1 0 0 Paso3
0 0 1 0 0 0 Paso4
0 1 0 0 0 0 Paso5
1.- De acuerdo a la asignacin de la tarjeta del driver de motores realizar un programa, el cual permita
controlar el funcionamiento y sentido de giro de cada uno de ellos por separado, a travs del puerto
paralelo A, el puerto B deber mandar las seales al driver.

processor 16f877;configura mplab para el micro pic 16f877


include <p16f877.inc>; incluye la libreria del pic
org 0H; vector de inicio del micro
goto inicio; ve a la etiqueta inicio
org 5H; vector de inicio del micro
inicio: bsf STATUS, RP0;configura banco
bcf STATUS, RP1;configura banco
movlw H'FF'; pone 1s en el registro W
movwf TRISA; los pone en el registro TRISA// configura entradas
clrf TRISB; pone en 0 el registro TRISB//configura salidas
movlw 06H; pone un 6 en el registro W
movwf ADCON1; lo pone en el registro ADCON1
bcf STATUS, RP0; limpia el registro RP0
switch: movf PORTA,0; mueve un 0 a registro f
xorlw H'00'; hace un xor
btfsc STATUS,Z; revisa el carry brinca si es 1
call paso1; llama la subrutina paso1
movf PORTA,0;mueve un 0 a port A
xorlw b'00000010';hace un XOR con un 2
btfsc STATUS,Z; revisa el status de la bandera carry y brinca si es 1
call paso2; llama la subrutina paso2
movf PORTA,0; mueve un 0 a PORTA
xorlw H'04'; hace un XOR con un 4
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso3; llama la subrutina paso3
movf PORTA,0; mueve un 0 a PORTA
xorlw H'08'; hace un XOR con un 8
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso4; llama la surutina paso4
movf PORTA,0; pone un 0 en PORTA
xorlw H'10'; hace un XOR con un 10
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso5; llama la subrutina paso5
goto switch; va a la etiqueta switch
paso1: movlw H'00'; para el caso 1 mueve un 0 al registro w
movwf PORTB; lo mueve al registro PORTB
RETURN; regresa
paso2: movlw H'03';para el caso 2 mueve un 03 al registro w
movwf PORTB ; lo mueve al registro PORTB
RETURN; regresa
paso3: movlw H'02';para el caso 3 mueve un 2 al registro W
movwf PORTB;lo mueve al registro PORTB
RETURN; regresa
paso4: movlw H'08'; para el caso 4 mueve un 8 al registro W
movwf PORTB; lo mueve al registro PORTB
RETURN;regresa
paso5: movlw b'00001100';para el caso 5 mueve una C al registro W
movwf PORTB; mueve la C al registro PORTB
RETURN; regresa
End; fin del programa

2.- Considerando la informacin y los circuitos del ejercicio anterior, realizar un programa que de
acuerdo a una seal de control ingresada por el puerto A, se genere la accin indicada en la tabla 4.2.

processor 16f877;configura mplab para el micro pic 16f877


include <p16f877.inc>; incluye la libreria del pic
org 0H; vector de inicio del micro
goto inicio; ve a la etiqueta inicio
org 5H; vector de inicio del micro
inicio: bsf STATUS, RP0;configura banco
bcf STATUS, RP1;configura banco
movlw H'FF'; pone 1s en el registro W
movwf TRISA; los pone en el registro TRISA// configura entradas
clrf TRISB; pone en 0 el registro TRISB//configura salidas
movlw 06H; pone un 6 en el registro W
movwf ADCON1; lo pone en el registro ADCON1
bcf STATUS, RP0; limpia el registro RP0
switch: movf PORTA,0; mueve un 0 a registro f
xorlw H'00'; hace un xor
btfsc STATUS,Z; revisa el carry brinca si es 1
call paso1; llama la subrutina paso1
movf PORTA,0;mueve un 0 a port A
xorlw b'00000010';hace un XOR con un 2
btfsc STATUS,Z; revisa el status de la bandera carry y brinca si es 1
call paso2; llama la subrutina paso2
movf PORTA,0; mueve un 0 a PORTA
xorlw H'04'; hace un XOR con un 4
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso3; llama la subrutina paso3
movf PORTA,0; mueve un 0 a PORTA
xorlw H'08'; hace un XOR con un 8
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso4; llama la surutina paso4
movf PORTA,0; pone un 0 en PORTA
xorlw H'10'; hace un XOR con un 10
btfsc STATUS,Z; revisa la bandera de carry y brinca si es 1
call paso5; llama la subrutina paso5
goto switch; va a la etiqueta switch

paso1: movlw H'00'; mueve un 0 al registro W


movwf PORTB; lo pasa al registro PORTB
RETURN; regresa
paso2: movlw H'0F'; mueve una F al registro W
movwf PORTB; lo pasa al registro PORTB
RETURN; regresa
paso3: movlw H'0A'; mueve una A al registro W
movwf PORTB; lo pasa al registro PORTB
RETURN;regresa
paso4: movlw H'0B'; mueve una B al registro W
movwf PORTB; lo pasa al registro PORTB
RETURN; regresa
paso5: movlw H'0E'; mueve una E al registro W
movwf PORTB; lo pasa al registro PORTB
RETURN; regresa
End; fin del programa

Conclusin:
Reafirmamos el uso de los puertos seriales y cmo configurarlos cambindonos al banco 0 y ponindolos
como entrada o salida y regresando al banco1 para seguir escribiendo nuestro programa, en esta ocasin
ocupamos el puerto a los dip switch para nuestras entradas y utilizamos el puerto B conectado al puerto
de los motores para nuestras salidas y configuramos hacia adelante o hacia atrs los giros de las ruedas
en los motores dependiendo de los dip switch utilizando la compuerta XOR.

You might also like