если говорить о WinAVR (или AVR-GCC), то порт вполне можно использовать в качестве параметра функции, точнее, указатель на порт. например как-то так:
Код
void set_port_bit(uint8_t *port, uint8_t bitnumber){
*port |= _BV(bitnumber);
}
// использовать так:
set_port_bit(&PORTB, 5); // 5-й бит порта установить
соответственно и массив таких указателей можно сделать
Я бы взял частями... но мне надо сразу.