Hallo,
das TWINT hat damit erst mal nichts zu tun. TWINT wird gesetzt wenn die aktuelle Übertragung abgeschlossen ist.
Außerdem wäre die Abfrage des TWINT-Bits so falsch. Richtig müsste es heißen if(TWCR & 128 ) oder if(TWCR & (1<<TWINT)).
TWINT ist nur ein Bit im Register TWCR und ist an siebter Stelle, d.h. TWINT ist immer 7.
7 dezimal ist 111 binär, und in der if-Abfrage steht also: 111 & 1 , das gibt immer 1, ist also kein Wunder warum er über UART dann "TWINT = 1" ausgibt
Das steht also in keiner Verbindung dazu, was auf dem Bus passiert.

ACK auslesen:
if( TWSR ==0x18 || TWSR==0x28 ){/*Ack wurde erkannt*/} beim Senden
if( TWSR ==0x40 || TWSR==0x50 ){/*Ack wurde erkannt*/} beim Lesen
Die Zahlen kommen von Seite 183 und 186 im Datenblatt. $ bzw 0x bedeutet hexadezimal.

Grüße,
Bernhard