Академический Документы
Профессиональный Документы
Культура Документы
Suma
movfw PORTA ;
Copio el Contenido de PORTA en W
movwf num1 ;
Copio el Contenido de W en num1
movfw PORTB ;
Copio el Contenido de PORTB en W
movwf num2 ;
Copio el Contenido de W en num2
clrw ;
Limpia W
movfw num1 ;
Muevo num1 a W
addwf num2,0 ; Sumo W = W + num2, el resultado se almacena en W
call Binario_Bcd ; Subrutina para convertir de Binario a Bcd
clrw ; Limpio a W
goto Inicio
Resta
movfw PORTA ; Copio el Contenido de PORTA en W
movwf num1
movfw PORTB ; Copio el Contenido de PORTA en W
movwf num2
clrw
movfw num1
subwf num2,0
call Binario_Bcd
movwf PORTD ; Copio el contenido de W en PORTD
clrw ; Limpio a W
goto Inicio
Multiplicacion
clrw
movfw PORTA
movwf num1
clrw
movfw PORTB
movwf num2
clrw
incf num2,1
ciclo
decfsz num2,1
goto sumasuce
call Binario_Bcd
clrw
goto Inicio
sumasuce
addwf num1,0
goto ciclo
;//////////////////////Conversion de Binario a BCD///////////////////////////////
; Un nmero binario de 8 bits es convertido a BCD. El resultado se guarda en tres
posiciones
; de memorias llamadas Centenas, Decenas y Unidades.
; El mximo nmero a convertir ser el 255 que es el mximo valor que puede
adquirir el
; nmero binario de entrada de 8 bits.
; El procedimiento utilizado es mediante restas de 10 tal como se explica en el
siguiente
; ejemplo que trata de la conversin del nmero 124 a BCD:
;----------------------------------------------------------------------------------
-------
; (Centenas) (Decenas) (Unidades) (Unidades)<10? (Decenas)=10?
; ---------- --------- ---------- --------------
-------------------------
;
; 0 0 124 NO, resta 10 Incrementa
(Decenas).
; 0 1 114 NO, resta 10 NO. Incrementa
(Decenas).
; 0 2 104 NO, resta 10 NO. Incrementa
(Decenas).
; 0 3 94 NO, resta 10 NO. Incrementa
(Decenas).
; 0 4 84 NO, resta 10 NO. Incrementa
(Decenas).
; 0 5 74 NO, resta 10 NO. Incrementa
(Decenas).
; 0 6 64 NO, resta 10 NO. Incrementa
(Decenas).
; 0 7 54 NO, resta 10 NO. Incrementa
(Decenas).
; 0 8 44 NO, resta 10 NO. Incrementa
(Decenas).
; 0 9 34 NO, resta 10 NO. Incrementa
(Decenas).
; 1 0 24 NO, resta 10 S. (Decenas)=0, y
adems
; incrementa (Centenas)
; 1 1 14 NO, resta 10 NO. Incrementa
(Decenas)
; 1 2 4 S, se acab.
;
; El nmero a convertir ser el resultado de las operaciones previas en la
calculadora
Binario_Bcd
clrf Centenas
clrf Decenas ; Limpia el registro
movwf Unidades ; Mueve W a Unidades
BCD_Resta10
movlw .10 ; A las unidades se les va restando 10 en cada
subwf Unidades,W ; pasada. (W)=(Unidades)-10.
btfss STATUS,C ; (C)=1?, (W) positivo?, (Unidades)>=10?.
goto BIN_BCD_Fin
BCD_IncrementaDecenas
movwf Unidades ; Recupera lo que queda por restar.
incf Decenas,F ; Incrementa las decenas y comprueba si llega a
movlw .10 ; 10. Lo hace mediante una resta.
subwf Decenas,W ; (W)= (Decenas)-10.
btfss STATUS,C ; (C)=1?, (W) positivo?, (Decenas)>=10?.
goto BCD_Resta10
BCD_IncrementaCentenas
clrf Decenas ; Pone a cero las decenas
incf Centenas,F ; e incrementa las centenas.
goto BCD_Resta10
BIN_BCD_Fin
swapf Decenas,W
addwf Unidades,W ; Suma W = Unidades + W.
movwf PORTD ; Resultado almacenado en PORTD (8 BITS) (Decenas y
Unidades)
clrw ; Limpio W
movfw Centenas
movwf PORTC ; Resultado almacenado en PORTC (8 BITS) (Centenas)
clrw ; Limpio W
goto Inicio
END