TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: AKENAFAB en 17 de Diciembre de 2012, 20:02:45

Título: Bit test xc8 variable de 2 o mas Bytes " RESUELTO"
Publicado por: AKENAFAB 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)))
Título: Re: Bit test xc8 variable de 2 o mas Bytes
Publicado por: Suky en 17 de Diciembre de 2012, 20:25:05
Podes agregar un cast:

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

Saludos!
Título: Re: Bit test xc8 variable de 2 o mas Bytes
Publicado por: AKENAFAB 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.
Título: Re: Bit test xc8 variable de 2 o mas Bytes
Publicado por: Suky en 17 de Diciembre de 2012, 21:21:46
A! perdón, si es de 32 bits, el cast correcto sería long.
Título: Re: Bit test xc8 variable de 2 o mas Bytes
Publicado por: AKENAFAB 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)))