Tendría tal vez que hacer un juego de instrucciones para pasar esta parte fraccionaria de binario a decimal?
Acordate que vas a necesitar de un registro de 8 bits por cada numero decimal.
Una de las formas mas simples de hacerlo y que vi es preguntar por cada bit y sumar el valor que corresponde.. para la parte decimal tenes que:
2^-1 = 0.5 es el bit de mayor peso
2^-2 = 0.25
2^-3 = 0.125
2^-4 = 0.0625
2^-5 = 0.03125
2^-6 = 0.015625
2^-7 = 0.0078125Entonces para que sea mas simple, lo mejor es guardarlo como texto. Vas a crear una "tabla" con RETLW o DT con esos valores
UNO: DT "5",0x00
DOS: DT "25",0x00
TRES: DT "125",0x00
CUATRO: DT "625",0x00
CINCO: DT "03125",0x00
SEIS: DT "015625",0x00
SIETE: DT "0078125",0x00Luego en tu programa preguntas:
¿bit 7 en 1?
Si esta en un tomo las letras de UNO y las voy sumando a los registros, siendo ahora el primer lugar "5"
Sigo hasta que encuentro el 0x00 en el string que me dice parar
Si no esta en 1, no hago nada
Arreglo por si alguno paso el 9
¿bit 6 en 1?
Si esta en un tomo las letras de DOS y las voy sumando a los registros, siendo ahora los primeros 2 registros "2" y "5" , o si antes se habia sumado el 5, deberia tener "7" y "5"
Sigo hasta que encuentro el 0x00 en el string que me dice parar
Si no esta en 1, no hago nada y dejo como esta todo.
Arreglo por si alguno paso el 9
........ Asi para todos
Y antes que nada:
Lo mas seguro es que uses los FSR para moverte por los registros decimales.
Tenes que recordar que los valores que tomas de la string, estan en ASCII, por lo que para sumarlos aunque sea a 1 deberias restarle '0' y luego arreglar en caso de que pase de '9' la suma.
La otra forma es usar numeros en ves de letras, haciendo mas sencilla la operacion y luego procedes a sumarlo '0' para mostrarlo. Vas a tener que cambiar el limite a 0xFF por ejemplo en ves de 0x00.Es decir:
UNO: DT 0x5,0xFF
DOS: DT 0x2,0x5,0xFF
TRES: DT 0x1,0x2,0x5,0xFFTal ves esta te convenga mas