Задание к лабораторной работе
Разработать программный модуль реализации процедуры передачи (приема) информации через последовательный интерфейс.
В базовом варианте данные передаются в одном направлении, однако полностью однонаправленным его назвать нельзя, поскольку 5 обратных линий используются для контроля над состоянием устройства.
Скорость передачи данных варьируется и лежит в пределах
от 120-200 КБ/с до 2 МБ/с.
Рассматривается как устаревший и не рекомендуется к использованию
Некоторые интерфейсы (Ethernet, FireWire, USB) используют последовательный способ обмена информацией, название «последовательный порт» закрепилось за портом стандарта RS-232.
m_Handle = CreateFile("com", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
Закрытие порта выполняется путем освобождения соответствующего описателя:
BOOL CloseHandle(
HANDLE hObject
);
Для каждого порта необходимо определить структуры DCB и COMMTIMEOUTS, которые определяют параметры, а также OVERLAPPED для работы в асинхронном режиме и содержит дескриптор события (HANDLE hObject).
typedef struct _DCB {
DWORD DCBlength; // sizeof(DCB)
DWORD BaudRate; // current baud rate
DWORD fBinary:1; // binary mode, no EOF check
DWORD fParity:1; // enable parity checking
DWORD fOutxCtsFlow:1; // CTS output flow control
DWORD fOutxDsrFlow:1; // DSR output flow control
DWORD fDtrControl:2; // DTR flow control type
DWORD fDsrSensitivity:1; // DSR sensitivity
DWORD fTXContinueOnXoff:1; // XOFF continues Tx
DWORD fOutX:1; // XON/XOFF out flow control
DWORD fInX:1; // XON/XOFF in flow control
DWORD fErrorChar:1; // enable error replacement
DWORD fNull:1; // enable null stripping
DWORD fRtsControl:2; // RTS flow control
DWORD fAbortOnError:1; // abort reads/writes on error
DWORD fDummy2:17; // reserved
WORD wReserved; // not currently used
WORD XonLim; // transmit XON threshold
WORD XoffLim; // transmit XOFF threshold
BYTE ByteSize; // number of bits/byte, 4-8
BYTE Parity; // 0-4=no,odd,even,mark,space
BYTE StopBits; // 0,1,2 = 1, 1.5, 2
char XonChar; // Tx and Rx XON character
char XoffChar; // Tx and Rx XOFF character
char ErrorChar; // error replacement character
char EofChar; // end of input character
char EvtChar; // received event character
WORD wReserved1; // reserved; do not use
} DCB;
CommTimeOuts.ReadIntervalTimeout = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;
Чтобы операция ReadFile немедленно возвращала управление со всеми полученными данными (асинхронный режим) следует задавать следующие значения:
Прием данных аналогично осуществляется путем чтения
из соответствующего файла:
BOOL ReadFile(
HANDLE hFile, // дескриптор файла
LPVOID lpBuffer, // буфер данных
DWORD nNumberOfBytesToRead, // число байтов для чтения
LPDWORD lpNumberOfBytesRead, // число прочитанных байтов
LPOVERLAPPED lpOverlapped // асинхронный буфер
);
Управление состоянием порта в случае использования данной функциональности состоит
в установке поля fRtsControl структуры DCB в значение RTS_CONTROL_TOGGLE. Это приводит к тому, что бит RTS будет автоматически устанавливаться в единицу при наличии
в выходном буфере каких-либо данных.
Важно
Для проверки работы программы необходимо использовать средства эмуляции COM-портов. Например, com0com или Virtual Serial Port Driver.
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть