Курсовая работа: Создание измерительного аппаратно-программного комплекса термометра на основе микроконтроллеров семьи ATMEGA

);

В качестве единственного параметра надо передать полученный ранее описатель порта (hPort).

Хоть система при завершении выполнения программы и освобождает все выделенные ей ресурсы (в том числе и порты), хорошим тоном программирования считается собственноручное закрытие портов. Открывать/закрывать порт как будто несложно. Кроме того, нам потребуется программная настройка порта. Думаю, все видели диалог настройки последовательного порта в диспетчере устройств системы. Все эти настройки мы можем произвести программно. Для этих целей используется функция WinAPI:

BOOL SetCommState(

HANDLE hFile,

LPDCB lpDCB

);

hFile — описатель открытого порта.

lpDCB — указатель на структуру DCB.

Основные параметры последовательного порта описываются структурой DCB. Она содержит массу полей, каждое из которых соответствует определенному параметру настройки порта. Мы рассмотрим несколько полей, которые нам нужны:

BaudRate — скорость передачи данных. Возможно указание констант —CBR_100, CBR_300, CBR_600, CBR_1200, …, CBR_256000.

Parity — схема контроля четности. Может содержать одно из следующих значений: EVENPARITY, MARKPARITY, NOPARITY, ODDPARITY, SPACEPARITY.

ByteSize — число информационных бит в передаваемых и принимаемых байтах.

StopBits — количество стоповых бит. Может быть ONESTOPBIT, ONE5STOPBIT, TWOSTOPBIT.

Чтобы не заполнять структуру DCB вручную, ее можно заполнить информацией о текущем состоянии порта вызовом функции GetCommState(), затем изменить необходимые поля и установить настройки вызовом функции SetCommState(). Настройку порта желательно производить сразу после его открытия. На Delphi это выглядит так:

var

Dcb: TDcb;

if not GetCommState(hPort, Dcb) then

raise Exception.Create('Error setting port state');

Dcb.BaudRate := CBR_9600;

Dcb.Parity := NOPARITY;

Dcb.ByteSize := 8;

Dcb.StopBits := ONESTOPBIT;

if not SetCommState(hPort, Dcb) then

raise Exception.Create('Error setting port state');

Еще одна операция, которая нам понадобится сразу после открытия порта — его сброс.

BOOL PurgeComm(

HANDLE hFile,

К-во Просмотров: 441
Бесплатно скачать Курсовая работа: Создание измерительного аппаратно-программного комплекса термометра на основе микроконтроллеров семьи ATMEGA