unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, shellapi;
type
TF_SerAPI = class(TForm)
st_empf: TStaticText;
Timer1: TTimer;
Button1: TButton;
Edit1: TEdit;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
F_SerAPI : TF_SerAPI;
Cid : Integer;
Stat : PComStat; {Windowsstruktur fьr Schnittstellen}
Result : DWord;
Overlapped : TOverlapped;
DCB: TDCB;
ComTemp : PChar;
timeouts: TCommTimeouts;
implementation
{$R *.DFM}
procedure TF_SerAPI.FormCreate(Sender: TObject);
begin
ComTemp := 'COM1';
Cid := CreateFile(ComTemp,GENERIC_WRITE OR GENERIC_READ,0,nil,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
EscapeCommFunction(Cid , SETDTR); // SETRTS
DCB.BaudRate := 9600; // Baudrate [9600]
DCB.ByteSize := 8; // Anzahl der Bits/Byte, 4-8 [8]
DCB.Parity := 0; // 0-4=keine, ungerade, gerade, [keine], gesetzt oder leer
DCB.StopBits := 0; // 0,1,2 = 1, 1.5, 2 [1Stopbit]
DCB.Flags := 0; // Setzt die ЬbertragungaFlags [keine]
DCB.XonChar := #17; // Tx und Rx X-ON-Zeichen [Ascii#17]
DCB.XoffChar := #19; // Tx und Rx X-OFF-Zeichen [Ascii#19]
DCB.XonLim := 10; // X-ON-Sendeschwelle
DCB.XoffLim := 10; // X-OFF-Sendeschwelle
DCB.EofChar := #0; // Eingabe Ende-Zeichen
DCB.EvtChar := #0; // Ereignis erhalten-Zeichen
SetCommState(cid,DCB) ;
timeouts.ReadIntervalTimeout:=1;
timeouts.ReadTotalTimeoutMultiplier:=100;
timeouts.ReadTotalTimeoutConstant:=100;
timeouts.WriteTotalTimeoutMultiplier:=100;
timeouts.WriteTotalTimeoutConstant:=100;
SetCommTimeouts(Cid,timeouts) ;
end;
procedure TF_SerAPI.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseHandle(CID)
end;
procedure TF_SerAPI.Timer1Timer(Sender: TObject);
var
Input,Output:byte ; // PChar
begin
PurgeComm(Cid,PURGE_RXCLEAR) ;
ReadFile(Cid,Input,1,Result,@Overlapped);
st_empf.Caption := inttostr(Input);
GetCommState(Cid,DCB );
//GetCommMask(Cid, EV_CTS );
end;
procedure TF_SerAPI.Button1Click(Sender: TObject);
var
Output:byte ;
begin
Output:=strtointDef(edit1.text,0);
WriteFile(Cid,Output,1,Result,@Overlapped) ;
end;
end.
Редактирано от svetlin на 18.01.09 21:16.
|