Initialisierung läuft jetzt. $40 steht jetzt im Statusregister und ich wollte jetzt anfangen Daten vom TWDR zu lesen. Hab die Textpassage in der Doku zum Mega 32 nur nicht so richtig verstanden.

"Received data can be read from the TWDR Register when the TWINT Flag
is set high by hardware. This scheme is repeated until the last byte has been received. After the last byte has been received, the MR should inform the ST by sending a NACK after the last received data byte."

Soll ich nach dem der Status ($40) erkannt wurde nochmal auf das TWINT Flag warten und dann einfach mit "in r16, TWDR" die Daten aus dem Datenregitster holen?

So würde ich mir das ganze jetzt nach dem lesen des Manuals vorstellen.
(beginnt da dem Punkt wo die Adresse erfolgreich gesendet wurde)

in r16, TWSR
andi r16, 0xF8
cpi r16, 0x40
brne error

rcall wait ;warten auf TWINT Flag

in r20, TWDR ;einlesen der Daten in r20
ldi r16, (1<<TWINT)
out TWCR, r16 ;senden eines NACK`s an den ST

rcall wait ;warten auf TWINT Flag

in r16, TWSR
andi r16, 0xF8
cpi r16, 0x50 ;NACK wurde vom ST empfangen
brne error


ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR, r16

r20 würde dann zur Weiterverarbeitung zur Verfügung stehen.