类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
我现在用mscomm控件写串口通讯程序,mscomm的setting为9600,n,8,1。
以byte数组发送,代码为
mscomm1.output:=buffer1; //buffer1是一个已经赋好值的array of byte
如上写发送没有问题,单片机也能正确接受到16进制数据。
以byte数组接收,代码为
buffer2:=mscomm1.input; //buffer2是定义好的array of byte
如上写接收的时候会出现Invalid argument错误,我看书上这样都是这样写的,为什么我会错呢???
若写为 str:=mscomm1.input; //str是一个string ,就不会出错了。但是这样我收到的不是发送的16进制数据,而是16进制已经转成字符的一个字符串。即正确接收应该是3031的,就是接收01。
上面的问题应该怎么解决啊?正确的应该如何写?各位帮帮忙,急啊!!!
网友回答:
var vTmp: Variant;
ovtmp: oleVariant;
i, iReceived: Integer;
buffer2: array[0..127] of byte;
begin
fMSComm.InputMode := comInPutModeBinary;
Sleep(20);
iReceived := fMSComm.InBufferCount;
ovtmp := fMSComm.Input;
vTmp := VarArrayCreate([0,127],varByte);
vTmp := ovtmp;
for i := 0 to iReceived - 1 do
begin
bTmp := vTmp[i];
buffer2 := bTmp;
end;
end;