Microcontroladores - MUltiplicar y dividir en pic16f877a

 
Vista:

MUltiplicar y dividir en pic16f877a

Publicado por elbar90 (1 intervención) el 19/05/2006 18:42:05
Buenos dias a todos

Me gustaria saber como puedo yo relaizar una multiplicacion y una division de dos constantes en un 16f877a en codigo .asm.
muchas gracias a quien me ayude.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:MUltiplicar y dividir en pic16f877a

Publicado por codero (21 intervenciones) el 20/05/2006 23:03:43
para multiplicar (n*m) suma n veces m
para dividir (n/m) resta a n m sucecivamente, hasta que n sea menor que m.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:MUltiplicar y dividir en pic16f877a

Publicado por David Masferrer (2 intervenciones) el 31/05/2006 23:18:42
;**************************************************************************************************
;* RUTINA DE DIVISION DE 16 BIT / 16 BIT, EL NUMERADOR SE COLOCA EN NUMERADOR_HI & NUMERADOR_LO *
;* EL DENOMINADOR SE COLOCA EN DENOMINADOR_HI & DENOMINADOR_LO, QUEDANDO EL RESULTADO EN *
;* RESULTADO_HI & RESULTADO_LO, EL RESIDUO QUEDA EN RESIDUO_HI & RESIDUO_LO. *
;* RUTINA DE 350 CICLOS APROX. *
;**************************************************************************************************
;==================================================================================================

DIVISION_16x16
call setup
clrf RESIDUO_HI ;limpia registros en ram
clrf RESIDUO_LO ;
dloop bcf STATUS,C ;coloca en cero el bit de carry
rlf RESULTADO_LO, F ;rota a la izquierda
rlf RESULTADO_HI, F ;rota a la izquierda
rlf RESIDUO_LO, F ;rota a la izquierda
rlf RESIDUO_HI, F ;rota a la izquierda
movf DENOMINADOR_HI,W ;coloca el denominador wl el acumulador
subwf RESIDUO_HI,W ;resta wdenominador_hi con residuo_hi y deja el resultado en w
btfss STATUS,Z ;si es cero la resta, salte, sino vuelva a nochk
goto nochk ;
movf DENOMINADOR_LO,W ;denominador en acumulador
subwf RESIDUO_LO,W ;resta denominador_lo con residuo_lo
nochk btfss STATUS,C ;si residuo>denominador, entonces c=1
goto nogo ;salta a nogo se C=0
movf DENOMINADOR_LO,W ;resto residuo_lo con denominador_lo
subwf RESIDUO_LO,F ;y el resultado lo dejo en residuo_lo
btfss STATUS,C ;si C=1 salta
decf RESIDUO_HI, F ;si C=0 decrementa residuo_hi
movf DENOMINADOR_HI,W ;resto residuo_hi con denominador_hi
subwf RESIDUO_HI, F ;y el resultado lo dejo en residuo_hi
bsf STATUS,C ;si C=1 salta
nogo rlf NUMERADOR_LO, F ;si C=0 rota a la izquierda el numerador_lo
rlf NUMERADOR_HI, F ;y rota a la izquierda el numerador_hi
decfsz CONTADOR, F ;decrementa contador y salta si es cero
goto dloop ;salta a dloop
setup movlw 10h ;coloca un 10 en el registro contador
movwf CONTADOR ;
movf NUMERADOR_HI,W ;traspasa el dato de numerador_hi
movwf RESULTADO_HI ;a resultado_hi
movf NUMERADOR_LO,W ;traspasa el dato de numerador_lo
movwf RESULTADO_LO ;a resultado_lo
clrf NUMERADOR_HI ;limpia los registros numerador_hi y _lo
clrf NUMERADOR_LO ;
retlw 0 ;retorna con el acumulador limpio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar