急!!Spcomm自定义握手(定时)求助!(200分)

  • 主题发起人 主题发起人 felong11
  • 开始时间 开始时间
F

felong11

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟在做一个程序,其中用到了串口通信。是pc跟单片机的通信,其中有自定义的数据命令
比如
握手信号:
我发给单片机
$55
单片机在发给我$AA,pc再发$AA到单片机作为确认。
命令:
我发给单片机 $00,$01
单片机发给我
$AC,$01,……………………
我发觉在主程序里面调用以下函数的时候
不能发觉到串口缓冲区起了变化,也就是在我的函数之后才去收数据,而不是按照我想的
那样通过application.postmassages使得串口接受数据。
我想请问一下怎么去解决这个问题?
也就是怎么在我发出命令之后隔一段时间我再检查串口的状态呢?
我是使用spcomm的。请大虾们解答!!


function TFormMain.ShakeHand:boolean;
var i:integer;
SendByte:byte;
begin
result:=false;
SendByte:=WANT_CONNECT;
for i:=0 to 2 do
begin
Comm1.WriteCommData(@SendByte,1);
sleep(200);
//设备送握手回应
if rbuf[0]=ACK_CONNECT then
begin
FLAG_SHAKEHAND:=true;
end;

if FLAG_SHAKEHAND then
begin
result:=true;
comm1.WriteCommData(pchar(ACK_CONNECT),1);
break;
end;
end;
end;

 
用硬件握手比较好,不占用系统资源
 
我除了握手之外还有其他的协议 的。
而且硬件已经做好不能改的。就三根线。
 
没看明白你的意思
 
我的意思是我怎么样才能知道串口来了特定的信息。
我现在就是设了一点标志的变量,然后在onrecievedata里面判断送过来的
数据(回应)如果是以特定的数值开头的就把某个量置true;
我在主程序里面察看这些标志变量。如果这些变量为true就…………
其中握手的代码已经贴上。
这样我本来的想法是在sleep以后串口的数据就会就绪,但是发觉不行。只是全部的监测的循环
完了之后才去读串口。
我想请问怎么去查询这个串口。
 
问题已解决,用timer,斑竹能不能帮我把分数拿回来??
 
什么不会?
 
多人接受答案了。
 
后退
顶部