Autor Tema: Division con ASM  (Leído 3887 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Division con ASM
« 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 desquiciado

Si algún alma caritativa me dice algo para orientarme o si tiene una rutina para dividir numeros de 1 byte, estaria muy agradecido Rebotado
Si juegas contra el mejor, pierdes como los demás.

Desconectado fer_zone

  • PIC12
  • **
  • Mensajes: 74
RE: Division con ASM
« Respuesta #1 en: 23 de Abril de 2005, 17:55:00 »
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.
       

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Division con ASM
« Respuesta #2 en: 24 de Abril de 2005, 09:47:00 »
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í
Si juegas contra el mejor, pierdes como los demás.

Desconectado fer_zone

  • PIC12
  • **
  • Mensajes: 74
RE: Division con ASM
« Respuesta #3 en: 24 de Abril de 2005, 23:39:00 »
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.


 

anything