Vidíš a přesně tenhle způsob já používám pro práci s jednotlivými porty u AVR.
typedef struct
{
unsigned B0: 1;
unsigned B1: 1;
unsigned B2: 1;
unsigned B3: 1;
unsigned B4: 1;
unsigned B5: 1;
unsigned B6: 1;
unsigned B7: 1;
} bits;
#define BITS(p) (*(volatile bits*)&p)
#define LED1 BITS(PORTA).B0
#define DIR_LED1 BITS(DDRA).B0
DIR_LED1=1; // Vystup
LED1=1; // Sviti
.
.
.
LED1=0; // Nesviti