Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
ВнизРабота с портами в Делфи Найти похожие ветки
← →
mr_alexandr © (2004-10-28 21:21) [0]Люди. ПОМОГИТЕЕЕ (очень надо). Как в Делфи обратифшись к порту (COM, LPT, GAME) ,предположим, заставить гореть светодиод подключенный к определенным выходам.
← →
Alein © (2004-10-28 21:37) [1]На Дельфи не нашёл, лови на С
main()
{
int data;
scanf("%d",&data);
outportb(0x378,data);
printf("Посылаем в порт число %d ",data);
}
← →
GanibalLector © (2004-10-29 01:04) [2]2 Alein
Что за бред?
2 mr_alexandr
Вот,как надо :
escapecommfunction(commhandle,SETDTR); // горит
escapecommfunction(commhandle,CLRDTR); //не горит
Не забудьте предварительно открыть порт и закрыть тоже надо...
>предположим, заставить гореть светодиод подключенный к определенным выходам
На вывод DTR! Не забывайте,что это черевато выходом порта из строя...ибо предварительно нужно все расчитать(напряжения типа...)
← →
Klopan © (2004-10-29 11:32) [3]вот под 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
← →
Маг Похмеляйнен (2004-10-29 12:18) [4]Ничего не надо писАть, всё уже написано.
Ищите DlPortIo и WinIo через Гоголя и Яндекса.
То, что поможет вам.
← →
pavel_guzhanov (2004-10-29 16:29) [5]Правильно, WinIO работает под всеми виндами, только надо самому написать файл объявлений функций на delphi, по крайней мере в той версии, которой я пользовался, было все только под С++. Если интересно, пиши на мыло, пришлб и WinIO, и паскалевский файл, и небольшой примерчик с пояснениями. Кстати, не знаю, хватит ли мощности порту, чтобы зажечь светодиод. Я паял промежуточную схемку...
← →
pavel_guzhanov (2004-10-29 16:30) [6]вот только ответить смогу не раньше понедельника: Что поделать, выходные....
← →
GanibalLector © (2004-10-29 18:45) [7]Вы что сговорились??? Какие WinIO и зачем их искать???Самое простое и надежное решение приведено в [2].Куда еще проще?
← →
mr_alexandr © (2004-10-29 20:34) [8]СПАСИБО всем, попробую. А ВОТ МОЖНО-ЛИ ТОЖЕ САМОЕ ПРОДЕЛАТЬ С GAME-ПОРТОМ.
← →
mr_alexandr © (2004-10-29 20:37) [9]А вот еще тупой вопрос. На com-порту один если один выход это DTR (4), то второй провод соединять с GND (5)?
← →
jack128 © (2004-10-29 21:24) [10]mr_alexandr © (29.10.04 20:37) [9]
не помешало бы
← →
GEN++ © (2004-10-30 00:47) [11]>второй провод соединять с GND (5)?
"-" светодиода к ножке порта
"+" светодиода через резистор 360 Ом к "+5В"
← →
mr_alexandr © (2004-10-30 12:10) [12]Ну а чтобы совсем показаться тупым, спрошу еще: дайте кто-нибудь процедурки открытия, закрытия порта и т.п.
← →
GanibalLector © (2004-10-30 13:09) [13]
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-11-01 07:49) [14]А com-порт выдержит присоединенную к нему реле. (не згорит)
← →
Гость (2004-11-17 04:51) [15]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
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2005.01.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c