Autor Tema: De binario a decimal digito a digito (o algo asi)  (Leído 4880 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
De binario a decimal digito a digito (o algo asi)
« en: 10 de Abril de 2023, 20:21:58 »
Buenas tardes. Sigo siendo un principiante en esto de los micros y, para complicarla, en ASM.
Me he propuesto una tarea, para mi, titánica, pero en el proceso voy aprendiendo y esa es la meta al final de cuentas.
He aquí el problema: un pic recibe de un periférico datos de temperatura que puede llegar a los cuatros dígitos y los almacena en dos variables.
Como se pueden extraer esos dígitos uno a uno, para poder enviarlos a un lcd ?? O si hay otra forma de visualizarlos
Sé como convertirlos en caracteres para el lcd, lo que no encuentro es como sacarlos de a uno de los dos registros ya que entero no puedo por exceder los 255.
Por si sirve, es un pic 16f72 y un max31855
Espero se entienda la pregunta y puedan ayudarme, siempre en ASM. Gracias !!!
DariKp

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:De binario a decimal digito a digito (o algo asi)
« Respuesta #1 en: 10 de Abril de 2023, 23:29:04 »
...
He aquí el problema: un pic recibe de un periférico datos de temperatura que puede llegar a los cuatros dígitos y los almacena en dos variables.
El MAX31855 es de 14bits --> Son 5 dígitos en decimal

Citar
Como se pueden extraer esos dígitos uno a uno, para poder enviarlos a un lcd ??
Si tu dato es de 16bits lo que necesitás es convertirlos a BCD y luego sumarles 0x30 ('0') para pasarlos a ascii.

Para aprender y de paso ahorrar trabajo, Microchip tiene  unas librerías matemáticas en ASM --> De  https://www.microchip.com/en-us/application-notes/an544   descargás las librerías y la AN544 con la descripción.

Citar
O si hay otra forma de visualizarlos
También podés sacar los datos leídos por el puerto serie, o si estás usando un simulador en una Watch Window.

Citar
Espero se entienda la pregunta
Incompleta, como si preguntaras a ChatGPT,  pero se entiende.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:De binario a decimal digito a digito (o algo asi)
« Respuesta #2 en: 11 de Abril de 2023, 03:57:10 »
Código en C para Arduino. Es sencillo pasarlo a otro microcontrolador.

Código: [Seleccionar]
#define BINARY_DIGITS   16
#define DECIMAL_DIGITS  5


void bin16_to_str(char *str, unsigned int bin) {
   char maxdig, digcnt, bitcnt;
   static char *p, carry;
 
   // Clear string
   p = str;
   digcnt = DECIMAL_DIGITS + 1;
   do { *p++ = 0; } while (--digcnt);
 
   // Transform binary to BCD
   bitcnt = BINARY_DIGITS;
   maxdig = (DECIMAL_DIGITS - 1);
   str += (DECIMAL_DIGITS - 1);
   do {
      // Shift left binary number with carry
      carry = 0;
      if (bin & (1L<<(BINARY_DIGITS-1)))
         carry |= 1;
      bin <<= 1;

      // Shift left decimal number with carry
      p = str;
      digcnt = DECIMAL_DIGITS - maxdig;
      do {
         carry = (*p<<1) + carry;
         if (carry >= 10) {
            *p-- = carry - 10;
            carry = 1;
            if (digcnt == 1) {
               maxdig--;
               digcnt++;
            }
         }
         else {
            *p-- = carry;
            carry = 0;
         }
      } while(--digcnt);
   } while(--bitcnt);

   // Transform BCD to ASCII
   digcnt = DECIMAL_DIGITS;
   do *str-- += '0'; while (--digcnt);
}


void setup() {
   Serial.begin(9600);
}


void loop() {
   unsigned long timeit;
   unsigned long bin;
   char strnum[DECIMAL_DIGITS + 1];
   strnum[DECIMAL_DIGITS] = 0; // End of char

   timeit = millis();
   for(bin=0; bin<65500; bin++) {
      bin16_to_str(strnum, bin);
   }
   timeit = millis() - timeit;
   Serial.print("1 conversion in ");
   Serial.print(timeit/65.5);
   Serial.println(" microseconds");
   delay(5000);
   
   for(bin=0; bin<50000; bin++) {
      bin16_to_str(strnum, bin);
      Serial.println(strnum);
   }
}

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:De binario a decimal digito a digito (o algo asi)
« Respuesta #3 en: 11 de Abril de 2023, 09:03:40 »
Aquí varias funciones para hacer lo mismo, en ensamblador:
http://www.piclist.com/techref/microchip/math/radix/index.htm

Desconectado dariman

  • PIC10
  • *
  • Mensajes: 10
Re:De binario a decimal digito a digito (o algo asi)
« Respuesta #4 en: 11 de Abril de 2023, 20:24:11 »
Gracias Picuino y Eduardo2 por su ayuda.
Voy a investigar las posibilidades que me dan y veré que logro.
En verdad se que me metí en camisas de once varas como se suele decir, pero bue, para aprender está bueno.
Lo incompleto del mensaje puede ser debido a que, como dije, soy muy novato en esto. Aunque hace un par de años que inicié, no tengo posibilidad de darle mucha continuidad y eso hace que avance muy despacio.
El querer lograrlo en ASM tiene un par de motivos, sobre todo honrar a un querido amigo desaparecido que era fanático del ASM y un capo con eso. Eso y mi poco tiempo, hace que no me desvíe aún a iniciarme en otro lenguaje como por ejemplo el c, a pesar de que todos me dicen que estoy yendo al revés.
Una vez más, mil gracias por su gran ayuda.
abrazotes
DariKp


 

anything