请问串口接受数据丢数的问题?(50分)

  • 主题发起人 主题发起人 dreamya
  • 开始时间 开始时间
D

dreamya

Unregistered / Unconfirmed
GUEST, unregistred user!
请问我这个程序在接受单片机的信息是总是丢数,我发的是010203040506070809但受到
的只有01020304,我的rthreshold=18或1都不能成功接受,谢谢,哪儿有问题?
procedure TForm1.MSComm1Comm(Sender: TObject);
var rsub:olevariant;
begin
if MScomm1.Commevent=2 then
begin
rsub:=MScomm1.Input;
MScomm1.PortOpen:=false;
memo1.Text:=rsub;
end;

procedure TForm1.Button1Click(Sender: TObject);
var buff:olevariant;
begin
MScomm1.PortOpen:=true;
MScomm1.Output:='010203040506070809';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
MScomm1.InBufferCount:=0;
MScomm1.InputLen:=0;
end;

 
我在用spcomm的时候也出现过这个问题,
好象是spcomm串口收到事件促发触发时还未完成接收
mscomm我没用过MSComm1Comm是不是串口接收事件?应该是差不多吧
 
如果你用PC机模拟单片机的话,发送的时候应加一点延时,或空循环语句。
可以与你讨论这问题,Email:zhigangguan@163.net
 
sleep一下
 
一个很初级的错误!
每当有数据重串行口输入时,TForm1.MSComm1Comm 就触发了,但这不意味着收完!
var
CommBuf2: String;
procedure TForm1.MSComm1Comm(Sender: TObject);
var
rsub:olevariant;
begin
if MScomm1.Commevent=2 then begin
rsub:=MScomm1.Input;
CommBuf2:= CommBuf2 + rsub;
if Length(CommBuf2) >= Length('010203040506070809') then begin
MScomm1.PortOpen:=false;
memo1.Text:= CommBuf2;
end;
end;
end;
 
后退
顶部