这是一书上的例子,我也看不出有什么毛病,就是在DSP接收数据时候不能接收到正确的2进制数,但是DSP能收到别的调试软件发送的2进制数据,所以不可能是DSP软件的错误,请高手们帮忙指正啊(程序能调通,编译没有错误),或者给一个别的程序,谢谢啦
implementation
{$R *.dfm}
function hex(c:char):integer;
var
x:integer;
begin
if c='' then
x:=0
else if (ord(c)>=ord('0'))and (ord(c)<=ord('9')) then
x:=ord(c)-ord('0')
else if (ord(c)>=ord('a'))and (ord(c)<=ord('f')) then
x:=ord(c)-ord('a')+10
else if (ord(c)>=ord('A'))and (ord(c)<=ord('F')) then
x:=ord(c)-ord('A')+10
else
x:=-1;
result:=x;
end;
function hextoint(s:string):integer;
var
tmpint1,tmpint2:integer;
begin
if length(s)=1 then
begin
result:=hex(s[1]);
end
else if length(s)=2 then
begin
tmpint1:=hex(s[1]);
tmpint2:=hex(s[2]);
if (tmpint1=-1)or (tmpint2=-1) then
result:=-1
else
result:=tmpint1*16+tmpint2;
end
else
result:=-1
end;
procedure TForm1.Button3Click(Sender: TObject);
var
len:integer;
i,count,tmpint:integer;
tmpvar:variant;
tmpstr,output:string;
begin
if not mscomm1.PortOpen then
begin
showmessage('没有打开串口');
exit;
end
else begin
output:=edit2.Text;
len:=length(output);
if len>0 then
begin
i:=1;
count:=1;
tmpvar:=vararraycreate([1,1],varbyte);
while(i<len)do
begin
tmpstr:=copy(output,i,2);
tmpstr:=lowercase(tmpstr);
tmpint:=hextoint(tmpstr);
if tmpint=-1 then
begin
showmessage('发送的数据格式有问题');
exit;
end
else begin
tmpvar[count]:=tmpint;
inc(count);
vararrayredim(tmpvar,count);
end;
i:=i+3; //------这里没看明白
end;
mscomm1.Output:=tmpvar;
end;
end;
end;
end.