Посколько в Паскале новичок хотел помимо написания обычных программ научиться програмировать устроиства подключенные к портам вывода. В разделе "статьи" прочитал о програмировании мыши, и поэтому еще больше заинтересовался эти вопросом.
Так вот раз подфорум теоритический, то при помощи каких функций можно осуществить обращение к портам.
Романтик
28.02.2006 21:22
точнее можешь???
GoodWind
1.03.2006 6:56
James_Bond, вроде вполне точно сформулирован вопрос: Как в паскале работать с com, lpt и usb?
xds
1.03.2006 7:19
necks, желательно точно определиться, какой интерфейс (COM, LPT или USB) и в какой среде (DOS или Win32) ты собираешься программировать, т. к. методы программирования значительно отличаются.
necks
1.03.2006 16:45
Скорее всего буду програмировать в Win32. А вот то какой интерфейс пока не знаю, серьезно интерес к этому появился недавно, поэтому раз форум по Паскалю, значит и люди которые здесь сидят разбираются в этом, а я только новичок можно сказать. Так вот, мне бы больше теории узнать на первое время...
xds
2.03.2006 7:14
В Win32 проще всего работать с COM: - не нужно писать драйвер - используются функции файлового ввода-вывода и несколько специальных функций, т. е. работа только с Win32 API; - легко реализуется в подключаемом устройстве (если последнее необходимо изготовить самому).
necks
2.03.2006 14:09
Ну а с помощью каких функций/команд можно програмировать порт?
xds
2.03.2006 15:43
Открытие порта:
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);
Чтение данных (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).
necks
2.03.2006 21:49
Ок, большое спасибо - буду пробовать. А для usb порта есть наверняка команды?
xds
3.03.2006 10:17
Под USB-устройства обычно пишут свой драйвер.
Dr.Bugy
5.03.2006 3:01
Вот модули для работы с USB пртом, может пригодятся.
AstonClinton
16.03.2006 14:03
Народ, а литература по этому делу(работа с портами, и т.д.) есть?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.