TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Thulsa Doom en 12 de Agosto de 2011, 13:27:18
-
Hola a todos y todas, tengo un problemilla a ver si me pueden echar un cable.
resulta que tengo un dato de 16bit metido en una variable int16 y sólo necesito un bit de esa variable, el bit 3 para ser más exacto, quiero que cuando el estado del bit cambie, me ejecute un programa, yo lo hago de una manera pero no me funciona
por ejemplo
long error, buffer;
error = 0;
buffer = 0;
error = (buffer & 0b0000000000000100)>>2;
if (error == 1){
bla bla ...;
...;
...;
}
Haciéndole un and y seleccionando el bit que me interesa en teoría debería de funcionar pero no me funciona, entonces mi pregunta es:
¿de que manera puedo yo de un entero largo o cadena o buffer, (no se si esas definiciones son correctas para este tipo de datos o solo es una de ellas.) podría yo seleccionar o vigilar el bit que me interesa, desechar el resto y cuando cambie que me ejecute el programa que deseo?.
-
En CCS? En CCS tienes bit_test(...)
Sino puedes hacer:
error=!!(buffer&0x0004);
Saludos!
-
Creo que para que funcione la variable error deberia ser INT1 si estas con CCS y sino como te dice suky la función bit_test() que devuelve el estado del bit, por ejemplo en tu caso:
if(bit_test(buffer,3)){
......
}
Saludos!
-
Ojo!!! Thulsa, que con el ejemplo que pusiste estarías trabajando sobre el bit 2 y no sobre el bit 3.
-
Gracias a todos por la ayuda y orientación, siento no haber especificado con que compilador trabajo, dejo constancia de que es ccs, lo de bit_test(), no conocía esa función.
pruebo todo los que me han dejado y cuento.
Tienes razón, dije en la explicación que era el bit 3 y en el ejemplo puse el 2, no tengo perdón para esos errores, menos mal que ustedes estáis muy atentos y aunque lo ponga mal sabéis a que me refiero.
gracias de nuevo la verdad es que la ayuda en este foro no tiene precio.
-
Sí Thulsa, entendía la idea pero lo dije porque tal vez estabas esperando un cambio en un bit que nunca cambiaba y entonces se podía trasladar el error desde allí.
Y sí, esa forma yo la he utilizado sin problemas bajo el compilador HiTech
-
Hola a todos y todas, pues el consejo que me habéis dado ha funcionado perfectamente, les doy las gracias