Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Чтиво по ссылке... А код в теле(+)...
Отправлено
zlogic 14 января 2008 г. 08:07
В ответ на:
Builder C++ и COM порт отправлено
<font color=gray>грин</font> 14 января 2008 г. 00:14
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 CommPortRTS(unsigned char symbol);
void CommPortDTR(unsigned char symbol);
void CommPortInit(unsigned char comport, unsigned char baudrate)
{
dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
dcb->DCBlength = sizeof(DCB);
switch(baudrate)
{
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=2", 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;
dcb->Parity = 0;
ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 4000;
ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;
switch(comport)
{
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);
}
void CommPortRTS(unsigned char symbol)
{
if(!symbol) dcb->fRtsControl = RTS_CONTROL_ENABLE;
else dcb->fRtsControl = RTS_CONTROL_DISABLE;
SetCommState(port, dcb);
}
void CommPortDTR(unsigned char symbol)
{
if(!symbol) dcb->fDtrControl = DTR_CONTROL_ENABLE;
else dcb->fDtrControl = DTR_CONTROL_DISABLE;
SetCommState(port, dcb);
}
Составить ответ | Вернуться на конференцию
Ответы