RS232编程:
RS232共有9支脚位,其第4脚DTR与第7脚RTS由计算机控制作为交握之用, 因此可以控制4脚和7脚的电压状态。
另外,RS232的第5脚是接地之用,因此可用DTR或RTS与GND产生电位差。
经测试,DTR与RTS与GND间的电压为正负9伏,电压足以驱动发光二极管,电流在4-20mA之间,不会把发光二极管烧坏。
在mscomm控件中可以通过设置DTREnable和RTSEnable控制DTR和RTS的电位。当他们的值为True时,为高电平。反之,低电平。
另外mscomm中可以通过CDHolding(DCD脚位电位)、CTSHolding(CTS脚位电位)、DSRHolding(DSR脚位电位),当他们的值为True时,为高电平。反之,低电平。
另外OnComm事件中当CommEvent值
等于ComEvCD,表示DCD脚位电位发生变化
等于ComEvCTS,表示CTS脚位电位发生变化
等于ComEvDSR,表示DSR脚位电位发生变化
等于ComEvRing,表示RI脚位电位发生变化
delphi中的SPCOMM不支持DTREnable和RTSEnable
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;
以上是我整理的一些资料