Krótka uwaga na temat projektowania oprogramowania „UART”: istnieją przynajmniej jakościowo różne podejścia, w zależności od wymagań:
Sterownik bit-bang „przejmuj wszystko” wyłączy wszystkie przerwania i użyje kodu zliczanego do cyklu, aby taktować każdy bit. Odbieranie danych za pomocą sterownika „przejmuj wszystko” wymaga, aby po otrzymaniu danych sterownik robił tylko na nie czekając.
Sterownik bit-bang „przejmujący główną pętlę” będzie zachowywał się podobnie jak powyżej, z tym wyjątkiem, że użyje zasobu timera dla taktowania bitów, a nie zliczania cykli. Przerwania, których obsługa nie trwa zbyt długo, mogą pozostać włączone. W przypadku transmisji szeregowej zasób timera o stałej szybkości może być współdzielony z innymi celami; jednak w przypadku odbioru szeregowego sterownik bit-bang będzie musiał ponownie załadować zegar, gdy nadejdzie bit startowy, tak aby wygasł w połowie każdego nadchodzącego czasu.
W pełni sterowany przerywnikiem sterownik bit-bang używa timera o stałej szybkości, który działa z pewną wielokrotnością szybkości transmisji danych (najlepiej 3x i 5x są lepsze niż 4x) i robi wszystko przez ten zegar. Taki sterownik może działać jednocześnie ze wszystkim innym, ale będzie wymagał szybszego procesora niż poprzednie typy sterowników.
Aby uniknąć sytuacji, w której pierwsze dwa style kontrolera będą wiecznie czekać na dane, które mogą nigdy nie nadejść, często procedury odczytu zawierają wartość limitu czasu. Zauważ, że jeśli pętla kontrolera np. „Pobiera bajt, czekając na niego do 100 ms, zrób inne rzeczy, jeśli nie przyszedł, a następnie pobierz następny bajt itp.” i pojawia się bajt między czasem, w którym procedura „get” kończy się, a kontroler zaczyna ponownie czekać, ten bajt zostanie utracony; urządzenie, z którym się komunikuje, będzie musiało oczekiwać takiej możliwości.
Tylko trzeci styl sterownika będzie w stanie poradzić sobie z możliwością nadejścia bajtu danych podczas przesyłania bajtu danych. Dwa pierwsze style można jednak zastosować w przypadku niektórych protokołów komunikacyjnych pełnego dupleksu, jeżeli kontroler musi mówić tylko wtedy, gdy się do niego mówi. Sztuczka polega na tym, aby mieć procedurę „odczytu i zapisu danych”, która będzie czekać na nadchodzący bit startowy, a gdy zostanie wykryty, nakłada się na odczyt i zapis w taki sposób, że kontroler wysyła każdy bit tak, jak ma zamiar zbadać przychodzące dane. Gdy kontroler wykryje nadchodzący bit startowy, będzie wiedział dokładnie, kiedy będzie szukał kolejnych 8 bitów danych i bitów stopu, i tym samym będzie wiedział, że może bezpiecznie wykorzystać czas pomiędzy wysłaniem własnych danych.
Jedna uwaga na temat podziału: kontroler, który do odbierania danych używa jednego z dwóch pierwszych stylów bit-bang uart, musi przetworzyć każdy bajt danych przed opadającym zboczem bitu początkowego następnego bajtu, aby uniknąć utraty danych. Jeśli kontroler wie, że przetwarzanie zajmie co najmniej pół bita, może zmaksymalizować czas dostępny do przetwarzania, akceptując każdy bajt, gdy tylko pobierze ostatni bit danych, zamiast czekać na bit stopu. Jednak jako dodatkowy sposób na zapewnienie kontrolerowi więcej czasu, może być pomocne, aby urządzenie, które daje mu transmisję danych, miało dwa bity stopu zamiast jednego. Jeśli można skonfigurować „oznaczenie parzystości”, spowoduje to dodanie dodatkowego dodatkowego czasu. Transmisja np. 115200-8-M-2 pozwoli na dłuższy czas przetwarzania niż 57600-8-N-1, nawet jeśli dane będą przesyłane ponad 1,6 razy szybciej.