Wenn du zu niemandem kompatibel sein musst, kannst du dir dein Protokoll so überlegen, wie es dir am geschicktesten erscheint.

Bei deinem Beispiel wirst du im wesentlichen eine Flankenerkennung machen, d.h. du tastest ab und vergleichst den Wert davor mit dem aktuellen Wert. Das ganze musst du aber im richtigen Takt machen und optimalerweise aufsynchronisieren.
Alternativ könntest du das Signal direkt codieren und mit Start- und Stopsequenzen schaffen, d.h. an ist ne Eins, aus ne Null - wenn du ein Byte übertragen willst, schickst du z.B. über 2 Zeitabschnitte eine Eins-Signal, daram kann der Empfänger feststellen, dass du etwas senden willst, dann schickst du deine Daten, und nach dem Byte nochmal zwei Einsen, damit du erkennst, dass die Daten vorbei sind.
Du kannst auch die Start- und Stopbits weglassen, läufst aber dann Gefahr, dass irgendwas da rein stört und dann so tut als wäre es ein Bit.

Was auch sehr einfach ist: du verwendest zwei unterschiedlich lange An-Zeiten für 0 und 1, d.h. wenn du eine 0 übertragen willst, lässt du das Teil 5ms an und schaltest danach für 5ms aus. Wenn du eine 1 übertragen willst, lässt du dein IR-Modul für 10ms an und schaltest es danach für 5ms aus.
Auch hier helfen dir Start- und Stopsequenzen Übertragunssicherheit zu gewinnen.

Auf die Weise kannst du dir noch beliebige andere Verfahren ausdenken.

Das einzige, was du wirklich beachten musst, ist, wie deine Module angesteuert werden: die IR-Dioden könntest du mit einem PIC direkt schalten und könntest dann auch direkt übertragen - da du aber schreibst, dass deine Module bei 33kHz arbeiten, dürften die schon etwas an Elektronik enthalten, die die wesentliche Übertragung erledigt. Einfach mal ins Datenblatt schaun (oder statt der Module direkt die IR-Diode und nen Fototransistor verwenden).

MfG
Stefan