我在串口通讯时,想要以16进制传输,该如何做呢(50分)

  • 主题发起人 主题发起人 mylovegirl
  • 开始时间 开始时间
M

mylovegirl

Unregistered / Unconfirmed
GUEST, unregistred user!
我在串口通讯时,想要以16进制传输,该如何做呢,我用的是CPORTLIB控件
各位给献献招了
 
就是二进制,读的时候按十六进制读就行了
 
按16进制读的话,读出来的是ASCII值,像要传输‘FF’读到的是ASCII‘66’
我的接受端是单片机,所以我想接受到的是16进制的值,而不是ASCII的值
 
只要不按字符串发送就可以了,可以用byte数组或流。
buf: array[0..1023]of byte;
buf[0] := $FF;
...
 
能具体点吗
 
不行好,大侠,帮帮忙了
 
Up -> zw84611
 
可是类型不一致啊,BYTE和STRING怎么能
CPORT1。OUTPUT:=BUF[0];???????/
 
传输的时候都是二进制,接收到的也都是二进制,不过是人为的把它当成字符.
我曾经用过一个控件,发送的时候是发送string,如果发送chr(127)后接着发送
大于127的chr(200)的时候就,读到的数据就不正确,还不如自己写的程序。
 
虽然是人为的人为,二进制不假,但还可以ASCII表示啊,COPORT控件发出的就是ASCII值
单片机接受的是ASCII制,它又没PC的机制怎么知道是什么值啊
 
小孩子真是不懂事
比如单片机接受的是00H 11H 22H 33H
那么就
CPORT1.OUTPUT:=chr(hextodec('00')+chr(hextodec('11')+chr(hextodec('22'))+chr(hextodec('33'));
用数组什么的类推
for i:=0 to buflength-1 do
tmpstring:=tmpstring+chr(hextodec(buf));
CPORT1.OUTPUT:=tmpstring;

function hextodec(hex:string):integer;
begin
result:=strtoint('$'+hex);
end;
 
我知道,是这样
var
iCount:integer;
Data_buff:array[0..$9FF] of char;
begin
Data_Buff[1]:= char($00);
Comport.write(Data_Buff,icount);
end;
 
在串口发送数据时都是以二进制发送的,而且在PC中用API进行串口读写时都时一个字符一个字符
的读写的,也就是Char,在Delphi中Char和Byte都是一种8位数据,
比如你要发送FF这一个8位的十六进制数,
应该如下转换Char($FF)再发送
以下是我写电力部CDT规约时所用的同步字,发送下去的就是
EB90EB90EB90六个Byte的十六进制数
StrSyn=chr($Eb)+chr($90)+Chr($Eb)+Chr($90)+Chr($Eb)+Chr($90);
 
干脆用个指针来搞定它得了,
type
TByteAry = array [0..0] of Byte;
PByteAry = ^TByteAry;
var
S: String;
P: PByteAry;
begin
SetLength(S, ByteCount);
P:= @S[1];
P^[0]:= ...
P^[1]:= ...
...
ComPort.Output:= S;
end;
 
再问一下,如何延时字符间的发送时间间隔
 

Similar threads

回复
0
查看
848
不得闲
D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
后退
顶部