Vous êtes sur la page 1sur 6

SUMA EN ENSAMBLADOR

list p=16f84

oper1 equ 0x0c


oper2 equ 0x0d
resul equ 0x0e
movlw 0x02
movwf oper1
movlw 0x03
movwf oper2
movf oper1,0
addwf oper2,0
movwf resul
end

;suma
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,0 ;Se suma W y valor, el resultado se guarda en W
movwf resultado ;Mueve lo que contiene W a resultado
END

-----------------------

;resta
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'101' ; 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

MULTIPLICACION Y DIVISON CON PIC16F84


Programa que nos calcula la multiplicacion y division entre dos numeros
usando el PIC16F84.

MULTIPLICACIÓN 21 x 8

DIVISIÓN 45/7
DIAGRAMAS DE FLUJO
1. ;****** Debemos declarar las variables primero, estas son:
2. ;***************************************************
3. ;****** Factor_A
4. ;****** Factor_B
5. ;****** Result_H
6. ;****** Result_L
7. ;****** Dividendo_H
8. ;****** Dividendo_L
9. ;****** Divisor
10. ;****** Cociente_H
11. ;****** Cociente_L
12. ;***************************************************
13.
14. ;Se cargan Previamente en Factor_A y Factor_B los valores a
multiplicar
15. ;El resultado quedará almacenado en Result_H y Result_L
16.
17. Multiplicar
18. clrf Result_L ;borr
amos para inicializar
19. clrf Result_H
20. movf Factor_B,F ;Si
es cero...
21. btfsc STATUS,Z ;En
Caso que el Factor "B" Sea Cero
22. return
;volver con resultado= 0
23. movf Factor_A,W ;carg
amos el Factor "A"
24. Mult_Bucle
25. addwf Result_L,F ;Suma
mos "A", Tantas veces como sea "B"
26. btfsc STATUS,C ;Exis
te Acarreo?...
27. incf Result_H,F ;...S
i. Incrementamos el byte Mayor
28. decfsz Factor_B,F ;Term
inó la Multiplicación?...
29. goto Mult_Bucle ;...
No, Seguimos haciendo sumas.
30. return
;Si. Volvemos a la rutina principal
31.
32.
33. ;Se carga previamente en Dividendo_H y Dividendo_L el valor
total del Dividendo
34. ;y en Divisor el valor del divisor. El resultado quedará
en Cociente_H y Cociente_L
35. ;y el resto quedará en Dividendo_L
36. ;(Nota: Dividendo_H y Dividendo_L serán borrados en el
proceso de división)
37.
38. Dividir
39. clrf Cociente_L ;Limp
iamos el valor del resultado
40. clrf Cociente_H
41. VerifDiv
42. movfw Dividendo_H ;Si
la parte alta del Dividendo...
43. btfss STATUS,Z ;cont
iene algún valor...
44. goto PuedeDividir ;...
Podemos dividir
45. movfw Divisor ;Si
no es el caso...
46. subwf Dividendo_L,W ;...V
erificamos que la parte baja del Dividendo...
47. btfss STATUS,C ;...s
ea mayor que el divisor
48. return
;En caso de ser menor, la división no se realiza
49. PuedeDividir
50. incf Cociente_L,F ;Aume
ntamos el valor del cociente bajo...
51. btfsc STATUS,Z ;...e
n caso de llegar al máximo...
52. incf Cociente_H,F ;...a
umentamos el cociente alto
53. movfw Divisor ;Carg
o el valor del Divisor en W...
54. subwf Dividendo_L,F ;...y
le resto al dividendo el valor del divisor
55. btfsc STATUS,C ;Si
el valor es positivo...
56. goto VerifDiv ;...c
ontinuo con la división...
57. decf Dividendo_H,F ;...S
i fue negativo decremento la parte alta del dividendo y...
58. goto VerifDiv ;...c
ontinuo con la división.
59.

Vous aimerez peut-être aussi