Also ich kann mir nicht vorstellen dass man in c kein Timing
zusammenbringen sollte.
Von der Grundidee ist ein SW-UART recht einfach:
*) TX
Startbit setzen, Bitlänge warten, 1. Datenbit setzen, warten, 2. bis 8,
datenbit ausgeben, Stopbit ausgeben, warten; danach mit dem nächsten
byte weitermachen.
Wers elegant will wartet natürlich nicht, sondern wird alle Bitlängen
einen Interrupt auslösen.
*) RX
Rx-Leitung auf flankengetriggerten Interupteingang. Nach Auftreten
eines Ints (=Beginn des Startbits) 1/2 Bitlänge warten, immer noch
gleicher Pegel -> weiter machen, andernfalls wars nur eine Störung, ab
dann alle Bitlängen (somit immer in der Mitte eines Bits) 8 mal
sampeln, eventuell noch das Stopbit auswerten und Interrupt wieder
scharfstellen.
Eleganterweise auch hier das warten durch Timerinterrupt ersetzen und
wers ganz genau nimmt sampelt nicht einfach sondern macht eine zwei aus
drei Erkennung.
grüsse leo9