Multiplicacion en 16f84

#1
Hola necesito una ayudita con este programa, necesito multiplicar 2 numeros

LIST P=16F84
#INCLUDE<P16F84.INC>


CONTA EQU 0EH
I EQU 0CH
MULT EQU 0DH
CANT1 EQU 0FH
CANT2 EQU 010H

ORG 00H
GOTO INICIO


CONFIG BSF STATUS,RP0
CLRF TRISB
CLRF TRISA
BCF STATUS,RP0
RETURN


INICIO CALL CONFIG
CLRF MULT
MOVLW .6
MOVWF CANT1
MOVLW .2
MOVWF CANT2

SALTO MOVF I,W
ADDWF MULT
MOVLW .1
ADDWF I
DECFSZ CONTA
GOTO SALTO
MOVF MULT,W
MOVWF PORTB
END
 
#2
Saludos adm.

Realmente el programa no hace la multiplicación de los dos números. La multiplicación es una suma repetitiva (ej. 10*2= 10+10= 20), esta es la lógica que tiénes que se debe usar para hacer un programa de multiplicación. Aunque parece que ya tenías la noción de eso, pero no sabías concretamente como hacerlo.

En tu programa cargas los dos números que se multiplicarán a CANT1 y CANT2 (¿Es correcto?), luego pasa a la rutina SALTO donde pasas el valor de I a W, pero I no habia sido cambiado anteriormente, por lo tanto I=0 y W=0. Luego sumas el contenido de W a MULT, que también no habia sido modificado despues de la instrucción CLRF MULT, entonces el resultado es la suma 0+0=0. Despues, cargas W a 1, y lo sumas con I, el cual es cero, entonces el resultado es 1. En la instrucción DECFSZ CONTA se da el salto a la instrucción MOVF MULT,W, debido a que CONTA también no habia sido modificado, CONTA=0; por tanto se cumplía la condición de salto.

Espero que ahora puedas ver con claridad los errores de tu programa.

Buen dia...
 
Arriba