You are on page 1of 10

Ejercicios:

Comprobar cada uno de los siguientes programas en lenguaje ensamblador del PIC
16F84A usando la herramienta de simulación MPLAB IDE y verificar el contenido
de los registros tras ejecutar cada instrucción.

PROG1.ASM
; --------------------------------------------------------------------------------------------------------
; EL SIGUIENTE PROGRAMA SUMA 05 Y 02 en formato hexadecimal
; --------------------------------------------------------------------------------------------------------
COMENTARIOS
LIST P=16F84
SUMA1 EQU 0X0C
SUMA2 EQU 0X0D
RESUL EQU 0X0E
; --------------------------------------------------------------------------------------------------------
; Se han definido 3 variables SUMA, SUMA2 y RESUL en diferentes posiciones ; de la
memoria de datos REGISTER FILE MAP
; --------------------------------------------------------------------------------------------------------
ORG 0
; --------------------------------------------------------------------------------------------------------
; Origen de las instrucciones en el PROGRAM MEMORY MAP
; --------------------------------------------------------------------------------------------------------
W SUMA1 SUMA2 RESUL COMENTARIO
movlw 0X05
movwf SUMA1
movlw 0X02
movwf SUMA2
movfw SUMA1
addwf SUMA2 , 0
movwf RESUL
END
;---------------------------------------------------------------------------------------------------------

PROG2.ASM
Sumar en binario 0001 y 0010. Guardar el resultado en 0x0E

LIST P=16F84
SUMA1 EQU 0X0C
RESUL EQU 0X0E
; --------------------------------------------------------------------------------------------------------
; Se han definido 2 variables SUMA y RESUL en diferentes posiciones de
la ;memoria de datos en el REGISTER FILE MAP
; --------------------------------------------------------------------------------------------------------
ORG 0
; --------------------------------------------------------------------------------------------------------
; Origen de las instrucciones en el PROGRAM MEMORY MAP
; Directiva de compilación
; --------------------------------------------------------------------------------------------------------
movlw b'0001'
movwf SUMA1
movlw b'0010'
addwf SUMA1 , 0
movwf RESUL
END

PROG3.ASM
; --------------------------------------------------------------------------------------------------------
; PROG3.ASM PROGRAMA PARA SUMAR EN BINARIO 2 Y 3
; RESULTADO GUARDADO EN 0X0D
; --------------------------------------------------------------------------------------------------------
LIST P=16F84
SUMA1 EQU 0X0C
RESUL EQU 0X0D
; --------------------------------------------------------------------------------------------------------
; Se han definido 2 variables SUMA1 y RESUL
; en diferentes posiciones de la memoria de datos en el REGISTER FILE MAP
; --------------------------------------------------------------------------------------------------------
ORG 0
; --------------------------------------------------------------------------------------------------------
; Origen de las instrucciones en el PROGRAM MEMORY MAP
; --------------------------------------------------------------------------------------------------------
movlw b'0010'
movwf SUMA1
movlw b'0011'
addwf SUMA1 , 0
movwf RESUL
END
;--------------------------------------------------------------------------------------------------------

PROG4.ASM
; --------------------------------------------------------------------------------------------------------
; SUMA EN DECIMAL 3 Y 5 RESULTADO EN 0X12
; --------------------------------------------------------------------------------------------------------
LIST P=16f84
SUM EQU 0x10
RESUL EQU 0x12
ORG 0
;---------------------------------****** INICIO *****------------------------------------------------
movlw d'3'
movwf SUM
movlw d'5'
addwf SUM,0
movwf RESUL
END
;---------------------------------------------------------------------------------------------------------

Ejercicios propuestos
- Sumar cuatro números en binario (0,1,2,3)

- Sumar tres números y almacenar los números y el resultado en las direcciones


0x0c 0x0d 0x0e 0x0f

- Sumar 2 números, almacenar el resultado en 0x0d, borrar el contenido


del registro SUM y borrar el contenido del registro acumulador W

PROG5.ASM
Cargar el número 5 en 1Ah (VALOR1) y incrementar dos veces (Almacenar en 1ch)
;---------------------------------------------------------------------------------------------------------
; Programa que incrementa el valor 5
; --------------------------------------------------------------------------------------------------------
LIST P=16F84
VALOR EQU 1Ah
ORG 0
;---------------------------------------------------------------------------------------------------------
; INICIO
;---------------------------------------------------------------------------------------------------------
INICIO
movlw h'5'
movwf VALOR
incf VALOR,1
incf VALOR,1
END
;---------------------------------------------------------------------------------------------------------

PROG6.ASM
DECREMENTAR UN VALOR

LIST p=16F84
v equ 0x0a
org 0
inicio
movlw 0x05
movwf v
decf v,1
decf v,1
movfw v
end

Ejercicios propuestos
- Restar dos números binarios y almacenar el resultado en la dirección 0x10

