Erst mal Hardware:
Deine Pins am AVR sollten z.B. Pull-Up Widerstände haben, somit sind die schon mal HI.
Die Schalter legen dann den Pin jewiels auf Masse (Low).

Die beien Ports sind auf INPUT gesetzt?

So wie es jetzt mit C Programmierung aussieht (Sorry) amer allgemein:
Erst mal den Wert in Variablen übertragen (nicht die Port-Variablen verwenden)

Ich gehe mal davon aus dass die Schalter offen sind (Eingaänge also HI)

z.B. X und Y

Dann musst Du die beiden unterscheidlichen Ports in einer Variable vereinen

um ungewünschtes zu filtern erst mal mit AND

erst mal X = port_D and 11100000 REM (D7, D6, D5)
dann Y = port_B and 00000001 REM (B0)

jetzt schiebst Du X um 4- Bit nach rechts REM = 00001110
nun noch Y zu X verodern
X = X OR Y REM = 00001111

Nun hast Du den Wert in X stehen.


Wie das ganze in C zu scheiben ist kannst Du dann bestimmt umsetzen.