Vous êtes sur la page 1sur 7

Ejercicio 1

Siguiendo las indicaciones previas, escribir el siguiente programa, ensamblar y simular el


funcionamiento de este.
processor 16f877
include <p16f877.inc>
K equ H'26' ;Se crea constante llamada K con valor de 26 en hexadecimal
L equ H'27' ; Se crea constante llamada L con valor de 27 en hexadecimal
org 0
goto inicio
org 5
inicio:
movlw h'05' ;Se carga el numero 5 en el registro de trabajo
addwf K,0; Suma W+K y el resultado lo guarda en W
movwf L ; Se carga el valor del registro de trabajo en la direccin 27H
goto inicio ;Salto incondicional a la etiqueta inicio
end
Ejercicio 2
Modificar el programa anterior, para que ahora los datos que operara se encuentren en las
localidades reservadas para J y K respectivamente y el resultado almacenarlo en otras
direcciones, reservadas para C1 y R1 donde C1 representara el valor de la bandera de
acarreo y R1 el resultado.
processor 16f877
include<p16f877.inc>

J equ h'20'
K equ h'21'

;Se declaran constantes

R1 equ h'22'
C1 equ h'23'

org 0
goto inicio
org 5

inicio:
movf K,w ;Se carga el contenido de la direccin K en W
addwf J,0 ;Se suma W+J y guarda el resultado en W
movwf R1 ;Se carga el valor de W en R1
btfss STATUS,DC ;Se pregunta si la bandera de acarreo esta encendida
goto INICIO ;No, Salto incondicional a inicio
movlw 1 ;Si, Se carga 1 en W
movwf C1 ;Se carga el contenido de W en C1
goto inicio ;Salto incondicional a inicio
end

Ejercicio 3
Realice un programa que ejecute la siguiente secuencia, misma que debera ver en la
direccin de memoria de su eleccin.

processor 16f877
include<p16f877.inc>

J equ h'20'

;Se declaran constantes

org 0
goto inicio
org 5

inicio:
movlw h'1'

;Carga a W con 1

movwf J ;Se carga el valor de W en J


loop;
rlf h'20',1 ;Se hace una rotacin a la izquierda y el resultado se guarda en J
btfss J,7 ;Se pregunta si el bit 7 de J esta en 1
goto loop

;No, Se vuelve a hacer la rotacin

goto inicio ;SI, Se vuelve a iniciar secuencia

end

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.

processor

16f877

include<p16f877.inc>

J equ h'20'

;Se declaran constantes

org 0
goto INICIO
org 5

LIMPIA
clrf J

;Pone en 0 a J

inicio
incf J,1 ;Incremento en J

movlw h'9'

;Carga en W el valor de 9h

subwf J,0 ;Se realiza operacin W-J y el resultado se guarda en W


btfss STATUS,Z ;Verifica si la bandera de Z esta prendida
goto INICIO

;No, Repite el ciclo

;Si, Se llego a 9 y avanzamos


DIEZ
movlw h'7'

;Carga en W el valor de 7

addwf J ;Suma W+J para obtener el numero 10 o 20


INC
movlw h'20'

;Carga el valor de 20h en W

subwf J,0 ;Se realiza operacin W-J y el resultado se guarda en W

btfsc STATUS,Z ; Verifica si la bandera de Z esta apagada


goto LIMPIA ;NO, llegamos a 20 y empieza la cuenta otra vez
incf J

;Si, incrementa J en 1

movlw h'19'

;Carga el valor de 19h en W

subwf J,0 ;Se realiza operacin W-J y el resultado se guarda en W


btfsc STATUS,Z ; Verifica si la bandera de Z esta apagada
goto DIEZ

;No,ve a DIEZ

goto INC

;Si,repite el ciclo

end

Ejercicio 5

processor 16f877
include<p16f877.inc>

var equ h'20' ; Declarar constantes

org 0
goto INICIO
org 5

INICIO
movlw h'21' ;Se carga el valor de 21 en W
movwf FSR

;FSR apunta al siguiente elemento

movf var,w

;W contiene el primer elemento

movwf h'41';Se carga el primer elemento en 41


EVALUA
btfsc FSR,6
goto FIN

;Verifica si el bit 6 de FSR esta encendido


;SI, finaliza

subwf INDF,0 ;NO; Realiza INDF-W y guarda el resultado en W


btfsc STATUS,C ;Verifica si la bandera C esta prendida
goto CONSERVA ;No, No se ha encontrado un numero menor
goto CAMBIA
CAMBIA

;Si, Se ha encontrado otro numero menor

movf INDF,w ;Se carga a w con el numero menor


incf FSR,1

;FSR apunta al siguiente

movwf h'41'

;Se carga en h'41' el numero menor

movwf var

;Se carga en Var el numero menor

goto EVALUA ;Sigue comparando


CONSERVA
incf FSR,1

;Apunta al siguiente

movf var,w

;Carga el mayor en W

goto EVALUA ;Sigue comparando


end