Sí, lo que comentas es válido, pero sólo porque en la librería correspondiente a cada modelo de PIC, que es llamada cuando incluyes la librería PIC.H, están declaradas variables de tipo bit coincidiendo con todos esos bits (ports, tris, flags, bits de configuración, etc), uno a uno.
Cuando el bit sobre el que quieres actuar ha sido declarado como variable de tipo bit, efectivamente, el compilador genera instrucciones completamente optimizadas, tipo BSF, BCF, etc.
Yo me refiero a manejar bits sin haber declarado variables que apunten a ellos. Por ejemplo, pongamos por caso que quiero testear el estado del 5º bit de TMR0, para implementar por soft el parpadeo de unos LEDs. Podría hacerlo añadiendo una declaración como esta:
static volatile bit TMR0_5 @ ((unsigned)&TMR0*8)+5;
y ya podría acceder a ese bit, utilizando la variable de tipo bit TMR0_5 que he declarado, y el compilador generaría el código perfectamente optimizado.
Pero supón ahora que lo que quiero es manejar 240 bits correspondientes a 30 bytes (por ejemplo para manejar una matriz de LEDs). Parece una locura declarar 240 variables de tipo bit si pretendo acceder a esos bits uno a uno, pero por otro lado, si accedo a ellos utilizando instrucciones orientadas a bytes, el código generado no estará suficientemente optimizado.
Lo que pregunto es si existe una sintaxis específica que permita acceder a cada bit de un byte, sin haber declarado antes una variable de tipo bit apuntando a cada bit.
--
Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124
"FlyBoy" escribió en el mensaje
news:3rg9qeFj5r8lU1@individual.net...
> Hace tiempo que no manejaba el compilador de HiTech, fue el primero que
use
> y aunque trabaja muy bien, las funciones del compilador CCS me hicieron
> dejar a un lado el HiTech. Acabo de hacer una prueba, y para modificar el
> valor de algun bit es tan sencillo como simplemente asignando el valor de
la
> patilla correspondiente, por ejemplo si quiero poner el valor del bit 5
del
> PORTB hago:
>
> RB5=1;
>
> Por medio de la directiva define se puede asignar un nombre mas apropiado,
> por ejemplo
>
> #define Led1 RB5
>
> Led1=0; //Apagar led
>
> Led1=1; //Activar
>
> el equivalente en asm para las instrucciones anteriores que entrega el
> compilador es un bcf 0x06,05 y bsf 0x06,05 respectivamente. Tambien valen
> estos nombres especiales para leer el valor de un bit en particular:
>
> while(RB0)
> {
> .....
> }
>
> o k=RB4;
>
> por dar algunos ejemplos. En el CCS estan las instrucciones
output_low(PIN)
> y output_high(PIN).
>
> Saludos
>
>