- Decrementar el valor 10 cinco veces y almacenarlo en la dirección 0x2b

PROG7.ASM
Realiza una operación AND entre dos registros
;---------------------------------------------------------------------------------------------------------
list p=16f84
reg1 equ 0xa0
reg2 equ 0xa1
res equ 0xa2

org 0
;---------------------------------------------------------------------------------------------------------
Inici0
movlw b'01110011'
movwf reg1
movlw b'01010101'
movwf reg2
andwf reg1,0
movwf res
end

PROG8.ASM
Realizar operación OR entre un registro y un literal

;--------------------------------------------------------------------------------------------------------
list p=16f84
reg1 equ 0xa0
res equ 0xa1
org 0
;--------------------------------------------- inicio del programa------------------- --------------
inicio
movlw b'00001100'
movwf reg1
iorlw b'00110000'
movwf res
end
;---------------------------------------------------------------------------------------------------------

PROG9.ASM
Rotar dos veces hacia la izquierda el contenido de un registro
; --------------------------------------------------------------------------------------------------------
; rotar el valor 00111111 2 veces a la izquierda
;---------------------------------------------------------------------------------------------------------
list p=16f84
regequ 0x0b
org 0
;---------------------------------------------------------------------------------------------------------
inicio
movlw b'00000110'
movwfreg
rlf reg,1
rlf reg,1
end

Ejercicios propuestos
-Realizar una rotación 4 veces hacia la derecha de un registro de valor
'10110000'

-Realizar una OR Exclusiva de val1='00110101' y val2='10100110'

-Intercambiar los 4 bits menos significativos por los cuatro más Significativos del
valor b'00111010', almacenarlos en un registro
MULTIPLICACIÓN 21 x 8
DIVISIÓN 45/7

Guías de PIC

Guia No 9a (Sumar 2 números): Realizar un programa en lenguaje ensamblador para el


microcontrolador Pic 16f84A que sume y acumule sus datos:

LIST p=16F84

#include "P16F84.INC"

sum equ 0x10 ;Dirección Hexadecimal del 1er operando

dio equ 0x12 ;Dirección Hexadecimal del resultado

org 0

;***programa
movlw d'2' ;carga el acumulador con 2

movwf sum ;Almacena el 2 en sum

movlw d'3' ;Carga el acumulador con 3

addwf sum,0 ;suma 2+3 y guarda en w

movwf dio ;guarda resultado en dio

end

Guia No 9b (Sumar 2 números en Binario): Realizar un programa en lenguaje ensamblador


para el microcontrolador Pic 16f84A que sume y acumule sus datos:

LIST p=16F84

#include "P16F84.INC"

sum equ 0x0C ;Dirección Hexadecimal del 1er operando

dio equ 0x0D

org 0

;***programa

movlw b'0010' ;carga el acumulador con 2 en binario

movwf sum ;Almacena el 2 en sum

movlw b'0011' ;Carga el acumulador con 3 en binario

addwf sum,0 ;suma 2+3 y guarda en w

movwf dio ;guarda resultado en dio

end

Guia No 9c (Realizar una operación ADN entre 2 números registros): Realizar un programa en
lenguaje ensamblador para el microcontrolador Pic 16f84A que haga una operación lógica AND
y acumule sus datos:

List P =16f84

#include ="pic16f84A.inc"

Reg1 equ 0xa0

reg2 equ 0xa1


dio equ 0xa2

org 0

movlw b'01010101' ;carga el acumulador con 55H, w=55H

movwf reg1 ;Almacena 55H en reg1

movlw b'10010111' ;Carga el acumulador con ____H

movwf reg2 ;Almacena ______H en reg2

Andwf reg1,0 ;Hace un And entre reg1 y w y almacena en w

movwf dio ;se mueve el resultado a dio

end

Guia No 9d (Realizar una operación OR entre 2 números registros): Realizar un programa en


lenguaje ensamblador para el microcontrolador Pic 16f84A que haga una operación lógica OR y
acumule sus datos:(El resultado del and entre 01010101 y 10010111 es 00010101)

List P =16f84

#include ="pic16f84A.inc"

Reg1 equ 0xa0

res equ 0xa1

org 0

movlw b'00000110' ;carga el acumulador con 6H, w=6H

movwf reg1 ;Almacena 6H en reg1

iorlw b'00110000' ;Carga el acumulador con H

movwf res ;Almacena H en res

end

Guia No 9e (Rota dos veces a la izquierda un registro): Realizar un programa en lenguaje


ensamblador para el microcontrolador Pic 16f84A que rote 2 veces a la izquierda un registro.

List P =16f84

#include ="pic16f84A.inc"

Reg1 equ 0x0b

org 0
movlw b'00000110' ;carga el acumulador con 6H, w=6H

movwf reg1 ;Almacena 6H en reg1

rlf reg1,1 ;Rota a la izquierda el reg

rlf reg1,1 ;Rota a la izquierda el reg

end