Documentos de Académico
Documentos de Profesional
Documentos de Cultura
inc"
__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF ORG 0x00
LIST P=16F84A
PROG1.ASM ENCENDER/APAGAR
El código que permite implementar esta aplicación es el siguiente.
1 #include "p16F84A.inc"
2
3 __CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _CP_OFF
4
5 ORG 0x00
6
7 Configuracion
8 BSF STATUS,RP0
9
10 MOVLW b'00000011'
11 MOVWF TRISB
12
13 BCF INTCON,GIE
14 BCF STATUS,RP0
15
16 Apagado
17 BCF PORTB,2
18 BTFSS PORTB,0
19 GOTO Apagado;NO
20 GOTO Encendido;SI
21
22 Encendido
23 BSF PORTB,2
24 BTFSS PORTB,1
25 GOTO Encendido
26 GOTO Apagado
27
28 END
MINUENDO A= 1001
SUSTRAENDO B= 0010
W=1001
VALOR1=W=1001
W=0010
VALO2=W=0010
CMP (VALOR2)= 1101
W=VALOR2=1101
W=W+VALOR1
RESULTADO=W
;resultado=0111
1001
1101
10110
RESTA SUB
12-4
1100-0100
A-B
MINUENDO=VALOR1=A
SUSTRAENDO=VALOR2=B
W=1100
Valor1=W
W=0100
SUBWF VALOR, 0
MOVWF RESULTADO
PROG1.ASM
SUMA DE TRES VALORES CONSTANTES
list P = 16F84A
valor EQU 0x21 ;Esta localidad se definirá como valor
resultado EQU 0X22 ;Esta localidad se definirá como resultado
ORG 0
Inicio
movlw b'10' ;Se le asigna un valor a W
movwf valor ;Lo que contiene W es movido a valor
movlw b'110' ;Se le asigna otro valor a W
addwf valor, 1 ;Se suma W y valor, el resultado se guarda en valor
movlw b’111’
addwf valor, 0
movwf resultado ;Mueve lo que contiene W a resultado
END
W=10
Valor=10
W=110
Valor= 1000
W=111
W=1111
Resultado = 1111
PROG2.ASM
;resta de valor1-valor2 a través de complemento
list P = 16F84A
valor1 EQU 0x20 ;Esta localidad se definirá como valor1
valor2 EQU 0X21 ; Esta localidad se definirá como valor2
resultado EQU 0x22 ; Esta localidad se definirá como resultado
ORG 0
Inicio
movlw b'1010' ;Guarda el valor de 1010 binario en W
movwf valor1 ;Mueve W a valor1
movlw b'0101' ; Guarda el valor de 101 binario en W
movwf valor2 ;Mueve W a valor2
comf valor2,1 ;Saca el conjugado de valor2 y lo guarda en valor2
movf valor2,0 ;Mueve valor2 a W
addwf valor1,0 ;Suma valor1 + W y lo guarda en W
movwf resultado ;Mueve W a resultado.
END
W= 1010
Valor1 = 1010
W= 0101
Valor2 = 0101 ----- 1010
W= 1010
W= valor1+W
W = 10100
PROG3.ASM
EJERCICIO PROPUESTO. Resta SUBWF
Valor1-Valor2
;resta
list P = 16F84A
valor1 EQU 0x20 ;Esta localidad se definirá como valor1
resultado EQU 0x21 ; Esta localidad se definirá como resultado
ORG 0
Inicio
movlw b'1010' ;Guarda el valor de 1010 binario en W
movwf valor1 ;Mueve W a valor1
movlw b'0101' ; Guarda el valor de 0101 binario en W
subwf valor1,0 ;Suma valor1 - W y lo guarda en W
movwf resultado ;Mueve W a resultado.
END
PROG4.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 valores (REGISTROS) SUMA1, 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
; --------------------------------------------------------------------------------------------------------
PROG5.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 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
; Directiva de compilación
; --------------------------------------------------------------------------------------------------------
movlw b'0001' ; W=0001
movwf SUMA1 ; SUMA1=W, SUMA1=0001
movlw b'0010' ; W=0010
addwf SUMA1, 0 ; W=SUMA1+W, W=0011
movwf RESUL ; RESUL=W, RESUL=0011
END
PROG6.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' ; W=0010
movwf SUMA1 ; SUMA1=W=0010
movlw b'0011' ; W=0011
addwf SUMA1, 0 ; W=SUMA1+W=0101
movwf RESUL ; RESUL = W= 0101
END
;--------------------------------------------------------------------------------------------------------
PROG7.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' ; W=3
movwf SUM ; SUM=W=3
movlw d'5' ; W=5
addwf SUM,0; W=SUM+W=8
movwf RESUL ; RESUL=W=8
END
;---------------------------------------------------------------------------------------------------------
Ejercicios propuestos
PROG8.ASM
- Sumar cuatro números en binario (1,3, 5, 7)
PROG9.ASM
- Sumar tres números y almacenar los números y el resultado en las direcciones 0x0C 0x0D
0x0E 0x0F
PROG10.ASM
- Sumar 2 números, almacenar el resultado en 0x0D, borrar el contenido del registro SUM
y borrar el contenido del registro acumulador W
PROG11.ASM
Cargar el número 5 en 1Ah (VALOR) y incrementar dos veces (Almacenar en 1Ch)
;---------------------------------------------------------------------------------------------------------
; Programa que incrementa el valor 5
; --------------------------------------------------------------------------------------------------------
LIST P=16F84
VALOR EQU 1Ah
RESUL EQU 1Ch
ORG 0
;---------------------------------------------------------------------------------------------------------
; INICIO
;---------------------------------------------------------------------------------------------------------
INICIO
movlw h'5' ; W=5
movwf VALOR ; VALOR=5
incf VALOR,1 ; VALOR =6
incf VALOR,1 ; VALOR=7 incf valor, 0; w=7
movf VALOR, 0; W=7 movwf resul; resul=7
movwf RESUL ; RESUL = 7
END
;---------------------------------------------------------------------------------------------------------
PROG12.ASM
DECREMENTAR UN VALOR
LIST p=16F84
v equ 0x0A
org 0
inicio
movlw 0x05
movwf v ; v= 5
decf v,1 ; v=4
decf v,1 ; v=3
movf v,0 ; w=3
end
Ejercicios propuestos
PROG13.ASM
Restar dos números binarios y almacenar el resultado en la dirección 0x10
PROG14.ASM
Decrementar el valor 1000 cincuenta (N) veces y almacenarlo en la dirección 0x2B
N=100
MIENTRAS N<>0
HACER
W=W+N
DECF N,1
MOVF V,0
PROG15.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
PROG16.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
;---------------------------------------------------------------------------------------------------------
PROG17.ASM
Rotar dos veces hacia la izquierda el contenido de un registro
; --------------------------------------------------------------------------------------------------------
; rotar el valor 00111111 2 veces a la izquierda
;---------------------------------------------------------------------------------------------------------
list p=16f84
reg EQU 0X0B
org 0
;---------------------------------------------------------------------------------------------------------
inicio
movlw b'00000110'
movwf reg
rlf reg,1
rlf reg,1
end
Ejercicios propuestos
PROG18.ASM
-Realizar una rotación 4 veces hacia la derecha de un registro de valor
'10110000'
;---------------------------------------------------------------------------------------------------------
list p=16f84
reg EQU 0X0B
org 0
;---------------------------------------------------------------------------------------------------------
inicio
movlw b'10110000'
movwf reg
RRF reg,1
RRF reg,1
RRF reg,1
RRF reg,1
end
PROG19.ASM
-Realizar una OR Exclusiva de val1='00110101' y val2='10100110'
list p=16f84
val1 equ 0xA0
val2 equ 0xA1
res equ 0xA2
org 0
;---------------------------------------------------------------------------------------------------------
Inici0
movlw b'00110101'
movwf reg1
movlw b'10100110'
movwf reg2
xorwf reg1,0 ;
movwf res
end
PROG20.ASM
-Intercambiar los 4 bits menos significativos por los cuatro más Significativos del valor
b'00111010', almacenarlos en un registro.
list p=16f84
reg1 equ 0xA0
res equ 0xA1
org 0
;--------------------------------------------- inicio del programa------------------- --------------
inicio
movlw b'00111010’
movwf reg1
swapf reg1, 0
movwf res
end
PROG21.ASM
Multiplicación de dos números
PROG22.ASM
División entre dos números
PROG23.ASM
Realizar un programa con todas las operaciones antes realizadas. Usando 2 variables
(registros) para guardar los valores de entrada y generar un resultado diferente por cada
operación realizada.
PROG24.ASM
Semáforo (use su creatividad)
PROG25.ASM
Realizar un programa que simule una serie navideña, puede generar los cambios de las
luces, ejecutando las operaciones del programa 23
ALU DE 4 BITS