Also: Die Tastaturschnittstelle verwendet Open-Collector-Treiber, die,
wenn sie aktiv sind, das Signal auf 0 V herunterziehen. Sind sie nicht
aktiv, wird das Signal über die vorhandenen Pull-Up-Widerstände auf
5V-Pegel gehalten.
Der AVR hat keinen Open-Collector-Ausgang, so daß man eigentlich einen
Open-Collector-Treiberbaustein verwenden müsste, wie z.B. den 74xx05.
Das ist aber nicht nötig, weil man das Verhalten eines
Open-Collector-Ausganges nachbilden kann.
Der aktive Zustand - Signal auf 0V herunterziehen - ist leicht mit einem
Port-Pin realisierbar. Der inaktive Zustand - Signal nicht
herunterziehen - bedeutet nicht, 5V auszugeben, denn dann könnte auch
kein anderer an der Signalleitung angeschlossener Baustein das Signal
auf 0V herunterziehen, was einem Kurzschluss gleichkäme.
Vielmehr bedeutet es, einen hochohmigen Zustand zu haben, der das
Signal nicht beeinflusst.
Ein Portpin aber kann nur 0V oder 5V ausgeben ... es sei denn, man
schaltet seine Richtung um, so daß er kein Aus-, sondern ein Eingang
ist. Dann ist er im Sinne des oben geforderten hochohmig.
Und das ist der "Trick". Das Datenregister des Ports initialisierst Du
mit 0, damit bei aktivem Ausgang das Signal auf 0 V heruntergezogen
werden kann, und mit dem Datenrichtungsregister schaltest Du zwischen
Ausgang und Eingang hin und her.
Verständlicher?