ich hab jetzt den Code ein wenig erweitert...jetzt bleibt der Master nicht mehr hängen, wenn er eine nicht vorhandene Addresse versucht anzusprechen:

es muss noch eine unsigned char Variable namens errcounter deklariert werden

Code:
	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
	while(!(TWCR & (1<<TWINT))) {
			errcounter++; 
			if(errcounter==10){errcounter=0; break;}
			}
	TWDR = addr; //addr = Zieladdresse
	TWCR = (1<<TWINT) | (1<<TWEN);
	while(!(TWCR & (1<<TWINT))) {
			errcounter++; 
			if(errcounter==10){errcounter=0; break;}
			}

	TWDR = data;		
	TWCR = (1<<TWINT) | (1<<TWEN);
	while(!(TWCR & (1<<TWINT))) { 
			errcounter++; 
			if(errcounter==10){errcounter=0; break;}
			
	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
die If-Abfragen kann man sich bei Bedarf ja selbst reinschreiben