это слишком сложно :) Вот например, кажеться проще некуда , а не рабтает. Без цикла for работает :(
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено whale 07 ноября 2004 г. 17:05
В ответ на: вот кусок кода от программатора ат45 написанного на скорую руку. отправлено DSN 07 ноября 2004 г. 15:49

void __fastcall TForm1::OpenComPort()
{
COMMTIMEOUTS ct;
DCB dcb;

FillMemory(&dcb, sizeof(dcb), 0);

ct.ReadIntervalTimeout=10; // мах время ожидания между двумя байтами
ct.ReadTotalTimeoutMultiplier=0;//9; // множитель для тай-аута (умн на кол-ва приним байт)
ct.ReadTotalTimeoutConstant=0;//20; // + время для общего тай-аута
// общ тайм-аут = TimeoutMultiplier*кол-во принимаемых байт + TotalTimeoutConstant)
ct.WriteTotalTimeoutMultiplier=ct.WriteTotalTimeoutConstant=0; // тайм-ауты для передачи

port=CreateFile(comport,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
if ( port == INVALID_HANDLE_VALUE )
{ Button2Click(NULL);
char mess[40] = "Невозможно открыть порт";
MessageBox (NULL, TEXT(strcat(strcat(mess," "),comport)),TEXT("Error"), MB_OK);
*mess=0;
CloseHandle(port);
goto exit;
}

// установка параметров порта
GetCommState(port, &dcb); // чтение параметров порта
dcb.BaudRate = CBR_1200 ;
dcb.fParity = FALSE;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fRtsControl = RTS_CONTROL_ENABLE;
dcb.fDtrControl = DTR_CONTROL_ENABLE;
dcb.fNull = TRUE;//FALSE;

SetCommState(port,&dcb); // уст параметров порта
SetCommTimeouts(port,&ct); // уст временных интервалов
PurgeComm(port,PURGE_RXCLEAR); // обнуление буфера порта
SetupComm(port,256,256); // передача параметров в порт

SetCommMask(port,EV_RXCHAR);

for (i=0; i<1000; i++)
{
WaitCommEvent(port,&mask,NULL);
ReadFile(port,buf_in,4,&bc,NULL);

Edit1->Text = buf_in[0];
Edit2->Text = i;

}
exit:
}

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru