Está en la página 1de 7

PRACTICA3

MOVWF

processor 16f877A ;Indica la versin de


procesador

GOTO PRINCIPAL;

include <p16f877.inc> ;Incluye la librera


de la versin del procesador
org 0 ;Carga al vector de RESET la
direccin de inicio
goto INICIO
org 5 ;Direccin de inicio del programa
del usuario
INICIO
CLRF PORTA
BSF STATUS,RP0 ;Cambia
la banco 1
BCF STATUS,RP1
MOVLW 3FH ;Configura
puertos A y E como digitales
MOVWF TRISA
clrf TRISB

END;
processor 16f877
versin de procesador

;Indica la

include <p16f877.inc>
;Incluye la
librera de la versin del procesador
valor1 equ h'21'
;reserva
memoria en localidad 0x21
valor2 equ h'22'
;reserva
memoria en localidad 0x22
valor3 equ h'23'
;reserva
memoria en localidad 0x23
cte1 equ 20h
constante en 20h

;inicializa

cte2 equ 50h


constante en 50h

;inicializa

cte3 equ 60h


constante en 60h

;inicializa

org 0H

MOVLW 06H ;Configura el


puerto A como entrada

;Carga al vector de RESET la


direccin de inicio

MOVWF ADCON1

goto inicio

BCF STATUS,RP0 ;Regresa

org 05H
;Direccin de inicio del programa
del usuario

al banco cero
PRINCIPAL:

PORTB;

CLRW ;
inicio:
BTFSC PORTA,0;
CLRF PORTA
MOVLW

0FFH ;

BSF STATUS,RP0
banco 1

;Cambia la

GOTO enciende
PORTA == 01 enciende los leds

BCF STATUS,RP1

MOVLW H'02'
;W=02

MOVLW 06H
;Configura puertos A y E como
digitales
MOVWF ADCON1

XORWF PORTA, 0
BTFSC STATUS, Z
GOTO INICIACD
PORTA == 02

MOVLW 3FH
;Configura el puerto A como
entrada

XORWF PORTA, 0
;Se

BTFSC STATUS, Z
GOTO INICIACI
PORTA == 03

MOVWF TRISB
BCF STATUS,RP0
;Regresa al banco cero

XORWF PORTA, 0
;

BTFSC STATUS,Z
verifica la bandera Z

;Se

goto apaga
PORTA == 00 apaga los leds

;Si

XORWF PORTA, 0
BTFSC STATUS, Z

BTFSC STATUS, Z
GOTO corrimientoMixto
PORTA == 04

MOVF PORTA, 0

MOVLW H'01'
;W=01

;Si

MOVLW H'04'
;W=04

CLRF PORTB
LEER:
XOR = 1 -> numeros diferentes

;Si

MOVLW H'03'
;W=03

MOVWF TRISA
MOVLW H'0'
configura el puerto B como salida

;Si

;Si

GOTO enciendeApaga
;Si PORTA == 05 o cualquier valor
apaga:
CLRF PORTB
GOTO LEER
enciende:
MOVLW H'FF'

MOVWF PORTB

MOVWF PORTB

GOTO LEER

CALL retardo

INICIACD:

CALL retardo

bcf STATUS,C
;si carry es
1, limpia la bandera del carry
MOVLW H'80'
MOVWF PORTB

corrimientoIzq:
RLF PORTB
;realiza un corrimiento de bits a la
derecha
call retardo

CALL retardo

call retardo

CALL retardo
corrimientoDer:

BTFSS STATUS, C
;pregunta
por el estado de la bandera carry

RRF PORTB
;realiza un corrimiento de bits a la
derecha

GOTO corrimientoIzq ;si carry es


0, salta a corrimiento
bcf STATUS,C
;si carry es
1, limpia la bandera del carry

call retardo
call retardo
BTFSS STATUS, C
;pregunta
por el estado de la bandera carry
GOTO corrimientoDer
carry es 0, salta a corrimiento

;si

bcf STATUS,C
;si carry es
1, limpia la bandera del carry
GOTO LEER
;regresa al inicio
INICIACI:
bcf STATUS,C
;si carry es
1, limpia la bandera del carry
MOVLW H'01'

GOTO LEER
;regresa al inicio
corrimientoMixto:
bcf STATUS,C
;si carry es
1, limpia la bandera del carry
MOVLW H'80'
MOVWF PORTB
call retardo
call retardo
corrimientoDerM:
RRF PORTB
;realiza un corrimiento de bits a la
derecha

call retardo

call retardo

call retardo

call retardo

BTFSS STATUS, C
;pregunta
por el estado de la bandera carry

COMF PORTB
call retardo

GOTO corrimientoDerM;si carry


es 0, salta a corrimiento
bcf STATUS,C
;si carry es
1, limpia la bandera del carry
MOVLW H'01'

call retardo
goto LEER
retardo:
;Rutina de retado
movlw cte1

MOVWF PORTB

movwf valor1

call retardo

tres:

call retardo

movlw cte2

corrimientoIzqM:

movwf valor2

RLF PORTB
;realiza un corrimiento de bits a la
derecha

dos:
movlw cte3

call retardo
movwf valor3
call retardo
uno:
BTFSS STATUS, C
;pregunta
por el estado de la bandera carry

decfsz valor3
goto uno

GOTO corrimientoIzqM;si carry es


0, salta a corrimiento

decfsz valor2

bcf STATUS,C
;si carry es
1, limpia la bandera del carry

goto dos
decfsz valor1

GOTO LEER
;regresa al inicio

goto tres
return

enciendeApaga:
CLRF PORTB

end

Anlisis de resultados
Se alcanzaron los objetivos
En esta prctica se cumplieron rotundamente los objetivos ya que pudimos usar dos
puertos paralelos del microprocesador en este caso el A y B. Usamos estos puertos para
lograr hacer funciones de control a partir del ensamblador.
En el caso del punto uno se lograron los objetivos al emplear los dos puertos paralelos del
microcontrolador configurando cada uno de ellos, uno como entrada, y el otro como
salida. Se logr establecer que de acuerdo al valor establecido en el puerto A, sea cero o
uno, se gener una accin para el puerto B. Logrando as el objetivo. De la misma forma
que en el primer punto, en el segundo punto se trabaj con un puerto de entrada y con
otro de salida, logrando generar retardos de medio segundo, de acuerdo a nuestra tabla
de acciones de control establecidas. Logrando as tambin el objetivo.
Perifricos usados
Para realizar esta prctica utilizamos el puerto A y B. En donde el puerto A actu como
entrada y el B como salida.
Flujo interno
El puerto A del microprocesador fue nuestra entrada ya que por medio de un dipswitch
introdujimos los datos para que nuestro programa operara, dependiendo del nmero que
se asignara se realizaban diferentes funciones a travs del puerto B que resulto ser
nuestra salida, ya que aqu se mostraba las funciones antes mencionadas; dependiendo de
la instruccin los leds prendan o apagaban en diferentes secuencias.
Modos de direccionamiento
En esta prctica solo hicimos uso del modo de direccionamiento indexado ya que el
procesador calcula la direccin real y el operando se encuentra en memoria. Adems el
registro se modifica a menudo en la ejecucin del programa.
Conclusiones.
Mendoza Gonzlez Ernesto
Esta prctica me pareci muy divertida ya que empezamos a hacer ms cosas con el
micro, tambin que los programas son muy parecidos, pero eso me ayuda ms a como
comprender el funcionamiento y tambin a como programar mejor el micro.

Se nos complic un poco en el programa dos ya que tuvimos que implementar como un
tipo Switch para los diferentes casos que se podan presentar, pero aparte de eso fue muy
sencillo.
Martnez Ramrez Karen Liliana
Esta prctica me pareci muy interesante ya que pudimos ver con ms detalle de lo que es
capaz un microprocesador, esta vez trabajamos con los puertos paralelos del pic, con el
dipswitch del puerto A nosotros podamos introducir nuestros datos y el resultado de las
instrucciones ejecutadas al realizar esas acciones se mostraban en los leds del puerto B.
Esta vez nos pareci ms complicado implementar nuestro cdigo en ensamblador. El
ejercicio dos fue el que me pareci ms interesante porque para cada diferente numero
ingresado en binario los leds prendan y apagaban de diferentes maneras .
Miranda Vzquez Pedro Alberto
A decir verdad esta prctica estuvo muy interesante puesto aprend a emplear puertos
paralelos contenidos en un microcontrolador, aprendiendo adems a configurar a un
puerto como entrada y a el otro como salida. Creo yo que del que ms aprend, en esta
prctica, fue del segundo ejercicio ya que adems de lograr hacer retardos de medio
segundo en cada secuencia, logramos que cuando era cero; todos los leds se mantenan
apagados, que cuando era uno; todos encendidos, que cuando era tres; corrimiento hacia
la izquierda, con cuatro; a la derecha, y con cinco logramos apagar y prender todos los
bits. Por lo que se podra decir que adems de lo aprendido se lograron cumplir todos los
objetivos.

También podría gustarte