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