Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Держите...(+)

Отправлено zlogic 02 июня 2008 г. 14:05
В ответ на: Может есть у кого... поделитесь исходниками использования API функции при р...{+} отправлено <font color=gray>EI</font> 02 июня 2008 г. 14:00

unsigned char *bufIn;
unsigned char *bufOut;

DCB *dcb;
COMMTIMEOUTS ct;
HANDLE port;
DWORD bc;

void CommPortInit(unsigned int commPort);
void CommPortClose();
unsigned char CommPortRxd();
void CommPortTxd(unsigned char symbol);
void CommPortRTS(unsigned char symbol);
void CommPortDTR(unsigned char symbol);

void CommPortInit(unsigned int commPort)
{
errorNumber = 0;
dcb = (DCB*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DCB));
dcb->DCBlength = sizeof(DCB);
BuildCommDCB("baud=9600 parity=N data=8 stop=1", dcb);

dcb->fRtsControl = RTS_CONTROL_DISABLE;
dcb->fDtrControl = DTR_CONTROL_DISABLE;

ct.ReadIntervalTimeout = 0;
ct.ReadTotalTimeoutMultiplier = 0;
ct.ReadTotalTimeoutConstant = 500;

ct.WriteTotalTimeoutMultiplier = 0;
ct.WriteTotalTimeoutConstant = 0;

switch(commPort)
{
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 изображения: 

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

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

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