Code:
	unsigned volatile char adresse, daten;
void twi_slave(void)
{
TWAR = 0x40;
TWRC = (1<<TWEA) | (1<<TWEN) | (1<<TWIE);
TWSR = 0;
};
ISR(TWI_vect)
{
daten = TWDR;
TWRC |= (1<<TWINT);
TWRC = (1<<TWEA) | (1<<TWEN) | (1<<TWSTO);
if (TWSR &0b11111000 == 0x80)
{
if (daten == 0x04)
{PORTB |= (1<<PORTB1);}
else
{PORTB &= ~(1<<PORTB1);}
}
TWRC |= 0b1000000;
};
int main(void)
{
sei();
twi_slave();
DDRB |= (1<<PORTB1);
PORTB &= ~(PORTB1);
while(1)
{}
}
 Und mein Mastercode(Alles etwas unübersichtlich, und Beta):
	Code:
	#include <avr/io.h>         // I/O Port definitions 
#include <avr/interrupt.h>   // Interrupt macros 
#define F_CPU 16000000UL	//CPU Tackt
unsigned volatile char daten, error;
uint8_t adresse;
void twi_init(void);
int twi_senden(uint8_t adresse, char daten);
int main(void) 
{
	twi_init();
	adresse = 0x40;
	daten = 0x04;
	
	while(1)
	{
		twi_senden(adresse, daten);
		
	};
}
void twi_init(void)
{
	DDRC &= !((1<<DD0) | (DD1));
	PORTC = (1<<DD0) | (1<<DD1);
	TWSR = 0x00;		//Prescaler 
	TWBR = 12;		//TWI 400khz
};
int twi_senden(uint8_t adresse, char daten)
{
	TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);		//TWI aktivieren und Start condition auslösen
	while(!(TWCR & (1<<TWINT))); 	//Warten auf Start condition
	if((TWSR & 0xF8) != 0x08) return 0;
	
	TWDR = adresse & (0xFE);		//Adresse mit Schreibbit(xxxxxxx0) in Register
	TWCR = (1<<TWINT) | (1<<TWEN);	//senden
	if((TWSR & 0xF8) != 0x18) return 0;
	
	while(!(TWCR & (1<<TWINT)));	//warten auf ACK oder NACK
	
	TWDR = daten;					//Byte in Datenregister laden
	TWCR = (1<<TWINT) | (1<<TWEN);	//senden
	while (!(TWCR & (1<<TWINT)));	//warten auf ACK oder NACK
	if ((TWSR & 0xF8) != 0x28) return 0;
	
	TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);	//STOP Conditions auslösen
	return 1;	
};
 
Lesezeichen