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)