spcomm的应用 ( 积分: 100 )

  • 主题发起人 主题发起人 atlis
  • 开始时间 开始时间
A

atlis

Unregistered / Unconfirmed
GUEST, unregistred user!
我用spcomm通讯,发送正常,在单片机内看到的值是正确的,TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);这个procedure是不是接收到一个信号就执行一次?单片机上送6次的话就执行6次?如何把接收到数据取出保存到一个数组?数组的形式如何?
 
我用spcomm通讯,发送正常,在单片机内看到的值是正确的,TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);这个procedure是不是接收到一个信号就执行一次?单片机上送6次的话就执行6次?如何把接收到数据取出保存到一个数组?数组的形式如何?
 
//接收LEN个字节
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word); //TForm1.Comm1ReceiveData,在控件的EVENT里点取!
var
i:integer;
rbuf:array [1..len] of byte; //len为字节数
begin
S2:='';
MOVE(buffer^,pchar(@rbuf)^,bufferlength);
FOR I:=1 TO len DO
S2:= S2 + inttohex(rbuf,2)+ ' '; //转为十六进制显示
MEMO1.TEXT:='接收:' + S2;
end;
 
这里你必须定义两个全局变量
var
i:integer;
DataBuff:array[6,0..MaxLen] of byte; //MaxLen 是你接受数据最大长度
在收到一次数据后
inc(i);
move(Buffer^,DataBuff,BufferLength);
这样即可,不过,一定要记得 i 的复位。
 
bufferlength的长度如何确定?多长时间触发一次接收?如果我要接收到一个byte触发接收事件,然后放到缓冲区,该如何设置?我用的是SPCOMM.谢谢。
 
后退
顶部