Das ist gar nicht so schwer.
Da Du sowieso jedes Zeichen einzeln empfängst und im Empfangs-Interrupt auswerten musst, brauchst Du nur in einer statischen Variable mitzuzählen, wie viele Zeichen schon angekommen sind.

Ich könnte mir die Interrupt-Routine in etwa so vorstellen:

Code:
signal (SIG_UART0_RECV)
{
static unsigned char count, Data;
unsigned char DataIn;


DataIn = UDR0;

if (count > 7)
{ 
SaveToEeprom(Data);
count = 0;
Data = 0;
}

if(DataIn == "1")
Data |= 1 << (7-count);

count++;
}
Gruß,
askazo