Vous êtes sur la page 1sur 8

Universidad Nacional Autnoma de

Mxico
Facultad de Ingeniera
Laboratorio de Microcomputadoras
Grupo 05
Equipo 04
Prctica No. 1
31/08/2016
Integrantes:

Prctica No. 1:
Introduccin General a un Microcontrolador
PIC16F877
Objetivo:
Familiarizar al alumno en el conocimiento del ensamblador, del simulador, el
conjunto de instrucciones de un microcontrolador y ejecutar programas en tiempo
de simulacin.

Propuesta de Solucin:
3.- Realice un programa que ejecute la siguiente secuencia, misma que deber ver
en la direccin de memoria de su eleccin.
Secuencia:
#$01
#$02
#$04
#$08
#$10
#$20
#$40
#$80
PSEUDOCDIGO:
INICIO
RESETEA:
Mueve al registro W un 1.
Mueve el contenido de W al registro X
COMIENZO:
Rota a la izquierda el contenido del registro X
Compara el bit 7 del registro X, si es un 1 pasa a la siguiente instruccin.
Salta a RESETEA
Salta a COMIENZO
FIN

4.- Desarrollar un programa que presente la cuenta en numeracin decimal en la


localidad de memoria de su eleccin, como se indica a continuacin.
00-01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20
PSEUDOCDIGO:
INICIO
RESETEA:
Mueve un 0 a W
Mueve W a X
UNIDADES:
Incrementa X en uno
Mueve X a W
Resta a W un 0x09
Compara la bandera Z, si ste es un 0 pasa a la siguiente instruccin
Salta a UNIDADES

Mueve un 10 a W
Mueve W a X
DECENAS:
Incrementa X en uno
Mueve X a W
Resta a W un 0x19
Compara la bandera Z, si ste es un 0 pasa a la siguiente instruccin
Salta a DECENAS
Mueve un 20 a W
Mueve W a X
Salta a RESETEA
FIN

5.- Elaborar un programa que encuentre el nmero menor, de un conjunto de


datos ubicados entre las localidades de memoria 20h a 40h; mostrar el valor en la
direccin 41h.

PSEUDOCDIGO
INICIO
Mueve a W un 0x20
Apunta FSR a la localidad 0x20
MueveINDF a W
Mueve W a RESUL
CICLO:
Incrementa FSR en uno
MueveINDF a W
Resta RESUL a W y lo deja en W
Compara el bit 6 de FSR, salta si es 0
Salta a FINAL
Compara Carry, salta si es 1
Salta a CICLO
MueveINDF a W
Mueve W a RESUL
Salta a CICLO
FINAL:
MueveINDF a W
Mueve W a RESUL
FIN

Cdigo comentado:

3.- Realice un programa que ejecute la siguiente secuencia, misma que deber ver
en la direccin de memoria de su eleccin.
Secuencia:
#$01
#$02
#$04
#$08
#$10
#$20
#$40
#$80
Cdigo:
processor 16f877
include <p16f877.inc>
X equ H'26'
org 0
goto resetea
org 5
resetea:
movlw 1
;W = 1
movwf X
;X = W = 1
inicio:
rlf X,1
;Rota a la izquierda el contenido del registro X y deja el resultado en el
mismo registro
btfsc X, 7 ;Compara el bit 7 del registro X, si ste es un 1 pasa a la siguiente
instruccin
goto resetea ;Hace un salto a la etiqueta "resetea"
goto inicio ;Hace un salto a la etiqueta "inicio"
end

4.- Desarrollar un programa que presente la cuenta en numeracin decimal en la


localidad de memoria de su eleccin, como se indica a continuacin.
00-01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20
Cdigo:
processor 16f877
include <p16f877.inc>
X equ H'26'

org 0
goto resetea
org 5
resetea:
movlw 0
;W = 0
movwf X
;X = W = 0
uni:
incf X,1
;Incrementa el contenido del registro X y lo guarda en el mismo
registro
movf X,0
;W = X
sublw 0x09 ;W - 0x09
btfss STATUS,Z ;Compara la bandera Z del registro STATUS, si ste es un 0 pasa
a la siguiente instruccin
goto uni
;Hace un salto a la etiqueta "uni"
movlw 0x10 ;W = 10
movwf X
;X = W = 10
dec:
incf X,1
;Incrementa el contenido del registro X y lo guarda en el mismo registro
movf X,0
;W = X
sublw 0x19 ;W - 0x19
btfss STATUS,Z ;Compara la bandera Z del registro STATUS, si ste es un 0 pasa
a la siguiente instruccin
goto dec
;Hace un salto a la etiqueta "dec"
movlw 0x20 ;W = 20
movwf X
;X = W = 20
goto resetea ;Hace un salto a la etiqueta "resetea"
end

