发送十六进制接收数据的问题?
我发$02FF ,所接收到数据如下:
(打开串口第一次接收到的数据)
(第二次)
(第三次)
(第四次)
(...)
(...)
(...)
02FF02FF16(第N次,以十六进制显示的数据)
02FF02FF16(N+1次,16进制显示的数据)
//发送数据函数的代码
procedure TTest.SendClick(Sender: TObject);
var
FSd:string;
begin
cdata:=FSChar.Text;
hdata:=FSHex.Text;
if HexSend.Checked then //以16进制发送
begin
FSd:=hdata+cdata;
SendHex(FSd);
end else
begin
SendHex(hdata);
comm1.WriteCommData(PCHar(cdata),length(cdata));
end;
end;
//接收数据
procedure TTest.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
Data,s:string;
C:Char;
JSd:array of char;
i:integer;
begin
s:='';
if HexGet.Checked then //接收区以16进制显示
begin
setlength(JSd,BufferLength);
move(Buffer^,PChar(JSd)^,BufferLength);
for i:=0 to BufferLength do
begin
C :=JSd[i];
s:=s+inttohex(byte(C),2);
end;
JSData.Lines.Add(s);
end else
begin
setlength(Data,BufferLength);
move(Buffer^,PChar(Data)^,BufferLength);
JSData.Lines.Add(Data);
end;
end;
//发送16进制数据
procedure TTest.SendHex(s: String);
var
s2:string;
buf:array[0..50000] of byte;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))
or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2:=s2+copy(s,i,1);
end;
end;
for i:=0 to (length(s2) div 2-1) do
begin
buf[i]:=strtoint('$'+copy(s2,i*2+1,2));
comm1.WriteCommData(@buf,(length(s2) div 2));
end;
end;
帮我看看啊,如果第一次是正确的,那影响我的第二次另外发的一个数据啊,我要做握手通信啊!