bidirektional bedeutet, dass sie sowohl als Ein- als auch als Ausgang benutzt werden können.

die kleinste Dateneinheit eines digitalen Bausteins (auch bei allem im PC) ist ein Bit. es kann nur zwei Zustände einnehmen: 1 und 0.
8 Bits bilden ein Byte, damit kann man binär die Zahlen von 0 bis 255 anzeigen (0 bis (2^8)-1, also 2^8 verschiedene Zustände)


jeder deiner Ports hat im MC ein Byte Speicherplatz, dessen Inhalt er 'anzeigt', wenn er als AUSGANG benutzt wird.

jeder dieser Ports hat auch ein Byte Speicherplatz, welches den Zustand des Ports einnimmt, wenn er als EINGANG benutzt wird.
(dabei kann man bei den AVR-MCs noch das "Ausgangsregister" benutzen, um Pullup-widerstände einzuschalten)

Wenn du z.B. Port A als eingang deklarierst, an die Pins PA0 bis PA3 +5V anlegst, und an die Pins PA4 bis PA7 GND, dann sieht dein "Eingangsregister" so aus:
00001111 (Binär) = 0*128 + 0*64 + 0*32 + 0*16 + 1*8 + 1*4 + 1*2 +1*1 =8+4+2+1 =15 (dezimal)

PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0
------- GND ------- | ------- +5V--------
0 --- 0 --- 0 --- 0 --- 1 --- 1 --- 1 --- 1


würdest du den Wert in das "Ausgangsregister" schreiben, würde der Port die Werte so annehmen (wenn er als Ausgang eingestellt ist)


Du siehst: jeder Pin hat ein Bit, dessen Zustand er einnimmt wenn er Ausgan ist, und ein Bit, auf das er seinen Zustand schreibt, wenn er Eingang ist.

du kannst die Pins mit C und Bascom auch einzeln zu nem Ausgang oder Eingang machen, unabhängig von den anderen Pins des Ports.



EDIT: ich hab noch was verbessert und dazugeschrieben!
EDIT2: noch die Rechnung