spcomm读取单片机时会死掉 ( 积分: 10 )

  • 主题发起人 主题发起人 chinatwt
  • 开始时间 开始时间
C

chinatwt

Unregistered / Unconfirmed
GUEST, unregistred user!
我把串口线的2-3线交连,可以正常的收发数据,但与单片机连接收数据时,spcomm就会一动不动,无响应,我把Readintervaltimeout设为1也不行,有时数据发送完,spcomm又会突的接收到很多数据,并不会实时的显示出来,弄了很久了,一直不能解决,大哥们,帮帮忙!
 
虽然串口线的2-3线交连,可以正常的收发数据?也不能排除硬件问题啊,代码呢帖出来看看
 
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var subf:array[1..5000] of byte;
i:integer;
begin
i:=1;
move(buffer^,pchar(@subf)^,bufferlength);
while i<=bufferlength do
begin
if subf=254 then
begin
Series2.AddXY(series2.XValues.Last+0.03,subf[i+1]);
series1.AddXY(series1.XValues.Last+0.03,subf[i+2]);
memo1.Lines.Add(inttohex(subf[i+1]));
inc(i,3)
end;
end;
end;
这里应该没有问题吧,如果是硬件问题,会是单片机的吗?但用串口小助手能够正常接收到数据...
 
你还有其他的串口通讯设备么?有可能是单片机的响应有些慢,处理缓存的时候积压很多数据.所以到最后一下传过来这么多数据
 
没有了,不会是单片机的问题,别的软件可以正常的接收到单片机发出的数据,也许是spcomm的问题吧,不知道mscomm控件如何....
 
如果用串口调试工具都正常的话,那问题出在你的程序上了,看数据有没有发对,串口设置对不对等等。
 
只写了接收代码,可以收到数据,但就是不会实时显示数据,得把信号切断后才会一下显示在memo里.
 
你加入这句试试
while i<=bufferlength do
begin
....
Application.P*****//我忘了怎么写了,就是响应系统消息的功能
...
end;
 
你的思维方向不对,首先,你不能假定串行口每次给你的事件里一定包含一整个“帧”的数据,你应该给接收到的数据建立一个二级的缓冲区,在这个缓冲区里对数据进行帧重组的工作。
你可以参照一下我在另一个帖子里的回答:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3658327
 
多人接受答案了。
 
后退
顶部