Hi Alex,

-Wie lange ist dein Kabel?
->Wenn sehr lang (über 20meter neben Stromleitungen) solltest Du über eine Abschirmung nachdenken.
-Wer gibt den Takt an?
Gemeint ist der Timer der fuer die UART zuständig ist.
Je nach der Quarzfrequenz der Clock, muss der Timer genau abgestimmt werden.
Manchmal liegt der Timerwert genau auf einer Theoritische Kommazahl, was eine Zeitverschiebung und somit ein "ab und zu" verlust eines Bytes oder Bits zu folge hat.
Ich wuerde dann eine anderen Quarz nehmen bsp: 11.0592 Mhz
- Wie lange ist deine Interuptservice routine?
Sie sollte nur den Byte vom register nehme und gebenenfalls in einen Puffer legen.
Dauert es zu lange wird das nächste Byte im register vom übernächsten ueberschrieben.
- Welche priorität hat der Interrupt?
Kann es sein das ein anderer interrupt ihn davon abhält den Byte zu nehmen

Meine ISR die hervorragend klapt (fuer mcs51)

void serInterruptHandler(void) interrupt SI0_VECTOR// using 1 // interrupt Nr.4
{
if (RI==ON) // read flag
{
RI=OFF; // reset flag
if (Rsize<BUFSIZE_R) // when buffer is not full
{
RBuf[Rindex]=SBUF; // save caracter in the buffer
Rsize++;
Rindex++;
if (Rindex>=BUFSIZE_R) Rindex=0; // at the end of the buffer
}
}
if (TI==ON) // transmit flag
{
TXTBLOCK=OFF;
TI=OFF; // reset flag
}
}