|
Обнаружил старт-бит, отсчитал паузу в 7/16 Тбита, взял три выборки на 7/16, 8/16 и 9/16 Тбита, сплюсмажорил их в 3/3, получил 3 единицы или 3 нуля - вдвинул в регистр и ждет следующего бита, а если хоть одна из трех выборок не совпала с соседними - сбросил все свое подсобное хозяйство в исходное положение и снова ждет старт-бита. Если успешно принят старт-бит и все N бит данных (и четность, если заказана), принимает стоп-бит, и если там не три единицы, то опять же сбрасывает свой конечный автомат, и все по новой.
У меня в немалой партии приборов прекрасно работает четырехканальный программный полнодуплексный UART на 115200, сделанный на Меге128. На испытаниях он был на порядок лучше аппаратной РС104-мультипортовки, и сделан он был именно так, как я описал выше, только Тбит не на 16 делилось, а на меньше