Установить флаг DTR и RTS в активное состояние для определённого COM-порта
Автор: Slava V
После открытия com-порта через CreateFile() необходимо с помощью
GetCommState() и SetCommState() установить параметры порта (в частности
убрать автоуправление RTS и DTR). Затем для установки соответствующих
сигналов используется функция EscapeCommFunction().
Procedure ControlRTS;
Var
S: String;
lDCB: TDCB;
fHandle: THandle;
Begin
S:='COM1';
// open port
fHandle:=CreateFile( Pchar(S), GENERIC_READ Or GENERIC_WRITE, 0,
Nil, OPEN_EXISTING, 0, 0);
If fHandle=INVALID_HANDLE_VALUE Then
Begin
// can't open....
Exit;
End;
// read settings
If Not GetCommState( fHandle, lDCB) Then
Begin
// can't read
Exit;
End;
// Fill dcb
lDCB.BaudRate:=CBR_2400;
lDCB.ByteSize:=8;
lDCB.Parity:=NOPARITY;
lDCB.StopBits:=ONESTOPBIT;
// !!! we will manage RTS ourself !!!
ldcb.Flags:=(ldcb.Flags And $FFFFC0FF) Or $00000100;
// set comm state
SetCommState( fHandle, ldcb);
// Here we can manage
// Reset RTS
EscapeCommFunction( fHandle, CLRRTS);
// Set RTS
EscapeCommFunction( fHandle, SETRTS);
// Close port
CloseHandle(fHandle);
fHandle:=0;
End;
|
P.S. Надо заметить, что все выходы com-порта являются инверсными. А это
значит, что активным сосотоянием порта является 0, а неактивным 1.
|