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

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

Контакты COM-порта... [D5, D7, Win95/98, WinXP]


Страницы:   1 2

maxistent ©   (2004-12-07 13:33:00) 

Дарова, уважаемые! Как "послать" в COM-порт на опред. контакт "+"?
("-" на ножке порта, "+" - только на двух из 15 контактов, остальные="-").
___________
\o o o + o/
\+ o o o/
 -------
У меня к COM1 подключен светодиод. В результате светодиод загорается на время, потом гаснет.
Я делаю так:

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);
  PurgeComm(Result,PURGE_RXCLEAR);
end;

function CloseComm(Handle:THandle):boolean;
begin
CloseHandle(Handle);
result:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
handle:integer;
begin
Handle:=OpenComm('COM1:BAUD=19200 PARITY=N DATA=8 STOP=1');
if Handle<>INVALID_HANDLE_VALUE then
begin
escapecommfunction(Handle,SETDTR);
sleep(5000);
escapecommfunction(Handle,CLRDTR);
closecomm(Handle);
end
else
Application.MessageBox('Ошибка','',0);
end;


И ещё: как сделать, чтобы прога могла "ЗНАТЬ", на какой контакт COM-порта какое напряжение подаётся (<=5В.)?


GanibalLector   (2004-12-08 11:41:00) [1]

Сначаkf ты спрашиваешь одно,потом другое...все как-то не связано...хрен поймешь,что тебе надо.
И еще...внимательно читай [19]


maxistent   (2004-12-08 11:32:00) [2]

что, никто не знает, как это сделать? или это действительно невозможно? Вообще, мне нужно отправить туда (в COM) строку с текстом... как это сделать?


maxistent   (2004-12-08 10:50:00) [3]

а тогда остальные накой !...! нужны?!


Германн   (2004-12-08 04:24:00) [4]

2 maxistent ©
"НА ОПРЕДЕЛЁННЫЕ КОНТАКТЫ" вывести не сможешь. Сможешь только на вывод DTR или вывод RTS.


maxistent   (2004-12-08 04:16:00) [5]

э-э-э.. пардон...


maxistent   (2004-12-08 04:14:00) [6]

Нет, вы не поняли! Мне же надо НА ОПРЕДЕЛЁННЫЕ КОНТАКТЫ ВЫВЕСТИ "+"!!! потом отключить... это возможно? может примерчик найдётся?..


maxistent   (2004-12-08 04:14:00) [7]

Нет, вы не поняли! Мне же надо НА ОПРЕДЕЛЁННЫЙ КОНТАКТ ВЫВЕСТИ "+"!!! потом отключить... это возможно? может примерчик найдётся?..


maxistent   (2004-12-08 04:13:00) [8]

Не, братва! так не пойдёт! Мне же надо НА ОПРЕДЕЛЁННЫЙ КОНТАКТ ВЫВЕСТИ "+"!!! потом отключить... это возможно? может примерчик найдётся?..


GanibalLector   (2004-12-08 02:04:00) [9]

2 GuAV ©    [13]

> А что так даже яркость меняется: 01, 11, 13, ... FF :-)

Да,уж...настоящая светомузыка ;)
Автору ветки должно понравиЦа!


GuAV   (2004-12-08 01:54:00) [10]

GanibalLector ©   (08.12.04 1:51) [10]
З.Ы.Надо попробовать ;)


А что так даже яркость меняется: 01, 11, 13, ... FF :-)


GuAV   (2004-12-08 01:53:00) [11]

GanibalLector ©   (08.12.04 1:51) [10]

Не дал даже успеть исправить ошбку .. :)


GuAV   (2004-12-08 01:52:00) [12]

Хотя... TXD передаёт биты, а не держит уровень...


GanibalLector   (2004-12-08 01:51:00) [13]


> Или уже по правильному через TXD

А это тут причем?Не понял???Или ты собрался передавать FF на минимальной скорости???Оригинально!
З.Ы.Надо попробовать ;)


GuAV   (2004-12-08 01:48:00) [14]

Или уже по правильному через TXD


GanibalLector   (2004-12-08 01:48:00) [15]

2 GuAV ©    [6]
И еще...я в основном работаю с переферией...так вот,ОБЫЧНО управляют ДТР-ом,а "питание" создают РТС-ом.
З.Ы. Такое примерно в 90% случаях.


GanibalLector   (2004-12-08 01:46:00) [16]


> WinLIRC работает с RTS как с выходом (выдаёт + для
> питания) и DCD как с входом.

Согласен,но !!! посмотри [0]...там есть что-то типа :
escapecommfunction(Handle,SETDTR);


GuAV   (2004-12-08 01:44:00) [17]

GanibalLector ©   (08.12.04 1:34) [5]
Нет!Именно DTR-ом!!!


WinLIRC работает с RTS как с выходом (выдаёт + для питания) и DCD как с входом. До запуска WinLIRC на RTS -. Поэтому IMHO с RTS мона работать.


GanibalLector   (2004-12-08 01:34:00) [18]


> или RTS

Нет!Именно DTR-ом!!!


> Хе я закорачивал COM порт. И ничего, цел остался, даже
> диод мигал как надо :)

Ну,зря ты так...у меня на работе один комп валяется...доигрались.


GuAV   (2004-12-08 01:29:00) [19]

GanibalLector ©   (08.12.04 1:23) [3]
и резистор не забудь.


Хе я закорачивал COM порт. И ничего, цел остался, даже диод мигал как надо :)
GanibalLector ©   (08.12.04 1:23) [3]
зажигай\гаси DTR-ом...

или RTS


GanibalLector   (2004-12-08 01:23:00) [20]

Что-то я не понял,что тебе надо.Ну да ладно...Во первых свой светодиод ты ОБЯЗАН одной ногой повесить на 5 вывод порта(это минус),а потом уже зажигай\гаси DTR-ом...и резистор не забудь.


Страницы:   1 2

Наверх

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