Está en la página 1de 13

#include "p16F84A.

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

PROG2.ASM SUMA DE DOS BITS (LÓGICA)


PROPUESTO
0+0=00
0+1=01
1+0=01
1+1=10
SI SWITCH1=1 ENTONCES
SI SWITCH2=1 ENTOCES
APAGAR1
ENCENDER2
SINO
ENCENDER1
APAGAR2
SINO
SI SWITCH2=1 ENTONCES
ENCENDER1
APAGAR2
SINO
APAGAR1
APAGAR2
SUMA
A+B
A=0010
B=0110
W=0010
VALOR1=W
W=0110
W=W+VALOR1
;W=1000

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 con complemento


A=1
B=2
0001
1101
1110
0001
1111
A+B’+1
A+B’

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
; --------------------------------------------------------------------------------------------------------

movlw 0X05      ;  W=05                


movwf SUMA1         ; SUMA1=W, SUMA1=05
movlw 0X02 ; W=02                
movwf SUMA2 ; SUMA2=W, SUMA2=02
movfw SUMA1 ; W=05
addwf SUMA2, 0 ;
movwf RESUL ;
END                                      
;---------------------------------------------------------------------------------------------------------

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

También podría gustarte