PIC16F84 – Multiplicación de números de 8 bits

PIC16F84 – Multiplicación de números de 8 bits

Problema Propuesto

Implementar una subrutina que multiplique dos números de 8 bits utilizando el algoritmo de sumas parciales.

Solución

list 		p=16F84A
include 	P16F84A.INC
;------------------------------------------------------------------
multiplicando 	equ 	0x0C            ;dato a sumar
multiplicador 	equ 	0x0D            ;veces a sumar
DH		equ 	0x0E            ;byte alto
DL		equ 	0x0F            ;byte bajo
;------------------------------------------------------------------
    org 	00h                     ;Vector de Reset
    goto 	INICIO 		
    org 	0x05                    ;Vector de interrupción
INICIO 			
    call	multiplica              ;subrutina
    goto 	dormir                  ;hemos acabado
        
MULTIPLICA
    clrf 	DH
    clrf	DL
    movf 	multiplicador,W         ;W = multiplicador
    btfsc	status,Z                ;Salta si Z=1
    goto	dormir                  ;Z=0 multiplicador=0
BUCLE
    movf	DL,W                    ;W=DL
    addwf	multiplicando,W         ;W += multiplicando
    movwf	DL                      ;DL=W
    btfsc	status,C                ;Salta si C=0
    incf	DH,F
RESTO
    decfsz	multiplicador,F         ;multiplicador-1
    goto	bucle                   ;no hemos acabado
    return                              ;fin subrutina
DORMIR		
    sleep
    end                                 ;Fin del programa
;------------------------------------------------------------------

El programa consta de cuatro etiquetas (Inicio, bucle, resto y dormir) y una subrutina (multiplica).

La subrutina “MULTIPLICA” es donde se va sumando el multiplicando hasta que el multiplicador sea cero. Cuanto mayor sea el multiplicador, más tiempo de ejecución obtendremos.

Se puede ver un ejemplo de funcionamiento en este vídeo: https://youtu.be/Mu3g4hKa3BA

2 comentarios sobre “PIC16F84 – Multiplicación de números de 8 bits

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

veinte − 7 =