5.- Elaborar un programa que encuentre el nmero menor, de un conjunto de


datos ubicados entre las localidades de memoria 20h a 40h; mostrar el valor en la
direccin 41h.
Cdigo:
processor 16f877
include <p16f877.inc>
resul equ H'41'
org 0
goto inicio
org 5
inicio:

movlw 0x20
movwf FSR
movf INDF,0
movwf resul

;W = 20 hexadecimal
;FSR = W = 20 FSR apunta a la localidad 20
;W = INDF
;resul = W

ciclo:
incf FSR,1
;FSR = FSR + 1
movf INDF,0
;W = INDF
subwf resul,0
;W = W - resul
btfsc FSR,6
;Compara el bit 6 del registro FSR
goto fin
;Salta a la etiqueta "fin"
btfss STATUS,C
;Compara la bandera C (Carry) del registro STATUS
goto ciclo
;Salta a la etiqueta "ciclo"
movf INDF,0
;W = INDF
movwf resul
;resul = W
goto ciclo
;Salta a la etiqueta "ciclo"
fin:
movf INDF,0
movwf resul

;W = INDF
;resul = W

end

Anlisis de resultados:
3.- Realice un programa que ejecute la siguiente secuencia, misma que deber ver
en la direccin de memoria de su eleccin.
Secuencia:
#$01
#$02
#$04
#$08
#$10
#$20
#$40
#$80
Para poder realizar el cdigo de este ejercicio, analizamos los requerimientos del
programa, nos dimos cuenta que se trataba de un corrimiento de un bit hacia la
izquierda, por lo que utilizamos la instruccin rlf que realiza dicho corrimiento.
0000 0001 = 1
0000 0010 = 2
0000 0100 = 4
0000 1000 = 8

0001 0000 = 10
0010 0000 = 20
0100 0000 = 40
1000 0000 = 80
Adems de esto, se utiliz la instruccin btfsc para analizar el bit 7 de nuestra
cadena binaria. De esta forma poder identificar cuando sta estuviera en 80 y
poder resetear la cuenta.
Para cumplir con las especificaciones del programa utilizamos nicamente
direccionamiento directo, pues no fue necesario la utilizacin el registro FSR para
este ejercicio.

4.- Desarrollar un programa que presente la cuenta en numeracin decimal en la


localidad de memoria de su eleccin, como se indica a continuacin.
00-01-02-03-04-05-06-07-08-09-10-11-12-13-14-15-16-17-18-19-20
Para realizar el cdigo de este ejercicio nos basamos en el anterior, pues la lgica
del programa es muy parecida. Utilizando la instruccin incf para incrementar el
registro que muestra la cuenta para posteriormente utilizar sublw junto con btfss
en el registro STATUS para revisar la bandera Z, de esta forma revisamos cuando
la cuenta llegara a 9 y a 19, ya que al llegar a dichos nmeros de deba realizar un
salto de 9 a 10 y de 19 a 20.
Al igual que el ejercicio anterior, nicamente fue necesario utilizar modo de
direccionamiento directo ya que no era necesario apoyarnos del registro FSR.
5.- Elaborar un programa que encuentre el nmero menor, de un conjunto de
datos ubicados entre las localidades de memoria 20h a 40h; mostrar el valor en la
direccin 41h.
Para poder realizar este programa fue necesario apoyarnos en el modo de
direccionamiento indirecto ya que usamos los registros FSR e INDF que
almacenan el puntero del registro en el que nos encontramos y los datos que
contiene dicho registro, respectivamente.
Mediante el apuntador FSR bamos recorriendo de una a una las localidades de
memoria y con el registro INDF podamos acceder a sus valores con lo que
utilizando el registro de trabajo W podamos ir haciendo una comparacin entre el
valor almacenado en W y el actual de INDF; haciendo una resta y observando el
comportamiento de las banderas de ceros(Z) y de Acarreo(C) podamos decidir si
reemplazar el valor o ignorarlo.

Conclusiones: