Mmn erfolgt bei dir das Abtasten der Bits nicht in der Bitmitte, sondern
genau zum Bitwechsel, weil du den Timer mit der fallenden Flanke des
Startbits mit einer Bitzeit +2(?) startest und nicht zunächst mal mit
1,5 Bitzeiten, um genau zur Bitmitte abzutasten.
Weiterhin setzt du srx_tmp nie zurück. Da du nur die 1en reinschreibst,
musst du srx_tmp mit jedem neuen Empfang auf 0 setzen, sonst stehen
irgendwann nur noch 1en drin.
Beides erklärt aber nicht, warum du konstant 0x00 empfängst.
Ich würde folgendes tun: Wenn es dir darum geht, eine Soft-Uart
produktiv zu nutzen, dann würde ich eine fertige, getestete
Implementierung nehmen und deine in die Tonne kloppen.
Wenn es dir darum geht, eine Soft-Uart zu Lernzwecken selbst zu bauen,
dann würde ich den Hardware-Uart und z.B. die Fleury-Lib nehmen, darin
ausreichend grossen Tx-Ringbuffer konfigurieren und den Hardware-Uart
dann für Debug-Ausgaben nutzen, um z.B. erstmal "srx_tmp" mit jedem
empfangenen Bit anzugucken.