spcomm串口通讯(50分)

  • 主题发起人 主题发起人 wxyjlhmpya
  • 开始时间 开始时间
W

wxyjlhmpya

Unregistered / Unconfirmed
GUEST, unregistred user!
我按如下方式发送一串整型数据给单片机
str := Pchar('111');
Count := Length(str);
Comm.WriteCommData(str, Count)
谁知道单片机接到的是什么数据?
如果这样发不对,应该怎么发送这串整型数据?
 
str := Pchar('111');
发送后单片机接收到的数据是 31H 31H 31H H代表16进制
 
我给你详细得接收例子
procedure TFrmSPComm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
StrReCeive:string;
Str1:String;
begin
SetLength(StrReCeive,BufferLength);
Move(Buffer^,Pchar(StrReceive)^,BufferLength);
Memo1.Lines.Add(StrReCeive);
Memo1.Invalidate;
if StrReCeive=#27#114#112 then
Memo1.Lines.Add('写入成功!');
str1:=Copy(StrReCeive,1,2);
if Str1=#27#115 then
Memo1.Lines.Add('读取成功!');
end;
 
发送,通常使用得是ascii码,但是也可以发送string;
系统会自动转换的。
注意一点,单片机没有那么快,最好sleep一下了。
function TDMCOMM.COMSendRead: Boolean;
var
FStr:String;
begin
FStr:=#$1B#$5D;
Sleep(5);
Result:=Comm1.WriteCommData(pchar(FStr),Length(Fstr));
end;

function TDMCOMM.COMSendWrite(WStr: String): Boolean;
var
FStr:String;
begin
FStr:=#$1b#$74+WStr+#$1d#$1b#$5c;
Sleep(5);
Result:=Comm1.WriteCommData(pchar(FStr),Length(Fstr));
end;
 
就是说不管WriteCommData后面的参数是什么类型的数据,最终WriteCommData都要将数据转换成16进制?
 
系统是怎么自动转换的
 
在系统中没有所谓的10进制和16进制它都是01组成的数据
所谓10进制和16进制...都是我们定义的协议!
下位机识别什么你就发什么!
 
我还是不明白。那我用计算机发送“abvdddd”一串字符串,在单片机那会收到什么数据
 
你使用上面代码看看知道了。
SetLength(StrReCeive,BufferLength);
Move(Buffer^,Pchar(StrReceive)^,BufferLength);
Memo1.Lines.Add(StrReCeive);
strrevcievie就是了。自己不会测?
 
多人接受答案了。
 
后退
顶部