Dejo una mas ya que ahora se lo que queres hacer y no tenia nada que ver con lo que habia pensado xD, no se si sera correcta, pero la dejo. Aunque no ganas nada y estamos en la misma siempre, solo es facilitar el uso.
#define activar_display(pin) _activar_display(A,pin,0x07)
#define _activar_display(puerto,bit,andvalue) PORT ## puerto = ( PORT ## puerto & ~( andvalue ) )|(1 << bit)
activar_display(1); // Activo display en el bit 0
activar_display(0); // Activo display en el bit 1
activar_display(2); // Activo display en el bit 2
Equivalente a hacer:
PORTA = ( PORTA & ~(0x07) )|(1 << 1);
PORTA = ( PORTA & ~(0x07) )|(1 << 0);
PORTA = ( PORTA & ~(0x07) )|(1 << 2);
Suponiendo que PORTA este definido lo cual CCS... digamos que tenes que definirlo.
Si queres cambiar de puerto o usar otro cambias por esto:
#define activar_display(port,pin) _activar_display(port,pin,0xF8)
Y podes usarlo como
activar_display(A,1);
activar_display(B,2);
activar_display(C,0);
Nuevamente definir todos ports en CCS.
PD: A elgarbe le gusta esto
Y lo que sigo sin entender es por que necesitas una estructura para eso.
Sino ahi acabello lo hizo, practicamente todo el header de cada pic esta realizado de esa manera, bit a bit en XC8.
Es la unica forma que hay con estructuras.