Hallo PCVirus,
wenn es nur an einem komplette Port scheitern sollte, man kann sich auch einen komplette Port durch verschiedene I/O-Pins zusammen programmieren. "Splitting"
Gruß Silvio

Hier mal ein Beispiel von C.Kühnel´s BascomAVR
Code:
' Splitting von Variablen auf I/O-Pins

$regfile = "m8def.dat"                  ' ATmega8
$crystal = 3690000                      ' für STK500
$baud = 19200

Dim A As Byte


' verfügbare I/O Pins beim ATmega8
' PD2-PD7, PB0-PB5, PC0-PC5

' Ausgabebyte soll durch PC0, PC1, PD2-PD7 gebildet werden
' Eingabebyte soll durch PB0-PB5, PC2, PC3 gebildet werden.

Config Portd = Output

Config Portb = Input
Portb = 255

Ddrc = &B11000000
Portc = &B0011111

Declare Sub Write_port(x As Byte)
Declare Function Read_port() As Byte

Do
  Input "Eingabe [0-255]: " , A
  Write_port A
  A = Read_port()
  Print A
Loop

Sub Write_port(x As Byte)
  Portc.0 = X.0
  Portc.1 = X.1
  Portd.2 = X.2
  Portd.3 = X.3
  Portd.4 = X.4
  Portd.5 = X.5
  Portd.6 = X.6
  Portd.7 = X.7
End Sub

Function Read_port() As Byte
  Local X As Byte

  X.0 = Pinb.0
  X.1 = Pinb.1
  X.2 = Pinb.2
  X.3 = Pinb.3
  X.4 = Pinb.4
  X.5 = Pinb.5
  X.6 = Pinc.2
  X.7 = Pinb.3

  Read_port = X
End Function