|
用 Windows 的 EscapeCommFunction 函数可以直接控制串口的 TXD,DTR 和 RTS 的输出电平,关键是控制好时序。下面的函数实现收发一个 byte。
BYTE Transceiver(HANDLE hComm, BYTE c) { bool b = true; BYTE r = 0; int i; i = 8; do { if ((c & 0x80) && b == false) { SetMOSI(hComm, 1); b = true; } else if (!(c & 0x80) && b == true) { SetMOSI(hComm, 0); b = false; } c <<= 1; SetSCK(hComm, 1); bool bStatus = GetMISO(hComm); r <<= 1; r |= bStatus ? 1 : 0; SetSCK(hComm, 0); } while (--i); if (!b) SetMOSI(hComm, 1); return r; }
其中的SetSCK, SetMOSI 需要用 EscapeCommFunction 函数来实现,例如:
void SetSCK(HANDLE hComm, bool bLevel) { EscapeCommFunction (hComm, bLevel ? SETDTR : CLRDTR); }
而 GetMISO 需要用 GetCommModemStatus 函数实现,看看 MSDN 上关于这些函数的说明。
|