Последовательный порт. Архитектура персональных компьютеров презентация

Содержание

Цель работы Получить навыки программирования и изучить возможности использования последовательного интерфейса RS-232. Продолжительность работы — 4 часа. Задание к лабораторной работе Разработать программный модуль реализации процедуры передачи (приема) информации через последовательный

Слайд 1Последовательный порт
Лабораторная работа №7
Архитектура персональных компьютеров
Подготовил:
В. Я. Богдан
450502


Слайд 2Цель работы
Получить навыки программирования и изучить возможности использования последовательного интерфейса RS-232.
Продолжительность

работы — 4 часа.

Задание к лабораторной работе

Разработать программный модуль реализации процедуры передачи (приема) информации через последовательный интерфейс.


Слайд 3Порт предназначен для обмена информацией между устройствами, подключенными к шине внутри

компьютера, и внешним устройством.





Слайд 4Параллельный порт
Параллельная передача — байт информации (8 бит) передается по 8

отдельным линиям (проводам).

Слайд 5LPT-порт
LPT (Line Print Terminal) — использовался (до появления USB) для подключения принтера,

сканера и других внешних устройств.

В базовом варианте данные передаются в одном направлении, однако полностью однонаправленным его назвать нельзя, поскольку 5 обратных линий используются для контроля над состоянием устройства.
Скорость передачи данных варьируется и лежит в пределах от 120-200 КБ/с до 2 МБ/с.
Рассматривается как устаревший и не рекомендуется к использованию


Слайд 6Последовательный порт
Последовательная передача — выполняется побитно в двух направлениях и с

одинаковой частотой.

Некоторые интерфейсы (Ethernet, FireWire, USB) используют последовательный способ обмена информацией, название «последовательный порт» закрепилось за портом стандарта RS-232.


Слайд 7COM-порт (RS-232)
COM-порт (communications port) — название интерфейса стандарта RS-232.
Ранее использовался

для модема или мыши. Ныне —для соединения с ИБП, связи с аппаратными средствами разработки и подключения некоторых других устройств.



Достоинством является крайняя простота оборудования. Недостатком — низкая скорость, крупные размеры разъемов.

Слайд 8COM-порт (RS-232)
Максимальная скорость передачи по последовательному порту — 115 200 бит/с.
Передача

данных может осуществляться в синхронном и асинхронном режимах.

Слайд 9COM-порт (RS-232)
Асинхронный режим позволяет реализовать работу по событиям, в то время

как синхронный лишен этой возможности.
Скорость асинхронной передачи меньше, поскольку для каждого символа имеются стартовые и стоповые биты.

Слайд 10Программная реализация
Программное взаимодействие с использованием различных механизмов:
Использование функций BIOS
Использование аппаратных портов
С

помощью интерфейса Win32 API

Алгоритм передачи в общем случае состоит из следующих фаз:
инициализация порта;
передача данных;
прием данных;
анализ состояния порта.

Слайд 11Инициализация порта
С последовательными и параллельными портами в Win32 работают как с файлами.
Для

открытия порта используется функция CreateFile:

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).


Слайд 12Инициализация порта
После открытия необходимо произвести конфигурацию порта, для последовательного порта используется

структура DCB:

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;


Слайд 13Инициализация порта
Необходимо также определить временны́е параметры, которые описываются структурой COMMTIMEOUTS:
typedef struct

