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.