Autor Tema: Bit test xc8 variable de 2 o mas Bytes " RESUELTO"  (Leído 3629 veces)

0 Usuarios y 4 Visitantes están viendo este tema.

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Bit test xc8 variable de 2 o mas Bytes " RESUELTO"
« en: 17 de Diciembre de 2012, 20:02:45 »
Hola amigos!

Estoy realizando un decodificador del protocolo RC-5.
Utilizo xc8 para programar un pic12F1840.

Revise el manual del compilador y otros mas para agregar una macro de manipulacion de bits.
hasta ahí todo correcto.

Mi variable es de 32bits ,al realizar el test de cada bit me doy cuenta que solo lo hace con los primeros 8bits16 bits.
después de eso solo da 0 y me parece que no accesa a los demás.

¿Como puedo hacer que revise la variable completa?

**Creo que es por la propia definicion de bit,que va de 0-7,pero no tengo idea xD

Esta es la macro

Código: [Seleccionar]
#define testbit(var,bit)    ((var)&(1<<(bit)))
y la ocupo asi

Código: [Seleccionar]
       if(data_completed==TRUE){
            data_completed=FALSE;
            index2=0;
            for(index=0;index<14;index++){ //solo 28 bits

            if(testbit(data_shadow,index2)&&!testbit(data_shadow,index2+1)) //si es 01 es 1
                    data_decoded|=1<<index;  //
                index2+=2;;

            }//for index to decode data

Saludos y gracias!

SOLUCION

Código: [Seleccionar]
#define testbit(var,bit)    ((var) & ((unsigned long) 1<<(bit)))
#define setbit(var,bit)     ((var)|= ((unsigned long) 1<<(bit)))
#define clrbit(var,bit)     ((var)&=~((unsigned long) 1<<(bit)))
« Última modificación: 17 de Diciembre de 2012, 21:48:37 por AKENAFAB »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bit test xc8 variable de 2 o mas Bytes
« Respuesta #1 en: 17 de Diciembre de 2012, 20:25:05 »
Podes agregar un cast:

#define testbit(var,bit)    ((int)(var)&(1<<(bit)))

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

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Bit test xc8 variable de 2 o mas Bytes
« Respuesta #2 en: 17 de Diciembre de 2012, 20:50:22 »
Podes agregar un cast:

#define testbit(var,bit)    ((int)(var)&(1<<(bit)))

Saludos!

Hola Suky

Eso intento con un cast pero no me funciona.
Accesa bien a los bits de 0-15(16bits),despues de eso ya no revisa mas.

Agreto esta captura de pantalla.
Apenas pasa al bit 16 y llena todo con 11111 y aunque quiera escribirle 0 no se deja :/ .

No se si sea relajo de proteus xD sino intentare algun enmascaramiento.
« Última modificación: 17 de Diciembre de 2012, 21:00:21 por AKENAFAB »

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Bit test xc8 variable de 2 o mas Bytes
« Respuesta #3 en: 17 de Diciembre de 2012, 21:21:46 »
A! perdón, si es de 32 bits, el cast correcto sería long.
No contesto mensajes privados, las consultas en el foro

Desconectado AKENAFAB

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3227
Re: Bit test xc8 variable de 2 o mas Bytes
« Respuesta #4 en: 17 de Diciembre de 2012, 21:50:07 »
A! perdón, si es de 32 bits, el cast correcto sería long.

Gracias Suky , eso intente con el casting y salio bien.

Lo cambie de lugar y resulto(vi unos problemas parecidos en HITEC).

Gracias!!

Citar
#define testbit(var,bit)    ((var) & ((unsigned long) 1<<(bit)))
#define setbit(var,bit)     ((var)|= ((unsigned long) 1<<(bit)))
#define clrbit(var,bit)     ((var)&=~((unsigned long) 1<<(bit)))