[an error occurred while processing this directive]
Вот понадобилось софтовый UART сделать на прием, вижу такой алгоритм
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
Отправлено
ВинниПух 26 июля 2005 г. 10:13
Прошу поправить знающих людей. Формат передачи такой низкий старт бит, далее 8 бит данных, 1 высокий стоп бит (10-ти байтовая посылка). Итак как и в аппаратном UARTе буду делать 16 кратное семплирование бодрейта.
За время передачи одного бита я считываю нужный пин порта 16 раз и по анализируя чего больше нолеков и единичек определяю какой бит я считал. Значит алгоритм такой По приходу прерывания по падающему фронту на INT0, запрещаю прерывания INT0 (началась передача), конфигурирую прерывания от счетчика по сравнению так чтобы прерывание по сравнению возникало 16 раз за время длительности одного бита посылки (это я подсчитаю исходя из выставленной скорости передатчика). Считываю 16 раз определяю чего больше считал нулей или единиц и определяю что я принял старт бит, далее продолжаю считывать по 16 раз и формировать байт данных, после того как считаю старт бит и 8 байт данных считываю стоп бит и если он равен 1, то значит я считал байт правильно. Разрешаю прерывание INT0 и жду следующего байта. Тревожит Вопрос Правильно ли я понял алгоритм будет ли это работать , не нужно ли еще как то синхронизироваться. Если скажем пропущу старт или стоп бит? Если не трудно поделитесь примерчиком на ASM или С для приемника UART для AVR.