Autor Tema: Testear bit de un registro X en C18  (Leído 2412 veces)

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

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Testear bit de un registro X en C18
« en: 22 de Agosto de 2011, 15:52:22 »
Para leer un bit de un pin del puertoA hago if (PORTAbits.RA0==1) ... como puedo leer de forma analoga un bit de un registro "VAR1". Intenté:

unsigned char VAR1
#define flag_bit 0x02
...
...
if (VAR1bits.flag_bit==1)
{
...
}

Pero no funciona

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Testear bit de un registro X en C18
« Respuesta #1 en: 22 de Agosto de 2011, 16:07:23 »
Eso solo funciona para los registros de propósito especifico.

En caso de tus variables debes enmascarar el bit a preguntar así:

Código: C
  1. if(Var1 & (0b11111101)!=0){
  2. // Ejecuta si el bit 1 de Var1 es 1
  3.  
  4. }else{
  5. // Ejecuta si el bit 1 de Var1 es 0
  6.  
  7. }

Desconectado ema

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1078
Re: Testear bit de un registro X en C18
« Respuesta #2 en: 22 de Agosto de 2011, 16:12:12 »
También puedes probar con esto:

Código: C
  1. union {
  2.         char all;
  3.         struct {
  4.                 unsigned int cero : 1;
  5.                 unsigned int uno : 1;
  6.                 unsigned int dos : 1;
  7.                 unsigned int tres : 1;
  8.                 unsigned int cuatro : 1;
  9.                 unsigned int cinco : 1;
  10.                 unsigned int seis : 1;
  11.                 unsigned int siete : 1;
  12.         }bits;
  13. }variable;
  14.  
  15. int main (void)
  16. {
  17.  
  18.         variable.all = 0;    // Borro el registro completo
  19.  
  20.         if (variable.bits.cero == 1)    // Chequeo el bit cero del registro
  21.  
  22.         variable.bits.uno = 1;    //Borro un bit del registro
  23. }


Saludos
« Última modificación: 22 de Agosto de 2011, 16:15:34 por ema »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Testear bit de un registro X en C18
« Respuesta #3 en: 22 de Agosto de 2011, 16:43:09 »
En C18 se puede crear estructuras anónimas, así que por ahí por comodidad se puede sacar bits o byte, según el caso. También si son varias variables del mismo podes definir un tipo, con typedef.

Entre los ejemplos de Microchip (USB, FAT, TCP/IP) tienes un archivo que puedes usar: GenericTypeDefs.h

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado jorgejg

  • PIC12
  • **
  • Mensajes: 96
Re: Testear bit de un registro X en C18
« Respuesta #4 en: 22 de Agosto de 2011, 17:45:23 »
Gracias por sus aportes, he probado lo siguiente:

union
{
   unsigned int valor_bit;
   struct
   {
   unsigned flag_com : 1;
   unsigned flag_listo : 1;
   };
}VAR1;
...
if (VAR1.flag_com==1)
...

Funciona bien y por lo que veo "flag_com" viene a ser el bit0 del registro VAR1 y "flag_listo" el bit1 del mismo registro, supongo que asi puede agregar mas bits.

Gracias por los datos.

Desconectado Alumno

  • PIC10
  • *
  • Mensajes: 39
Re: Testear bit de un registro X en C18
« Respuesta #5 en: 31 de Agosto de 2011, 19:20:55 »
en C18 lo mejor es hacerlo como EMA dice, pero en CCS se hace asi ==> bit_test(variable, #bit ).