Ne, paßt halt net mit 6.
Mit dem i=6; i>0; fängt er bei 6 an zu zählen und hört bei 1 auf.
Eigentlich ok, aber du adressierst die einzelnen Bits später mit i von 0 an (1<<i).

Die Tilde vor dem (1<<i) muß auch weg, wills ja nur genau ein bit mit dem & rausmaskieren für die Vergleiche danach.

Als Beispiel (mit den Änderungen) 0x0f gesendet:
i=05, parity = 01, bit2send = 00
i=04, parity = 01, bit2send = 00
i=03, parity = 00, bit2send = 08
i=02, parity = 01, bit2send = 04
i=01, parity = 00, bit2send = 02
i=00, parity = 01, bit2send = 01

edit:
Nein, es läuft noch nicht. Bin grad fertig mitm löten.
Werd aber selber was in ASM dafür schreiben, ich brauch später besseres timing als in c