Autor Tema: Bits individuales de un int  (Leído 2320 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Bits individuales de un int
« en: 11 de Octubre de 2007, 12:05:20 »
Hola amigos!

Necesito de su "sapiencia": tengo una funcion que recibe como parametro un bit (int1, en CCS) , y hace "algo" con el. Pero necesito que haga ese "algo" con cada uno de los bits de una variable tipo int8 .

La pregunta es: ¿Como hago para que, dentro de un for, pueda invocar 8 veces a la funcion en cuestion pasandole como parametro cada uno de los bits de la variable int8?

Gracias por adelantado!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Bits individuales de un int
« Respuesta #1 en: 11 de Octubre de 2007, 12:26:07 »
En este post dimos varias soluciones, yo soy partidario de las estructuras y así aporte mi granito de arena:

http://www.todopic.com.ar/foros/index.php?topic=4867.msg36512#msg36512

Un saludo

* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Bits individuales de un int
« Respuesta #2 en: 11 de Octubre de 2007, 12:28:55 »
Hay una función muy bonita que se llama:

Código: [Seleccionar]
Syntax:
 value = bit_test (var, bit)
 
Parameters:
 var may be a 8,16 or 32 bit variable (any lvalue) bit is a number 0-31 representing a bit number, 0 is the least significant bit.
 
Returns:
 0 or 1

Function:
 Tests the specified bit  (0-7,0-15 or 0-31) in the given variable.   The least significant bit is 0.    This function is much more efficient than, but otherwise the same as: ((var & (1<<bit)) != 0)

supongo que sería algo parecido a esto:

for(n=0; n<8; n++)
{
     llamada_a_funcion( bit_test( variable_de_aitpes_de_8_bits,n ) );
}

De esta forma llamarás a la función 8 veces y le pasarás como parámetro un '1' o un '0' dependiendo del valor que tengas en esa posición en la variable 'variable_de_aitpes_de_8_bits'

Ufff... no se si se entiende muy bien, pero, me puedo esmerar más, eh?  :D Si no queda muy claro avisa que me explico mejor  :mrgreen:


Un saludo desde Alicante.
 

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2568
Re: Bits individuales de un int
« Respuesta #3 en: 11 de Octubre de 2007, 12:30:50 »
Mira a ver si te sirve esto: bit_test(variable,i)

Un saludo

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Bits individuales de un int
« Respuesta #4 en: 11 de Octubre de 2007, 12:32:41 »
Buenisimo!!!!

Por esta vez voy a usar bit_test.

Lo de las extructuras pinta como mas complicado (es que hace poco que estoy con CCS).

Gracias a todos!

Ariel.
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7912
Re: Bits individuales de un int
« Respuesta #5 en: 11 de Octubre de 2007, 16:00:46 »
Creo que por ahora CCS no permite el array de bits...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Bits individuales de un int
« Respuesta #6 en: 11 de Octubre de 2007, 16:13:17 »
Ya esta funcionando perfectamente!

No se que haria sin su ayuda. ¡No se vayan de ahi! :)

Asi quedo:

Citar
void escribodisplay(int8 digito) {
   int8 n;
   for(n=0; n<8; n++){
     enviodata( bit_test( tab7seg[digito],n ) ); }   
}


void enviodata(int1 digito) {
//------------------------------------------------------------------------------
//---Envia un 0 o un 1 al registro de desplazamiento:
//------------------------------------------------------------------------------
   RDD_DATA  = digito;
   RDD_CLOCK = 0;
   RDD_CLOCK = 1;
}
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Bits individuales de un int
« Respuesta #7 en: 11 de Octubre de 2007, 16:40:08 »
Creo que por ahora CCS no permite el array de bits...

Creo que de la version 4.0 en adelante si lo permite amigo MGLASOFT... Por lo menos la que tengo si lo permite.

int1 A_BITS[100]; Eso funciona bien!!!

Lo que si pasa es que cuando intentas trabajar con PROTEUS, este te dice que array de bits no acepta, pero CCS si lo deja.

SALUDOS!!

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Bits individuales de un int
« Respuesta #8 en: 13 de Octubre de 2007, 14:53:39 »
Ya esta funcionando perfectamente!

No se que haria sin su ayuda. ¡No se vayan de ahi! :)

Asi quedo:

Citar
void escribodisplay(int8 digito) {
   int8 n;
   for(n=0; n<8; n++){
     enviodata( bit_test( tab7seg[digito],n ) ); }   
}


void enviodata(int1 digito) {
//------------------------------------------------------------------------------
//---Envia un 0 o un 1 al registro de desplazamiento:
//------------------------------------------------------------------------------
   RDD_DATA  = digito;
   RDD_CLOCK = 0;
   RDD_CLOCK = 1;
}


ajá Ariel, leyendo tu código creo que andamos en lo mismo  :P
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Bits individuales de un int
« Respuesta #9 en: 13 de Octubre de 2007, 15:00:53 »
Pedro, necesitas el .C completo? Te lo paso en privado, junto al esquema.

Basicamente, es un display de varios digitos de 7 segmentos manejado por dos pines, mediante un registro de desplazamiento. Nada de otro mundo, pero como no conozco un pito de CCS, me compliqué... :)
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert


 

anything