![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Контакты COM-порта... [D5, D7, Win95/98, WinXP]
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-ом...и резистор не забудь.