классический случай, RS-485, DE управляется через DTR.
DWORD dwMask=EV_TXEMPTY;
PurgeComm(hPort,PURGE_TXABORT|PURGE_TXCLEAR);
EscapeCommFunction(hPort,SETDTR);
Sleep(1);
WriteFile(hPort,AskBuf,AskLenght,&bc,NULL);
//ожидание окончания передачи
WaitCommEvent(hPort,&dwMask,NULL);
/*<< КОСЯК >>*/
Sleep(12);
/*<< КОНЕЦ КОСЯКА >>*/
EscapeCommFunction(hPort,CLRDTR);
//Принять пакет
PurgeComm(hPort,PURGE_RXABORT|PURGE_RXCLEAR);
a=ReadFile(hPort,AnsBuf,AnsLenght,&bc,NULL);
Таквот, выключать DTR приходится через 10 мс после того как WaitCommEvent якобы споймает то что передатчик пуст, если переключу раньше то оно передаст несколько бит уже при выключенном DE. Что за херня? Пишу тожесамое на обычных сях, просто жду пока не выставится lsr & 0x60 и никаких после этого задержек, сразу DTR выставляю.