_COMMTIMEOUTS {
DWORD ReadIntervalTimeout; //Maximum time between read chars
DWORD ReadTotalTimeoutMultiplier; // Multiplier of characters
DWORD ReadTotalTimeoutConstant; // Constant in milliseconds
DWORD WriteTotalTimeoutMultiplier; // Multiplier of characters
DWORD WriteTotalTimeoutConstant; // Constant in milliseconds
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;


CommTimeOuts.ReadIntervalTimeout = 0;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 0;

Чтобы операция ReadFile немедленно возвращала управление со всеми полученными данными (асинхронный режим) следует задавать следующие значения:


Слайд 14Передача и прием данных
Передача данных осуществляется записью данных в файл устройства:
BOOL

WriteFile(
HANDLE hFile, // дескриптор файла
LPCVOID lpBuffer, // буфер данных
DWORD nNumberOfBytesToWrite, // число байтов для записи
LPDWORD lpNumberOfBytesWritten, // число записанных байтов
LPOVERLAPPED lpOverlapped // асинхронный буфер
);

Прием данных аналогично осуществляется путем чтения из соответствующего файла:

BOOL ReadFile(
HANDLE hFile, // дескриптор файла
LPVOID lpBuffer, // буфер данных
DWORD nNumberOfBytesToRead, // число байтов для чтения
LPDWORD lpNumberOfBytesRead, // число прочитанных байтов
LPOVERLAPPED lpOverlapped // асинхронный буфер
);

Управление состоянием порта в случае использования данной функциональности состоит в установке поля fRtsControl структуры DCB в значение RTS_CONTROL_TOGGLE. Это приводит к тому, что бит RTS будет автоматически устанавливаться в единицу при наличии в выходном буфере каких-либо данных.


Слайд 15Передача данных
overCom_1.hEvent = CreateEvent(NULL, true, true, NULL); //создать событие

//записать

байты в порт
WriteFile(hCom_1, buf, strlen(buf), &temp, &overCom_1);

signal = WaitForSingleObject(overCom_1.hEvent, INFINITE); //приостановить поток, пока не завершится
//если операция завершилась успешно, установить соответствующий флажок
if((signal == WAIT_OBJECT_0) && (GetOverlappedResult(hCom_1, &overCom_1, &temp, true)))
{
CloseHandle(overCom_1.hEvent);
return true;
}

CloseHandle(overCom_1.hEvent);
return false;

Слайд 16Прием данных
//главная функция потока, реализует приём байтов из COM-порта
{
COMSTAT comstat; //структура

текущего состояния порта,
DWORD btr, temp, mask, signal; //переменная temp используется в качестве заглушки
overlapped.hEvent = CreateEvent(NULL, true, true, NULL); //создать сигнальный объект-событие
SetCommMask(COMport, EV_RXCHAR); //установить маску на срабатывание по событию приёма
while(условие) //пока поток не будет прерван, выполняем цикл
{
WaitCommEvent(COMport, &mask, &overlapped); //ожидать события приёма байта signal = WaitForSingleObject(overlapped.hEvent, INFINITE); //приостановить поток до прихода байта
if(signal == WAIT_OBJECT_0) //если событие прихода байта произошло
{
if(GetOverlappedResult(COMport, &overlapped, &temp, true)) //проверяем, успешно ли завершилась
//перекрываемая операция WaitCommEvent
if((mask & EV_RXCHAR)!=0) //если произошло именно событие прихода байта
{
ClearCommError(COMport, &temp, &comstat); //нужно заполнить структуру COMSTAT
btr = comstat.cbInQue; //и получить из неё количество принятых байтов
if(btr) //если действительно есть байты для чтения
{
ReadFile(COMport, bufrd, btr, &temp, &overlapped);//прочитать байты из порта в буфер программы
}
}
}
}
CloseHandle(overlapped.hEvent); //перед выходом из потока закрыть объект-событие
}

Слайд 17Результаты работы программы


Слайд 18Список источников
Несвежский В. Програмирование аппаратных средств в Windows — c. 568

(557)
Авдеев В. А. Периферийные устройства: интерфейсы, схемотехника, программирование — с. 276
Глецевич И. И. Вычислительные комплексы, системы и сети: лаб. практикум для студ. спец. 1-40 02 01 «Вычислительные машины, системы и сети» — с. 28
Викиучебник: COM-порт в Windows (программирование)
Работа с COM-портом с помощью потоков


Важно

Для проверки работы программы необходимо использовать средства эмуляции COM-портов. Например, com0com или Virtual Serial Port Driver.


Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика