100分问一个关于串口通讯的小问题,不够的话不可以加的。谢谢了。(100分)

  • 主题发起人 主题发起人 笨波
  • 开始时间 开始时间

笨波

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写了一段串口通信程序,可发送数据过程中发现发送的数据是一段一段发送,最后一条
才是我想发送的数据。 如:发送:FEFE123456,通过串口检测器,发现发送的是这样的数据:00,00FE,00FEFE。。。最后是FEFE123456不知为什么。我用的是MSCOMM。
如何更改可以让它直接发送完整的数据的。
原程序如下:
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Caption:=' 笨波' ;
MSComm1.InBufferCount:=0;
MSComm1.InputLen:=0;
MSComm1.RThreshold:=1;
MSComm1.Settings:='1200,e,8,1';
//,n,"(无校验)或",o,"(奇校验)或",e,"(偶校验)
//,m,"(校验位恒定为1)!
//,s,"(校验位恒定为0)!
MSComm1.CommPort:=1;
MSComm1.DTREnable:=true;
MSComm1.RTSEnable:=true;
MSComm1.PortOpen:=true;
Memo2.text:='';
Memo1.text:='';
ComboBox1.text:='1200,e,8,1';
ComboBox1.Items.Insert(0,'1200,e,8,1');
ComboBox1.Items.Insert(1,'2400,e,8,1');
ComboBox1.Items.Insert(2,'4800,e,8,1');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
s,datastr:string;
begin
s:=memo1.text;
for i:=0 to (length(s) div 2)-1do
begin
datastr:=datastr+chr(strtoint('$'+copy(s,i*2+1,2)));//十六进制发送;
MSComm1.Settings:=ComboBox1.text;
MSComm1.Output:=datastr;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if MSComm1.PortOpen=true then
MSComm1.PortOpen:=false;
close();
end;

procedure TForm1.MSComm1Comm(Sender: TObject);
var
recstr:Olevariant;
begin
MSComm1.Settings:=ComboBox1.text;
if Mscomm1.CommEvent=comEvReceive then
begin
recstr:=MSComm1.Input;
Memo2.text:=Memo2.text+recstr;
end;

end;
procedure TForm1.Formdestroy(Sender: TObject);
begin
if MSComm1.PortOpen=true then
MSComm1.PortOpen:=false;
end;

end.

'Text2.Text = Hex$(Asc(Text2.Text)) '(接收到的字符还原为16进制数据)这是在VB里的用法,
在DELPHI中如何将ASCII还原为十六进制的。
 
to:kucio
可以帮我解答吗?
 
是循环时出了问题了,
MSComm1.Settings:=ComboBox1.text;
MSComm1.Output:=datastr;
应放在循环外面。
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
645
import
I
后退
顶部