过来看看呀,谢谢!!!!!!!有分赚的啦!!!!!!!!
我刚刚接触串口通讯,对MSCOMM控件刚刚了解。
我模仿别人做了一个计算机两个串口之间通讯的程序,
我知道不对,可是步知道怎么修改。希望大侠们给点帮助。
程序如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, OleCtrls, MSCommLib_TLB;
type
TForm1 = class(TForm)
MSComm1: TMSComm;
Memo1: TMemo;
Memo2: TMemo;
ComboBox1: TComboBox;
Button1: TButton;
Button2: TButton;
MSComm2: TMSComm;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure MSComm2Comm(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption:='串口通讯';
MSComm1.InBufferCount:=0;
MSComm1.InputLen:=0;
MSComm1.RThreshold:=1;
MSComm1.CommPort:=1;
MSComm1.DTREnable:=true;
MSComm1.RTSEnable:=true;
MSComm1.PortOpen:=true;
MSComm1.Settings:='9600,n,8,1';
Mscomm2.Settings:='9600,n,8,1';
MSComm2.InBufferCount:=0;
MSComm2.InputLen:=0;
MSComm2.RThreshold:=1;
MSComm2.CommPort:=2;
MSComm2.DTREnable:=true;
MSComm2.RTSEnable:=true;
MSComm2.PortOpen:=true;
Memo2.text:='';
Memo1.text:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,datastr:string;
begin
s:=memo1.text;
datastr:='';
if MSComm1.PortOpen=false then
showmessage('error!')
else
begin
showmessage('ok!');
for i:=0 to (length(s) div 2)-1 do
begin
datastr:=datastr+chr(strtoint('$'+ copy(s,2*i+1,2)));//什么意思?
end;
begin
MSComm1.output:=datastr;
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if MSComm1.PortOpen=true then
begin
MSComm1.PortOpen:=false;
Mscomm2.PortOpen:=false;
close();
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if MSComm1.PortOpen=true then
MSComm1.PortOpen:=false;
Mscomm1.PortOpen:=false;
end;
procedure TForm1.MSComm2Comm(Sender: TObject);
var
recstr:string;
strtemp:string;
i:integer;
begin
if Mscomm2.CommEvent=comEvReceive then
begin
sleep(350);
recstr:=Mscomm1.input;
strtemp:='';
for i:=1 to length(recstr) do
strtemp:=strtemp+inttohex(ord(recstr[i]),2);
memo2.text:=memo2.text+strtemp;
end;
end;
end.
现在问题如下:
我不知道这样是否能实现com1和com2的通讯?运行时发现接收的Memo框中根本就没有接收到信息。
单步执行时,下面的一段根本就没有执行。
procedure TForm1.MSComm2Comm(Sender: TObject);
var
recstr:string;
strtemp:string;
i:integer;
begin
if Mscomm2.CommEvent=comEvReceive then
begin
sleep(350);
recstr:=Mscomm1.input;
strtemp:='';
for i:=1 to length(recstr) do
strtemp:=strtemp+inttohex(ord(recstr[i]),2);
memo2.text:=memo2.text+strtemp;
end;
我是新手,不太了解串口通讯。
希望大家能帮助我一下。如何实现计算机两个串口之间的通讯?(用MSCOMM控件)
给点思路也可以。如有源程序,请发送至:speedaway@21cn.com
十分感谢各位的帮助。