PORTx und DDRx ist KEIN unsigned char* !

Es hat zu heissen

Code:
void Funktion (unsigned char volatile * port);
Das volatile ist wichtig, sonst landest du ruckzuck auf der Nase, je nach Code!