Ich bins nochmal wieder....


Folgendes Programm läuft soweit einwandfrei:
Code:
int main(void)
{
	uint8_t output;   
	uint8_t status;   
	uint8_t data;
	unsigned char buffer[10];

	lcd_init(LCD_DISP_ON);               // LCD initialisieren
	twi_slave_init();                       // TWI Slave initialisieren



	while(1)
	{

	while(!(TWCR & 0b10000000)); //solange warten, bis was ankommt
	status = TWSR;				// Status abfragen..

	TWCR &=~ (1<<TWINT);	//TWINT auf 0 setzten damit TWI wieder arbeitet
	TWCR |=  (1<<TWEA);		//TWEA auf 1 setzten um Ack zu senden	
		
	if(TWSR == 128)
	{
		data = TWDR;
	}

		lcd_gotoxy(0,0);
		lcd_puts(itoa(data, buffer, 2));
		lcd_gotoxy(13,0);
		lcd_puts(itoa(data, buffer, 10));	
		_delay_ms(300);
	}

}
doch wenn ich den Programmteil für das Datenempfangen in eine eigene Funktion stecke, kriege ich nicht mehr den selben Wert:
Code:
uint8_t twi_slave_recive(void)
{
	uint8_t status;
	uint8_t data;
	
	while(!(TWCR & 0b10000000)); //solange warten, bis was ankommt
	status = TWSR;				// Status abfragen..

	TWCR &=~ (1<<TWINT);	//TWINT auf 0 setzten damit TWI wieder arbeitet
	TWCR |=  (1<<TWEA);		//TWEA auf 1 setzten um Ack zu senden	
		
	if(TWSR == 128)
	{
		data = TWDR;
	}

	return data;
}


int main(void)
{
	uint8_t output;   
	uint8_t status;   
	uint8_t data;
	unsigned char buffer[10];

	lcd_init(LCD_DISP_ON);               // LCD initialisieren
	twi_slave_init();                       // TWI Slave initialisieren


	while(1)
	{
	       data = twi_slave_recive();
	
		lcd_gotoxy(0,0);
		lcd_puts(itoa(data, buffer, 2));
		lcd_gotoxy(13,0);
		lcd_puts(itoa(data, buffer, 10));	
		_delay_ms(300);
	}

}
Was mache ich falsch?

Gruss Jey