Program można znacznie uprościć. Nie musisz mieć dodanych opóźnień, ale po wpisaniu do rejestru nadawczego należy sprawdzać flagę TXC, która informuje o wysłaniu bajtu w świat. Flaga UDRE informuje, że bufor nadawczy został opróżniony i teraz bajt jest w wyjściowym rejestrze przesuwnym, ale nie gwarantuje to jeszcze, że został już wysłany.
Jak ustawiona zostanie flaga, że coś zostało odebrane to nie ma sensu czekać na zakończenie odbioru. Linie A należy podciągnąć do plusa a linie B do GND w urządzeniu, które pełni rolę mastera inaczej po zwolnieniu linii przez wszystkie urządzenia będą pojawiać się śmieci co w połączeniu z oczekiwaniem na zakończenie odbioru w twojej funkcji powoduje pewnie odbieranie śmieci, które pojawiają się zaraz za znakiem 'A'
Proponuję takie poprawki:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.