Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; 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);
}




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 76:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru