Hier, das ist die Empfangsroutine vom Asuro:
Code:
void SerRead(unsigned char *data, unsigned char length, unsigned int timeout){
unsigned char i = 0;
unsigned int time = 0;
UCSRB = (1<<RXEN); // Empfaenger einschalten
if (timeout != 0)
{
/*
Die Funktion wird auf alle Faelle, auch ohne empfangene Daten, wieder
verlassen. --> nonblocking mode
*/
while (i < length && time++ < timeout)
{
if (UCSRA & (1<<RXC))
{
data [i++] = UDR;
time = 0;
}
}
if (time > timeout)
data [0] = 'T';
}
else
{
/*
Die Funktion wird auf alle Faelle erst nach dem Empfang von der
vorgegebenen Anzahl Zeichen verlassen. blocking mode
*/
while (i < length)
{
if (UCSRA & (1<<RXC))
data [i++] = UDR;
}
}
}
Musst halt noch auf deinen Mega32 umschreiben. Prinzip sollte aber das gleiche sein.
mfg
Lesezeichen