关于字节转换成字符通过串口发送的问题!

liuhuan992 2009-12-18 03:04:12
各位帅哥,美女,
小弟今天:

var s:byte;

begin

s:=171;
mscomm1.output:=char(s); //通过串口按件发送数据

end;

//问题是在我通过MSCOMM进行发送数据时,为何截获是数据变成了 00 ,而不是应该出现的 AB 数据?

不知为何,特请指教,
此献上50分做为悬赏分数,谢谢!
...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuhuan992 2009-12-19
  • 打赏
  • 举报
回复
谢了各位,问题已解决,将mscomm1.InputMode := comInputModeBinary 设为此值,以二进制形式
然后具体操作如下:

var sa:array of byte;
begin
setlength(sa,2);
sa[0]:=171;
sa[1]:=181;
mscomm1.output:=sa;
end;


串口监听结果将会是 AB B5
这就解决的串口通讯发送大于128的问题了,这里谢了各位,结贴送分!
wooden954 2009-12-18
  • 打赏
  • 举报
回复
具体到楼主的例子,应该这样:
var s:Variant; //当然也可以定义为var s:OleVariant;这两种类型都可以
begin
s:=Byte(171);
mscomm1.output:=s; //通过串口按件发送数据
end;
wooden954 2009-12-18
  • 打赏
  • 举报
回复
最近发现经常使用MSComm发不了大于127的值的帖子,现纠正一下:

var s:byte;
begin
s:=171;
mscomm1.output:=char(s); //通过串口按件发送数据
end;
这种用法对于MSComm来说是错误的,因为你的S定义的是Byte类型,这样的话只能发送小于127的字节。
请各位仔细看一下MSComm的Output类型定义,它定义的是OleVariant类型,你将其它类型的数据赋值给OleVariant类型,中间编译程序会代你进行转换,但隐式转换是会出错的!这也是为什么不能发送大于127值的原因。
应该这样:

procedure TForm1.SendButtonClick(Sender: TObject);
var
Data:OleVariant;
Bytes:Array [0..255] of Byte;
i:integer;
begin
//创建Variant类型的数组,数组元素为字节类型,个数256个
Data:=VarArrayCreate([0,255],varByte);
//为每个数组元素赋值
for i:=0 to 255 do
begin
Data[i]:=i;
end;
//发送这256个字节
MSComm1.Output:=Data;
end;
发送结果可用其它的串口调试器接收,发现其值是从00到FF的值,中间任何一个值都不缺,也就是说发送是成功的
dd_zhouqian 2009-12-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuhuan992 的回复:]
大哥,mscomm1.InputMode := comInputModeBinary 是输入模式设置。


跟输出什么关系?
[/Quote]
设置成2进制输入数据的模式
liuhuan992 2009-12-18
  • 打赏
  • 举报
回复
谢谢哥们
imho888 2009-12-18
  • 打赏
  • 举报
回复
你接收的软件是你自己做的吗?
如果是的话可以到网上下一个串口接收的软件来测试一下是发送的原因还是接收的原因

如果你接收是用单片机接收,也可以先用串口接收软件调试一下看看
liuhuan992 2009-12-18
  • 打赏
  • 举报
回复
大哥,mscomm1.InputMode := comInputModeBinary 是输入模式设置。






跟输出什么关系?
dd_zhouqian 2009-12-18
  • 打赏
  • 举报
回复
mscomm1.InputMode := comInputModeText;
mscomm1.output := 'AB';

或者

mscomm1.InputMode := comInputModeBinary;
mscomm1.output := 171;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