[an error occurred while processing this directive]
Народ! А кто-то делал программы обмена по RS232 IBM - микроконтроллер с использованием девятого бита? Проблема со стороны IBM (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

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

Отправлено smovch 23 сентября 2002 г. 16:03

{D8:=1}
GetCommState(PortH, CntBlk);
CntBlk.Parity := MARKPARITY;
SetCommState(PortH, CntBlk);
{передать первый байт}
WriteByte(OutBuf[0]); {WriteFile... плюс анализ ERROR_IO_PENDING и ERROR_IO_INCOMPLETE}
{D8:=0}

SLEEP(10); {"Грязное" решение проблемы}

CntBlk.Parity := SPACEPARITY;
SetCommState(PortH, CntBlk);
WriteByte(OutBuf[0]);

При переключении с MARKPARITY на SPACEPARITY, это переключение влияет и на байт, который уже начал передаваться. В результате даже первый байт приходит с D8=0. В принципе, помогает тупая задержка на время заведомо больше времени передачи байта. Но это какое-то "грязное" решение вопроса. Хотелось бы идентифицировать момент завершения передачи байта (А НЕ ПРОСТО ПЕРЕЗАПИСИ ЕГО В БУФЕР) и только тогда переключать PARITY. Анализ ERROR_IO_PENDING и ERROR_IO_INCOMPLETE информирует только о ПЕРЕЗАПИСИ ЕГО В БУФЕР.
Подскажите, если кто знает! И, если можно, в мыло.

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

Ответы



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

E-mail: info@telesys.ru