Hallo,

so weit ich verstehe

die USART (Atmega hat ein empfanger (1 * byte, nenne mal E1) und zwei buffer (2 * byte, nenne mal B1/B2, ist eine Art FIFO = First In First Out, auslesen mit UDR).

Wenn ein byte vollig in die empfanger (E1) hereingeschoben ist wird das byte in B1 oder B2 gespeichert wenn noch einer Leer ist (die bytes werden abwechselnd in B1 oder B2 gespeichert) und wenn mann die UDR auslehst lehst man die zuerst gespeicherten Wert (ob B1 ob B2). Wenn noch mahl UDR lesen wird die andere B register Wert ausgelesen (angenommen darin ist ein gultige Wert).

Wenn B1 und B2 voll sind und noch nicht ausgelesen von UDR und ein drittes byte ist schon empfangen in E1 ist noch immer kein Problem. Nur wenn ein neues startbit empfangen wird wird die byte in E1 verloren gehen (nicht B1 und B2) und erscheint ein overun-interrupt (wenn eingeschaltet)

Die mikrokontroller steurt die B1/B2 speicher/auslese reien folge, braucht mann sich keine Sorgen zu machen. So mindestens die letzte 2 empfangen bytes sind immer da.

in 'C' hier ein etwas cryptisches beispiel, nur um ein idee zu bekommen

//Mach platz fur 6 bytes
unsigned char RX[6];
//index fur RX
unsigned char iRX;
//bytes nach integer umsetzen
int RxVal;


//solange RXC bit hoch ist (byte empfangen, oder mehere bytes)
while(UCSRA&(1<<RXC){

//empfange byte in array speichern (und nachste array position wahlen(++))
RX[iRx++]=UDR;

//wenn 6 bytes empfangen sind
if(iRX==6){

//umsetzen von 2 bytes RX[3]+RX[4] nach 1 integer (integer = 2 bytes)
RxVal=*(int*)&RX[3]; //hahaha...

//wenn empange wert grosser ist als...
if(RxVal>0x81F4){
//mach etwas
}//if
}//if
}//while


Ich bin mir bewust dass dies kein complettes antwort ist aber irgendwo mit dieser information solls gehen.

gruss

Henk