![]() |
| ||
|
|
Новости |
Поиск |
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В.)?
dr Tr0jan (2004-12-07 15:27:00) [21]COM же вроде используется для PICов.
Для справки: PIC - Programmable Interrupt Controller
Cosinus (2004-12-07 14:39:00) [22]1) Выставлять уровни на всевозможные сигнальные линии (а-ля DTR/DTS/... и тд)
2) Кончать заниматься фигней и лопатить светоИдиодные устройства на LPT.