unsigned char errorNumber; unsigned char *bufIn;
unsigned char *bufOut;
DCB *dcb;
COMMTIMEOUTS ct;
HANDLE port;
DWORD bc;
void CommPortInit();
void CommPortClose();
unsigned char CommPortRxd();
void CommPortTxd(unsigned char symbol);
void CommPortInit()
{
dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
dcb->DCBlength = sizeof(DCB);
switch(Form1->ComboBox2->ItemIndex)
{
case 0:
BuildCommDCB("baud=1200 parity=N data=8 stop=1", dcb);
break;
case 1:
BuildCommDCB("baud=2400 parity=N data=8 stop=1", dcb);
break;
case 2:
BuildCommDCB("baud=4800 parity=N data=8 stop=1", dcb);
break;
case 3:
BuildCommDCB("baud=9600 parity=N data=8 stop=1", dcb);
break;
case 4:
BuildCommDCB("baud=19200 parity=N data=8 stop=1", dcb);
break;
case 5:
BuildCommDCB("baud=38400 parity=N data=8 stop=1", dcb);
break;
case 6:
BuildCommDCB("baud=57600 parity=N data=8 stop=1", dcb);
break;
case 7:
BuildCommDCB("baud=115200 parity=N data=8 stop=1", dcb);
break;
}
dcb->fRtsControl = RTS_CONTROL_DISABLE;
dcb->fDtrControl = DTR_CONTROL_DISABLE;
ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 4000;
ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
switch(Form1->ComboBox1->ItemIndex)
{
case 0:
port = CreateFile("COM1", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
break;
case 1:
port = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
break;
case 2:
port = CreateFile("COM3", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
break;
case 3:
port = CreateFile("COM4", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
break;
}
if(port == INVALID_HANDLE_VALUE) errorNumber = 1;
else
{
SetCommState(port, dcb);
SetCommTimeouts(port, &ct);
PurgeComm(port, PURGE_TXCLEAR|PURGE_RXCLEAR);
SetupComm(port, 1, 1);
bufIn = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1);
bufOut = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 1);
}
}
void CommPortClose()
{
HeapFree(GetProcessHeap(), 0, bufIn);
HeapFree(GetProcessHeap(), 0, bufOut);
HeapFree(GetProcessHeap(), 0, dcb);
CloseHandle(port);
}
unsigned char CommPortRxd()
{
ReadFile(port, bufIn, 1, &bc, NULL);
if(bc == 0) errorNumber = 2;
return (bufIn[0]);
}
void CommPortTxd(unsigned char symbol)
{
bufOut[0] = symbol;
WriteFile(port, bufOut, 1, &bc, NULL);
}
код немного от билдера и привязан к 4-м портам... думаю, разберётесь...
-
- Спасибо. Я так и сделал - IBAH(27.09.2018 13:18)