[an error occurred while processing this directive]
Вот понадобилось софтовый UART сделать на прием, вижу такой алгоритм
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ВинниПух 26 июля 2005 г. 10:13

Прошу поправить знающих людей. Формат передачи такой низкий старт бит, далее 8 бит данных,
1 высокий стоп бит (10-ти байтовая посылка).
Итак как и в аппаратном UARTе буду делать 16 кратное семплирование бодрейта.

За время передачи одного бита я считываю нужный пин порта 16 раз и по анализируя
чего больше нолеков и единичек определяю какой бит я считал.
Значит алгоритм такой
По приходу прерывания по падающему фронту на INT0, запрещаю прерывания INT0 (началась передача), конфигурирую
прерывания от счетчика по сравнению так чтобы прерывание по сравнению возникало
16 раз за время длительности одного бита посылки (это я подсчитаю исходя из
выставленной скорости передатчика). Считываю 16 раз определяю чего больше
считал нулей или единиц и определяю что я принял старт бит, далее продолжаю
считывать по 16 раз и формировать байт данных, после того как считаю старт бит и
8 байт данных считываю стоп бит и если он равен 1, то значит я считал байт правильно.
Разрешаю прерывание INT0 и жду следующего байта.
Тревожит Вопрос Правильно ли я понял алгоритм будет ли это работать ,
не нужно ли еще как то синхронизироваться. Если скажем пропущу старт или стоп бит?
Если не трудно поделитесь примерчиком на ASM или С для приемника UART для AVR.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru