Du hast das Datenblatt, insbesonders die Beschreibung zu den SFR "DDRx"
und "PORTX" schon gelesen, oder?
Kurz gesagt kann jeder Pin Eingang ODER Ausgang sein. Was er konkret
sein soll, muss ihm der Programmierer (DU!) erst sagen. Dazu dient
"DDRx". Welchen Zustand er als Ausgang dann annimmt, legst du mit
"PORTx" fest.
Und die Funktion der Assembler-Befehle (sbi und co) kannst du sicher
hier dem Tutorial entnehmen.
Auszug aus dem Datenblatt:
Each port pin consists of 3 Register bits: DDxn, PORTxn, and PINxn. As
shown in “Register
Description for I/O Ports” on page 65, the DDxn bits are accessed at the
DDRx I/O address, the
PORTxn bits at the PORTx I/O address, and the PINxn bits at the PINx I/O
address.
The DDxn bit in the DDRx Register selects the direction of this pin. If
DDxn is written logic one,
Pxn is configured as an output pin. If DDxn is written logic zero, Pxn
is configured as an input
pin.
If PORTxn is written logic one when the pin is configured as an input
pin, the pull-up resistor is
activated. To switch the pull-up resistor off, PORTxn has to be written
logic zero or the pin has to
be configured as an output pin. The port pins are tri-stated when a
reset condition becomes
active, even if no clocks are running.
If PORTxn is written logic one when the pin is configured as an output
pin, the port pin is driven
high (one). If PORTxn is written logic zero when the pin is configured
as an output pin, the port
pin is driven low (zero).