IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

> Работа с Паскалем и выходами на мат. плате(com, Usb...)
necks
сообщение 28.02.2006 19:08
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 30
Пол: Мужской

Репутация: -  0  +


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

Так вот раз подфорум теоритический, то при помощи каких функций можно осуществить обращение к портам.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
xds
сообщение 2.03.2006 15:43
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Открытие порта:
var
Port: THANDLE;
...
Port := CreateFile(
'COM1',
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
0,
0
);


Закрытие:
  CloseHandle(Port);


Установка параметров соединения: скорости передачи данных, формата фрейма и способа управления потоком данных:
var
dcb: TDCB;
...
dcb.DCBlength := SizeOf(dcb);
GetCommState(Port, dcb);
dcb.BaudRate := CBR_9600;
dcb.ByteSize := 8;
dcb.Parity := EVENPARITY;
dcb.StopBits := 2;
dcb.Flags :=
fBinary
or fParity
or fOutDsrFlow
or fOutCtsFlow
or fDtrControl * DTR_CONTROL_ENABLE
or fRtsControl * RTS_CONTROL_ENABLE;
SetCommState(Port, dcb);


Настройка тайм-аутов передачи данных:
var
ct: TCOMMTIMEOUTS;
...
ct.ReadIntervalTimeout := 1000;
ct.ReadTotalTimeoutMultiplier := 0;
ct.ReadTotalTimeoutConstant := 0;
ct.WriteTotalTimeoutMultiplier := 0;
ct.WriteTotalTimeoutConstant := 5000;
SetCommTimeouts(Port, ct);


Чтение данных (Buf - переменная - буфер, в который принимаются данные; Count - кол-во байт, которое необходимо принять; r получает кол-во принятых байт, r < Count в случае ошибки):
  WriteFile(Port, Buf, Count, r, nil);


Запись данных (Buf - переменная - буфер с данными; Count - кол-во байт в буфере; r получает кол-во переданных байт, r < Count в случае ошибки):
    WriteFile(Port, Buf, Count, r, nil);


P. S. Естественно, во всех случаях необходимо выполнять проверку на наличие ошибок ;) (все перечисленные функции, за исключением CreateFile, возвращают значения типа Boolean; CreateFile в случае ошибки возвращает значение INVALID_HANDLE_VALUE).


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"