TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: RaDoN en 23 de Abril de 2005, 15:56:00
-
Necesito con ensamblador hacer divisiones bastante dificultosas, con algun decimal incluso. El problema viene a cuando ingreso una señal del conversor a/d y la quier pasar a una escala que me interese (bien una regla de tres), me surge este problema.
He visto por la página de microchip algunas cosillas pero no me entero de nada 
Si algún alma caritativa me dice algo para orientarme o si tiene una rutina para dividir numeros de 1 byte, estaria muy agradecido
-
Hola, hacer una division en un byte es más que sencillo:
Tienes que hacer un bucle deresta: por ejemplo 128/8
le restas 8 a 128 tantas veces como sea necesario hasta que el resultado sea menor a 8, ese resultado es el resto y la cantidad de veces que haces la resta es el resultado de la división.
-Dividir el contenido de W por CTE (constante: #define CTE 0x08):
dividir
movwf reg1
movlw 0xff
movwf Resultado
clrf Resto
movlw CTE
div incf Resultado
subwf reg1,F
btfsc STATUS,C
goto div
movlw CTE
addwf reg1,W
movwf Resto
return
Facilmente puedes reemplazar la constante por una variable DIVISOR:
Donde dice movlw CTE pones movf DIVISOR,W
Luego con el resto puedes hacer otra operación para transformarlo en tus decimales:
bcf STATUS,C
rlf Resto
bcf STATUS,C
rlf Resto
bcf STATUS,C
rlf Resto ;Multiplicar por 8
movf Resto,W
addwf Resto,F
addwf Resto,F ;Hasta aqui multiplicaste por 10
movf Resto,W
call dividir ;Divides de nuevo el resto multiplicado por 10
Repites esta ultima operación para la cantidad de decimales que quieras.
Espero que te ayude.
-
Muchas gracias fer_zone, pero en realidad m referia a que el divisor fuera el de los decimales, (es el dividendo :S jeje) ... Ejemplo: 255 / 2.65 ... o algo así
-
Hola radon, veo que lo que necesitas es diferente, pero tienes una solucion bastante simple, en este mismo subforo un poco más abajo tienes un post de todopic que dice MATEMATICAS, alli tienes una rutina de division 24bits/24bits,
entonces si quieres dividir 255/2.65 colocas 25500/265 y listo, quizas tengas que hacer una rutina para multiplicar tu señal del a/d por 100, pero creo que en ese post tambien tienes una rutina que te puede ayudar, espero que te sirva.