idealerweise hat das modul eine "busy-leitung" so kenn cih das vom Easyradio zumindest, wenn die auf low wechselt, besteht keine empfangsbereitschaft mehr!

ich hab mir mit 2erlei dingen beholfen, zum einem habe ich meine daten immer in einer paketstruktur mit preambel (0xff, 0xaa oder 0x55), dann ein identifikationsbyte, dann falls erforderlich ein größenbyte und darauf folgend die datenbytes und abschließend einen crc prüfsumme (XOR verrichtet gute dienste und geht schnell) und zum anderen sende ich wie folgt meine daten mit hilfe der TX-ISR
Code:
#define  CONTINUE SENDING    if(READY_PIN_HIGH & !Sending & ReadPtr < WritePtr){ \
                                                   UDR = Buffer[ReadPtr++];   \
                                                   Sending = 1;                       \
                                               }

ISR(TX_COMPLETE)
{
     if(READY_PIN_HIGH & ReadPtr < WritePtr) {
          UDR = Buffer[ReadPtr++];
     }
     else Sending = 0;
}

void writeBus(unsiogned char databyte)
{
     Buffer[WritePtr++] = databyte;
     CONTINUE_SENDING;
}

int main(void)
{
     while(1) {
          ...
          CONTINUE_SENDING;
          ...
     }
     return 0;
}

durch WriteBus wird das ganze angeschoben:

byte für byte wandern in den puffer ...
dann überprüft das CONTINUE-makro ob gesendet wird, ist dem nicht so, wird das senden eingeleitet

jedes gesendete byte löst dann die ISR aus in der die empfangsbereitschaft des Funkmodul überprüft wird, ist das modul nicht mehr READY wird das senden einfach unterbrochen

in der hauptschleife wird dann regelmäßig das CONTINUE-makro aufgerufen, welches dann neben der sendeaktivität auch noch die sendebereitschaft überprüft und gegebenenfalls anstößt