TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: aitopes 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!
-
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
-
Hay una función muy bonita que se llama:
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.
-
Mira a ver si te sirve esto: bit_test(variable,i)
Un saludo
-
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.
-
Creo que por ahora CCS no permite el array de bits...
-
Ya esta funcionando perfectamente!
No se que haria sin su ayuda. ¡No se vayan de ahi! :)
Asi quedo:
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;
}
-
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!!
-
Ya esta funcionando perfectamente!
No se que haria sin su ayuda. ¡No se vayan de ahi! :)
Asi quedo:
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
-
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é... :)