![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с портами в Делфи [D5, D7, Win95/98, WinME, NT4, WinXP]
mr_alexandr © (2004-10-28 21:21:00)Люди. ПОМОГИТЕЕЕ(очень надо). Как в Делфи обратифшись к порту (COM, LPT, GAME) ,предположим, заставить гореть светодиод подключенный к определенным выходам.
Гость (2004-11-17 04:51:00) [1]Com Port Visual Control 1.1
Программа предназначена для визуального контроля, документирования и исследования процессов, происходящих в приёмопередатчике UART во время работы приложений использующих СОМ порт персонального компьютера. Работает в среде Windows 9x/ME/NT/2000/XP и имеет следующие возможности:
1. Постоянный мониторинг всех восьми регистров микросхемы UART : базового, разрешения прерываний, запроса прерываний, формата данных, управления модемом, состояния приёмопередатчика, состояния модема, сверхоперативной памяти. Контроллер имеет формат 8 x 8 - восемь регистров по восемь бит, при этом независимо для каждого регистра отображается: состояние значений в байт (0-255) и HEX ($00-$FF) одновременно, и логическое состояние (1/0) бит 0-7 (1-2-4-8-16-32-64-128).
2. Запись в регистры значений в форматах HEX и байт, управление логическим (1/0) состоянием бит, соответственно.
3. Отслеживание изменений в регистрах и ведение LOGa согласно командам приёмопередатчика UART.
4. Ведение LOGa принятых и переданных данных на уровне машинных кодов (HEX, байт, состояние бит).
5. Просмотр и сохранение LOG файлов, поиск.
6. Имеется встроенный приёмопередатчик для стандартной настройки режимов порта:
биты данных, стоповые биты, скорость, чётность, контроль ошибок, возможность приёма и передачи текстовых данных и команд модема.
7. Индикатор контроля активного состояния команд UART (17 основных команд).
8. Возможность контроля любого порта компьютера, с одновременным отображением
группы регистров и бит, где нулевой регистр - базовый, остальные + 1…+7, соответственно. Ведение LOGa данных базового регистра.
Freeware
http://valery-us4leh.narod.ru/ComVC.html
http://valery-us4leh.narod.ru/ComVC.jpg
http://valery-us4leh.narod.ru/ComVC.zip
mr_alexandr (2004-11-01 07:49:00) [2]А com-порт выдержит присоединенную к нему реле. (не згорит)
GanibalLector (2004-10-30 13:09:00) [3]
function LStr(const Source:Ansistring;Count:Integer):Ansistring;
begin
Result:=Copy(Source,1,Count);
end;
function OpenComm(Mode:AnsiString):THandle;
var
DCB : TDCB;
TOut: TCommTimeouts;
I:Integer;
Bfr:AnsiString;
begin
Bfr:=Mode;
UniqueString(Bfr);
I:=Pos(':',Bfr)-1;
if I<=0 then I:=4;
Result := CreateFile(PChar(LStr(Bfr,I)),GENERIC_READ or GENERIC_WRITE,
0,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
GetCommState( Result, DCB) ;
BuildCommDCB(PChar(Bfr),DCB);
DCB.EvtChar := #13;
SetCommState( Result, DCB) ;
//
TOut.ReadIntervalTimeout := MAXDWORD;
TOut.ReadTotalTimeoutMultiplier := 0;
TOut.ReadTotalTimeoutConstant := 0;
TOut.WriteTotalTimeoutMultiplier := 0;
TOut.WriteTotalTimeoutConstant := 0;
SetCommTimeOuts( Result, TOut);
SetCommMask(Result,EV_RLSD OR EV_RXFLAG);
PurgeComm(Result,PURGE_TXCLEAR); //clear transmit buffer
PurgeComm(Result,PURGE_RXCLEAR); //clear receive buffer
end;
function CloseComm(Handle:THandle):boolean;
begin
CloseHandle(Handle);
result:=true;
end;
Работать так :
Handle:=OpenComm('COM2:BAUD=19200 PARITY=N DATA=8 STOP=1');// хотя скорость и пр.тебе не нужны
if Handle=INVALID_HANDLE_VALUE then begin result:=false;exit;end;
escapecommfunction(Handle,SETDTR); // горит
sleep(1000);
escapecommfunction(Handle,CLRDTR); //не горит
closecomm(Handle);
mr_alexandr (2004-10-30 12:10:00) [4]Ну а чтобы совсем показаться тупым, спрошу еще: дайте кто-нибудь процедурки открытия, закрытия порта и т.п.
GEN++ (2004-10-30 00:47:00) [5]>второй провод соединять с GND (5)?
"-" светодиода к ножке порта
"+" светодиода через резистор 360 Ом к "+5В"
jack128 (2004-10-29 21:24:00) [6]mr_alexandr © (29.10.04 20:37) [9]
не помешало бы
mr_alexandr (2004-10-29 20:37:00) [7]А вот еще тупой вопрос. На com-порту один если один выход это DTR (4), то второй провод соединять с GND (5)?
mr_alexandr (2004-10-29 20:34:00) [8]СПАСИБО всем, попробую. А ВОТ МОЖНО-ЛИ ТОЖЕ САМОЕ ПРОДЕЛАТЬ С GAME-ПОРТОМ.
GanibalLector (2004-10-29 18:45:00) [9]Вы что сговорились??? Какие WinIO и зачем их искать???Самое простое и надежное решение приведено в [2].Куда еще проще?
pavel_guzhanov (2004-10-29 16:30:00) [10]вот только ответить смогу не раньше понедельника: Что поделать, выходные....
pavel_guzhanov (2004-10-29 16:29:00) [11]Правильно, WinIO работает под всеми виндами, только надо самому написать файл объявлений функций на delphi, по крайней мере в той версии, которой я пользовался, было все только под С++. Если интересно, пиши на мыло, пришлб и WinIO, и паскалевский файл, и небольшой примерчик с пояснениями. Кстати, не знаю, хватит ли мощности порту, чтобы зажечь светодиод. Я паял промежуточную схемку...
Маг Похмеляйнен (2004-10-29 12:18:00) [12]Ничего не надо писАть, всё уже написано.
Ищите DlPortIo и WinIo через Гоголя и Яндекса.
То, что поможет вам.
Klopan (2004-10-29 11:32:00) [13]вот под win9x
function getport(p:word):byte; stdcall;
begin
asm
push edx
push eax
mov dx,p
in al,dx
mov @result,al
pop eax
pop edx
end;
end;
Procedure Setport(p:word;b:byte);Stdcall;
begin
asm
push edx
push eax
mov dx,p
mov al,b
out dx,al
pop eax
pop edx
end;
end;
для winnt нужно писать драйвер
http://valery-us4leh.narod.ru/XpCoding/XPlpt.html
GanibalLector (2004-10-29 01:04:00) [14]2 Alein
Что за бред?
2 mr_alexandr
Вот,как надо :
escapecommfunction(commhandle,SETDTR); // горит
escapecommfunction(commhandle,CLRDTR); //не горит
Не забудьте предварительно открыть порт и закрыть тоже надо...
>предположим, заставить гореть светодиод подключенный к определенным выходам
На вывод DTR! Не забывайте,что это черевато выходом порта из строя...ибо предварительно нужно все расчитать(напряжения типа...)
Alein (2004-10-28 21:37:00) [15]На Дельфи не нашёл, лови на С
main()
{
int data;
scanf("%d",&data);
outportb(0x378,data);
printf("Посылаем в порт число %d ",data);
}