TODOPIC

FORO TÉCNICO => Foro Técnico => Mensaje iniciado por: emmanuelap en 09 de Octubre de 2014, 02:23:50

Título: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 09 de Octubre de 2014, 02:23:50
Buenas noches compañeros, estoy intentado convertir unos datos capturados y almacenados en un array, a su equivalente bcd. Pero el resultado es un disparate y no comprendo por que, espero alguno de uds tenga una perspectiva mas esclarecedora. El siguiente código debería arrojar como resultado una suma de 255. Desde ya agradezco este espacio.
Codigo:

#include <16F877A.H>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;
int pot=0;

printf("\r\f\nDato = %s\n",dato);
         
    for(j=0;j<=7;j++)
    {
         if(dato[j]=='1')
         {
         pot=(2^j);
         fcode=fcode+pot;
         }
         printf(" \nbit = %u pot = %u  Suma = %u ",j,pot,fcode);
    }

j=0;
fcode=0;
pot=0;


Resultado :
{FF}
Dato = 11111111
 
bit = 0 pot = 2  Suma = 2 
bit = 1 pot = 3  Suma = 5 
bit = 2 pot = 0  Suma = 5 
bit = 3 pot = 1  Suma = 6 
bit = 4 pot = 6  Suma = 12 
bit = 5 pot = 7  Suma = 19 
bit = 6 pot = 4  Suma = 23 
bit = 7 pot = 5  Suma = 2
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: MerLiNz en 09 de Octubre de 2014, 09:27:22
no seria mas facil:

if(dato[j]=='1') fcode|=1<<j;
else fcode&=~(1<<j);

Título: Re: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 09 de Octubre de 2014, 17:59:28
Muchas gracias por el aporte MerLiNz, estoy tratando de interpretar como con las compuertas lógicas logras el resultado. Sin embargo, el cogido y la salida quedaron de la siguiente manera:
Espero alguien logre entender por que envía este tipo de dato tan extraño, cuando comienza con la lógica correcta. Saludos

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;

printf("\r\f\nDato = %s\n",dato);
         
         for(j=0;j<=7;j++)
            {
            if(dato[j]=='1') fcode|=1<<j;
            else fcode&=~(1<<j);
            printf(" \nbit = %u  Suma = %u ",j,fcode);
            }
           
printf(" \nTotal = %u ",fcode);         
j=0;
fcode=0;
}


Resultado:
{FF}
Dato = 11111111
 
bit = 0  Suma = 1 
bit = 1  Suma = 3 
bit = 2  Suma = 7 
bit = 3  Suma = ? 
bit = 4  Suma = O 
bit = 5  Suma = o 
bit = 6  Suma = 10K 
bit = 7  Suma = 20g 
Total = 20
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: MerLiNz en 09 de Octubre de 2014, 18:07:57
prueba a poner unsigned int fcode=0;
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 09 de Octubre de 2014, 18:26:47
Gracias por la inmediata respuesta !! Continua haciendo exactamente lo mismo, también probé con long, char, int16, pero no modifica el resultado. Se te ocurre algún plan B para dar sentido a esa tira de bits en bcd?
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: MerLiNz en 09 de Octubre de 2014, 18:32:35
del 1 al 7 esta bien, pero lo demas nose, salen caracteres extraños, prueba a poner fcode=0b1111; y ver si te imprime tambien esos caracteres tan extraños, quizas sea problema del printf
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 09 de Octubre de 2014, 19:05:23
El asunto es MerLiNz, que estoy capturando el tren de pulsos de un lector Wiegand, logro esa captura y guardarla en un array, pero al convertirla en BCD me pasaba esto tan extraño, por eso asile el bloque e intente hacer una rutina que decodifique ese array de bits. De tal manera que no me serviría tenerlo como (fcode=0b1111;) ya que no seria el caso practico que deseo resolver. Lo que no entiendo es, si la logica esta correcta, por que envia caracteres especiales.

Título: Re: Problema al convertir array de Bits en BCD
Publicado por: MerLiNz en 09 de Octubre de 2014, 19:43:42
ahi es donde queria llegar, debes ir probando opciones para ver porque te modifica eso, si pones eso, la variable contiene ese valor, y te imprime mal pues es problema del printf. Si estas haciendo debug deberias ver que valor va tomando la  variable segun el ciclo y verificar que toma su valor correcto.
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 09 de Octubre de 2014, 21:09:07
Sabes a que puede deberse ese error en la función printf? en otros programas funciona correctamente
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: BrunoF en 12 de Octubre de 2014, 20:56:43
Proba con:

char fcode=0;
char pot=0;

Algunos printf son celosos con los tipos.

Saludos.
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: inventor1967 en 12 de Octubre de 2014, 22:41:30
Muchas gracias por el aporte MerLiNz, estoy tratando de interpretar como con las compuertas lógicas logras el resultado. Sin embargo, el cogido y la salida quedaron de la siguiente manera:
Espero alguien logre entender por que envía este tipo de dato tan extraño, cuando comienza con la lógica correcta. Saludos

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;

printf("\r\f\nDato = %s\n",dato);
         
         for(j=0;j<=7;j++)
            {
            if(dato[j]=='1') fcode|=1<<j;
            else fcode&=~(1<<j);
            printf(" \nbit = %u  Suma = %u ",j,fcode);
            }
           
printf(" \nTotal = %u ",fcode);         
j=0;
fcode=0;
}


Resultado:
{FF}
Dato = 11111111
 
bit = 0  Suma = 1 
bit = 1  Suma = 3 
bit = 2  Suma = 7 
bit = 3  Suma = ? 
bit = 4  Suma = O 
bit = 5  Suma = o 
bit = 6  Suma = 10K 
bit = 7  Suma = 20g 
Total = 20

Parece ser que el código esta funcionando bien, poco se de C, pero lo que veo es que se están sumando las potencias de 2 0K,
1+2=3
3+4=7 hasta aquí no hay problema porque coincide con BCD
7+8=15 que es mayor que 10 de acuerdo?
desde aquí viene la jugada del ingeniero,
a la suma se le resta 10, 15 -10=5 ese es el valor en la unidad
y se sabe que se lleva un acarreo de 1
valor: 1 decena y 5 unidades,
así sucesivamente, los caracteres que aparecen después de 7 parecen ser los caracteres ASCII de la suma por tanto el código cumple con su función. Hice algo parecido para visualizar la cuenta de un frecuencimetro pero en assembler.
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: emmanuelap en 14 de Octubre de 2014, 10:47:11
Excelente aporte inventor1967, de ser asi, debería ir separando unidad, decena, etc etc.?
Por q no logro modificar el código para visualizar correctamente esos valores.
Se debe a los tipos de las variables?
Título: Re: Problema al convertir array de Bits en BCD
Publicado por: inventor1967 en 14 de Octubre de 2014, 18:01:34
Efectivamente, en C no hay una función que cambie de base numérica?