Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/09/2013 #1


Problema en CCS al pasar cadena de bytes a cadena de bits
Buenos días:

Estoy intentando hacer un programa donde tengo 19 bytes en una cadena (int telemando1[19]) y los intento leer y meter en otra bit a bit (int1 telemandobits[152]). El objetivo es que si tengo en la primera cadena los valores 8,7,.... pasen a la segunda cadena con los valores binarios 0,0,0,0,1,0,0,0, 0,0,0,0,0,1,1,1, ...

El código que tengo es:
Código:
   int telemando1[19];
   int1 telemandobits[152];
   int i,z;

     for (i=0;i==151;i++) //Aqui inicializo la cadena
     {
         telemandobits[i]=0;
     }

        //Estos son los datos que quiero pasar a la otra cadena bit a bit
         telemando1[18]=8;
         telemando1[17]=7;
         telemando1[16]=6;
         telemando1[15]=5;
         telemando1[14]=4;
         telemando1[13]=12;
         telemando1[12]=0;
         telemando1[11]=1;
         telemando1[10]=17;
         telemando1[9]=255;
         telemando1[8]=255;
         telemando1[7]=255;
         telemando1[6]=255;
         telemando1[5]=255;
         telemando1[4]=255;
         telemando1[3]=255;
         telemando1[2]=255;
         telemando1[1]=0;
         telemando1[0]=0;

         //Aquí creo una cadena de bits con todos los datos
         for (i=18;i==0;i--)
         {  for (z=0;z==7;z++)
            {  
               telemandobits[((i+1)*8)-(8-z)]=(int1) telemando1[i];
               telemando1[i]>>=1; // x>>=y, is the same as x=x>>y
            }
         }
Luego leo la cadena telemandobits[] y no tengo los valores 0 y 1 esperados. La verdad es que creo que tiene que ser una tontería que no veo, pero me estoy volviendo loco.
Alguna sugerencia??

Gracias
11/09/2013 #2

Avatar de Scooter

Creo que en c se puede definir el array directamente como:

int telemando[] = {1,2,3,4,5,6,7,8,9...};

Si lo defines como byte o como char gastarás la mitad de memoria:

char telemando[] = {1,2,3,4,5,6...};

Respecto al algoritmo, lo tengo que pensar, veo un poco confuso el que has puesto.
11/09/2013 #3


"char telemando[19]" ocupa la mitad que "int telemando[19]"?? Muy interesante.
Sobre definirlo directamente no puedo porque los datos variaran en el programa definitivo.

La verdad es que con el algoritmo me estoy volviendo loco, llevo tres días dándole vueltas, y creo que está bien, pero no funciona.

---------- Actualizado después de 31 minutos ----------

he cambiado un poco el código

Código:
   char telemando1[19];
   int1 telemandobits[152];
   int i,z;

     for (i=0;i<=151;i++) //Aqui inicializo la cadena
     {
         telemandobits[i]=0;
     }

        //Estos son los datos que quiero pasar a la otra cadena bit a bit
         telemando1[18]=8;
         telemando1[17]=7;
         telemando1[16]=6;
         telemando1[15]=5;
         telemando1[14]=4;
         telemando1[13]=12;
         telemando1[12]=0;
         telemando1[11]=1;
         telemando1[10]=17;
         telemando1[9]=255;
         telemando1[8]=255;
         telemando1[7]=255;
         telemando1[6]=255;
         telemando1[5]=255;
         telemando1[4]=255;
         telemando1[3]=255;
         telemando1[2]=255;
         telemando1[1]=0;
         telemando1[0]=0;

         //Aquí creo una cadena de bits con todos los datos
         for (i=0;i<=18;i++)
         {  for (z=0;z<=7;z++)
            {  
               telemandobits[((i+1)*8)-(8-z)]=(int1) telemando1[i];
               telemando1[i]>>=1; // x>>=y, is the same as x=x>>y
            }
         }
Aun y todo leo la cadena telemandobits[] y tengo 0,1,0,1,0,1,0,1,0,1....

A ver si voy avanzando, pero se admiten sugerencias. Muchas gracias
11/09/2013 #4

Avatar de ByAxel

karlosguay dijo: Ver Mensaje
"char telemando[19]" ocupa la mitad que "int telemando[19]"?? Muy interesante.
En cierto modo, recuerda que un registroen la RAM del PIC tiene una longitud mínima de 8 bits y un array del tipo booleano no se maneja tan fácilmente, bueno de ésto se encarga el CCS.

Usa la función "value = bit_test (var, bit)".
13/09/2013 #5

Avatar de Scooter

Bueno, no se que es lo que hace esa versión del C, normalmente
bit o boolean ocupa un bit, eso depende del procesador, en algunos ocupa un byte
char o byte ocupa un byte
int o uint ocupan dos bytes
etc...
ante la duda leed el manual del compilador de C.

Si lo defines de inicio:
telemando[]={1,2,3,4,5...}; haces dos cosas, definir el tamaño y el valor por defecto si es que eso es útil; sin hacer nada ya va el mando de una forma "normal" o "habitual". Después puedes redefinir el array si reprogramas el mando.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.