Ich würde das überhaupt nicht mit der Übertragung einer Bitfolge machen.
Der Sender muss dezidiert sagen, welches Relais er ein bzw. ausschalten
muss.
Zb.
@S05; // bedeutet: Set Relais Nummer 5
@S00; // bedeutet: Set Relais Nummer 0
@R04; // bedeutet: Reset Relais Nummer 4
Das @ am Anfang dient zur Synchronisierung, damit der µC erkennen kann
wann ein Kommando beginnt. Das ; am Ende dient dem Abschluss eines
Kommandos, damit der µC erkennen kann, wann eine Zahl zu Ende ist.
Warum eigene Set und Reset Befehle: Dann muss der Sender nicht
buchführen welches Relais gerade wie steht. Wenn er Relais Nummer 6
einschalten will, dann teilt er es dem µC auch genau so mit und muss
nicht erst eine Gesamtansicht aller Relais erstellen um ein 10-Bit
Datenwort zu erstellen in dem nur das Bit für Relais 6 anders ist.
Das ist das eine. Das andere ist, dass es mit so einem 'Protokoll'
leicht ist, das ganze ohne fertiges PC-Programm zu testen. Einfach ein
Terminal an die serielle Schnittstelle anschliessen und ich kann das µC
Programm testen, indem ich selbst entsprechende Kommandos schicke ohne
da lang in Bits rumwühlen zu müssen.
Und da es sich um Relais handelt, ist auch nicht damit zu rechnen, dass
da grossartig viele Umsetzaktionen in der Sekunde kommen werden, d.h.
das Ganze wird nicht sonderlich zeitkritisch sein, so dass ich mir einen
(kleinen) Protokolloverhead erlauben kann.