|
comport 接收数据会错误,大家遇到这样的问题吗?
我是用comport来读单片机里的数据然后显示在Memo上,我用sscom32串口调试助手调试单片机时数据就不会有错,用comport就有问题,能帮小弟解决一下吗?下面是接收部分的代码
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
SendDat,RecvDat:string;
i,IntPercent: Integer;
begin
SetLength(Command,Count);
Comport.Read(Command[0],Count);
case Command[0] of
00:
begin
Memo1.Lines.Append('Program Fail ! Please Check!');
AddressNumber:=0;
ProgressBar1.Position:=0;
Label1.Color:=clRed;
Label1.Caption:='E r r o r ! ';
Timer1.Enabled:=false;
Windows.Beep(784,100);
sleep(100);
Windows.Beep(784,100);
end;
// 01:
02:
begin
Memo1.Lines.Append('Programmer is Ready !');
AddressNumber:=0;
end;
03:
begin
for i:=1 to 32 do
SendDat:=SendDat+SendStr[AddressNumber*32+i];
Insert('0707',SendDat,0);
SendDat:=HexStrToStr(SendDat);
Comport.WriteStr(SendDat);
AddressNumber:=AddressNumber+1;
if AddressNumber=DownLoadSet.StopPos div 16+1 then //if the Address End
begin
sleep(50); //50ms Waiting of the Programer
Command[0]:=08; //Send Stop Command
Comport.Write(Command[0],18);
Timer1.Enabled:=false;
AddressNumber:=0;
ProgressBar1.Position:=0;
Label1.Color:=clGreen;
Label1.Caption:='OK ';
end;
end;
04:
begin
for i:=0 to 15 do
RecivBuffer[AddressNumber*16+i]:=Command[i+2];
RecvDat := IntToHex(AddressNumber*16,6)+' '+ IntToHex(RecivBuffer[AddressNumber*16+0],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+1],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+2],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+3],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+4],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+5],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+6],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+7],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+8],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+9],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+10],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+11],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+12],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+13],2)+' '+ IntToHex(RecivBuffer[AddressNumber*16+14],2)+' '+
IntToHex(RecivBuffer[AddressNumber*16+15],2);
EditHexForm.DisHexFile.Lines.Append(RecvDat);
AddressNumber:=AddressNumber+1;
Command[0]:=09;
Comport.Write(Command[0],3);
end;
// 05:
06:
begin
Memo1.Lines.Append('Earse Succssed !');
AddressNumber:=0;
Timer1.Enabled:=True;
if Command[1]=1 then
Memo1.Lines.Append('Programming Now Please Wait !');
end;
07:
begin
Memo1.Lines.Append('Program Succssed!');
Windows.Beep(784,200);
end;
// 08:
09:
Memo1.Lines.Append('Lock Succssed !');
end;
end;
////////////////////////////////////////
end. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|