TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: fzurita en 13 de Marzo de 2008, 11:13:52
-
Necesito separar un numero de 3 cifras (maximo) en sus digitos individuales...es decir, si tengo el 435 (en binario) , separarlo en 4, 3 y 5 (binarios). Se me ocurre lo siguiente:
C=(NUMERO/10)/10 ;para las centena..
D=(NUMERO/10)%10 ;decena...
U=NUMERO%10 ; y unidad.
%: operador MOD
10=numero diez, pero que debiera ser 00001010, como binario de 8 bits.
Lo que no se es como implementar en assembler la division entera en 8 bits y la funcion MOD, en este caso utilizaria registros de 8 bits para las variables (NUMERO, C, D, U), pues pienso utilizar un PIC 16F628A...en este subforo solo he encontrado un link de microchip para una division "double precision"...pero que la verdad no entendi mucho. Por favor si me pudieran echar una mano con este proyecto se los agradeceria.
saludos
-
Veamos a ver si te entendí, cuando hablas del 435 te refieres al 435 en decimal verdad? digo, tu mencionaste específicamente en binario pero supongo que te refieres a que lo tienes guardado en una variable de 16 bits pero el valor es 435 decimal en vez de ser un texto ASCII.
Si estoy en lo correcto y te interpreté bien, lo que estas buscando es convertir el número en BCD. Si mal no recuerdo en piclist (http://www.piclist.com) hay rutinas para pasar de binario a bcd. Es una forma mucho más eficiente y directa de obtener cada dígito y no meterte en la complejidad de dividir en assembler!
-
Hola maunix..sí, me refería al numero decimal (para explicar el ejemplo), pero que en realidad es un binario que debo recibirlo desde la puerta serial del 16F628A (registro RCREG), el cual es de 8 bits.
Entonces resumiendo debo tomar este numero de 8 bits (que representa un decimal), y separarlo en 3 registros de 8 bits cada uno, para la centena, decena y unidad, del numero decimal que este representa.
Mas claro todavia: 10010110 (numero decimal 150, que para mi esta bien representar como maximo, y me alcanzan los 8 bits)
Entonces los registros serian:
C=00000001 (decimal 1)
D=00000101 (decimal 5)
U=00000000 (decimal 0)
Eso que me dices de pasar a BCD no lo sé ...buscaré en el link que me das...
Espero que haya quedado mas claro
-
Hola maunix..sí, me refería al numero decimal (para explicar el ejemplo), pero que en realidad es un binario que debo recibirlo desde la puerta serial del 16F628A (registro RCREG), el cual es de 8 bits.
Pasa que mencionaste el número 435 que no es de 8 bits, entonces ya no me cerraban las cosas
Entonces resumiendo debo tomar este numero de 8 bits (que representa un decimal), y separarlo en 3 registros de 8 bits cada uno, para la centena, decena y unidad, del numero decimal que este representa.
Mas claro todavia: 10010110 (numero decimal 150, que para mi esta bien representar como maximo, y me alcanzan los 8 bits)
Entonces los registros serian:
C=00000001 (decimal 1)
D=00000101 (decimal 5)
U=00000000 (decimal 0)
Eso que me dices de pasar a BCD no lo sé ...buscaré en el link que me das...
Espero que haya quedado mas claro
Si, pasando a BCD y luego acomodando un poco las cosas podrás hacer lo que quieres, te sugiero que leas sobre el formato BCD, y si tienes dudas vuelvas a preguntar :)