ja, die Addresse wird in TWAR gesetzt

hier eine init-Methode:
Code:
void TWI_init(uchar ownaddr)
{
	TWAR = ownaddr;
	TWCR = 0x45;
	TWSR &= 0xFC;
	TWBR = 0xA;
}
dann eine zum starten:
Code:
uchar TWI_start(uchar ndevaddr)
{
	uchar errcounter;
	errcounter = 0;

	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);

	while(!(TWCR & (1<<TWINT)));	 {
		if(errcounter==10) {

			errcounter = 0;
			return 1;
		}
		errcounter++;
	}
	TWDR = ndevaddr;
	TWCR = (1<<TWINT) | (1<<TWEN);
	while(!(TWCR & (1<<TWINT)));
	for(unsigned char i = 0; i < 20; i++)
		asm("nop");
	if( !((TWSR & 0xf8) == 0x18 ) ) {
		return 1;
	}

	return 0;
}
zum senden:
Code:
void TWI_sendbyte(uchar nbyte)
{

	TWDR = nbyte;
	TWCR = (1<<TWINT) | (1<<TWEN);
	while(!(TWCR & (1<<TWINT))); 
}
und schließlich zum stoppen:
Code:
void TWI_stop(void)
{

	TWCR = (1<<TWINT) | (1<<TWSTO) | (1<<TWEN);
	for(unsigned char i = 0; i < 40; i++)
		asm("nop");

	TWCR |= 0x45;
	for(unsigned char i = 0; i < 40; i++)
		asm("nop");

}
ob meine ganzen nops wirklich nötig sind, hab ich noch nicht ausprobiert, schaden wirds aber nicht