Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с портами в Делфи [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);
}


Наверх

Титульная страница Поиск, карта сайта Написать письмо