51串口发送字符串数据的形式:字符串和十六进制发送的区别

查看: 3946|回复: 16
求助怎么通过串口发16进制数据
请问高手,串口是不是只能传字符,而不能传数字格式的数据啊?能告诉我怎么样把{0x3c,0x6e,0x79,0x96,0,0,0,0x47}通过串口一次传出去?
初次学习,叩求高手解答!
&lt&当收到0x0A的时候,它就不接受后面的数据了,在string里面显示不了后面的数据了,在config中设置禁用0x0A即&\n&&/P&
&lt&安楼上的 做& &&&利用build array 创建数组,ByteArray to string,当然另外可以使用Type cast&/P&
&lt&利用build array 创建数组,ByteArray to string,当然另外可以使用Type cast&/P&
&lt&那是不可能的,你留下 e-mail,我给你我做的例子&/P&
&lt&哈哈,太谢谢楼上的&STRONG&&FONT face=Verdana color=#61b713&edongxu,&/FONT&&/STRONG&谢谢,也谢谢&STRONG&&FONT face=Verdana color=#da2549&wdyjz&/FONT&&/STRONG&&/P&
&lt&我的email:&/P&
&lt&先谢了!!!&/P&
&lt&------当收到0x0A的时候,它就不接受后面的数据了,在string里面显示不了后面的数据了,在config中设置禁用0x0A即&\n&
&lt&安楼上的 做& &&&利用build array 创建数组,ByteArray to string,当然另外可以使用Type cast
&lt&晕,我还没有找到config的位置,在哪设置,我本是初学,在help里面找了半天还是没有找到,能详细点告诉我么,非常感谢!!![em01][em01]&/P&
先变字符,发送,再把字符变回来
&lt&谢谢&STRONG&&FONT face=Verdana color=#61b713&edongxu的答复!&/FONT&&/STRONG&&/P&
&lt&&STRONG&&FONT face=Verdana color=#61b713&但是字符,下位的单片机程序可能不认识字符哦,它只认识16进制的数据哦,我也不希望再更改单片机的程序了.我看书上说的都是ASCII的,不知道发到串口的是不是真正的16进制的数据?&/FONT&&/STRONG&&/P&[em04]
&lt&不是那个意思,把0x3c变成3c两个字符,而是把0x3c用一个字符表示,就像0x41用A表示一样,大于127用扩展码&/P&
&lt&嗯,兄弟,你可以直接右击这个字符输入框,就是write buffer,然后选择hex display,然后输入你的十六进制,比如0X13,就直接输入13,这样就行了,比如要发0X15,0X16,则你只需要输入15 16就可以了,详细如果要知道一些做成示波器的,可以看这里,我们用串口做了一个示波器,这本书有下载的,下载链接在图片上方:&/P&
&lt&&a href=&/old_bbs/dispbbs.asp?boardID=4&ID=14252&page=1& target=&_blank& &/old_bbs/dispbbs.asp?boardID=4&ID=14252&page=1&/A&&/P&
&lt&先谢谢&STRONG&&FONT face=Verdana color=#61b713&edongxu兄弟,他说的这个方法也可以的,我也试了试,但是比较的麻烦;&/FONT&&/STRONG&&/P&
&lt&&STRONG&&FONT face=Verdana color=#61b713&cpubbs兄弟说的我也试过,但是现在还没有到台子上面去调,只是自发自收,把输望write buffer的string control的设为所说的,在read buffer后接个sring indicator,都能够收发自如,但是我还有一点很怀疑的就是,送到write buffer里面的是16进制的数据么?&/FONT&&/STRONG&&/P&
&lt&&STRONG&&FONT face=Verdana color=#61b713&这个论坛里面的人太好了,大家要多多支持哦,互相进步&/FONT&&/STRONG&&/P&
这时候送过去的其实还是STRING,只是为了直观显示而已,其实串口是ASCII发送的!
&lt&谢谢楼主兄弟&/P&
&lt&现在我又碰到个奇怪的问题,就是串口收数据的时候,当收到0x0A的时候,它就不接受后面的数据了,在string里面显示不了后面的数据了,不知道为什么,是不是0A是个什么特别的字符(在ASCII中是&LF&)啊,有特殊的用处?&/P&
&lt&找到了,可以去掉termination char了,谢谢各位,其他的都是简单问题的,我自己能搞定,再次谢谢&/P&
Powered by查看:20611|回复:3
如题,我用mfc写的串口发送程序,WriteFile的参数都是字符串的,而我的单片机要接收16进制的数来实现对应的功能,不知道该怎么转换。
& && &&&看到串口调试助手有这样一个功能“以16进制发送”,那么我编辑框里的“01”就是不字符串而是十六进制0x01了,我现在就想实现这样的功能,希望大家给段mfc的代码。
你从编辑框读进数据,然后转换成十六进制存到某缓冲区,然后从该缓冲区写到串口看看。
程序设计,算法为王。
提出问题;分析问题;确定算法;画出流程图;编辑程序;调试程序;建立文档资料。
大家在开发板块贴代码的时候,请使用“插入代码”的功能。
[code]int main(){return 0;}[/code]
已经解决了,一开始我以为会有转换16进制的函数。最后还是在网上找了两个函数来实现转换。那个CByteArray正是我想找的类,可以一位存储一位二级制位。复制内容到剪贴板代码://检测一个字符是不是十六进制字符,若是返回相应的值,否则返回0x10;
char HexChar(char c)
{ if((c&='0')&&(c&='9'))
return c-0x30;
else if((c&='A')&&(c&='F'))
return c-'A'+10;
else if((c&='a')&&(c&='f'))
return c-'a'+10;
return 0x10;
//将一个字符串作为十六进制串转化为一个字节数组,字节间可用空格分隔,返回转换后的字节数组长度,同时字节数组长度自动设置。
int Str2Hex(CString str,CByteArray &data)
int rlen=0,len=str.GetLength();
data.SetSize(len/2);
for(int i=0;i&)
{char l,h=str[i];
if(h==' ')
if(i&=len)
t=HexChar(h);
t1=HexChar(l);
if((t==16)||(t1==16))
else t=t*16+t1;
data[rlen]=(char)t;
data.SetSize(rlen);
引用:原帖由 hagejid 于
21:16 发表
你从编辑框读进数据,然后转换成十六进制存到某缓冲区,然后从该缓冲区写到串口看看。 谢谢斑竹的指点。2689人阅读
转自:http://blog.csdn.net/wityy/article/details/8234739
在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据。关于两者的区别,需要从计算机存储数据的格式说起。
&&&&&&& 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 (2)来表示。我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去。
例如我们要发送一串数据“A000A91A”,以字符串和十六进制两种方式发送:
(1)字符串发送
&&&&&&&&&串口以字符串发送数据,首先将字符串转化为二进制,格式如下:
&&&&&&&&&&& && && &&& &&& &&& &&&&&& &
&&&&&&&&&&&&&&& A&&&&&&&&&&&&&&&&&& 8&&&&&&&&&&&&&&&&& 5&&&&&&&&&&&&&&&&&&&&& 2&&&&&&&&&&&&&&&&&& &0&&&&&&&&&&&&&&&&1&&&&&&&&&&&&&&&&&&& 0&&&&&&&&&&&&&&&&&&& 1
&&&&&&&&&&&&&& && &&& &&&& &&& &&& &&&
&&&&&&&&&&&&&&&&&&&&&&&&&&0&&&&&&&&&&&&&&&&&& 0&&&&&&&&&&&&&&&&&&&& 0&&&&&&&&&&&&&&&&&& 0&&&&&&&&&&&&&&&&&&&&A&&&&&&&&&&&&&&&&&& 9&&&&&&&&&&&&&&&&&&&1&&&&&&&&&&&&&&&&&& A
&&&&&&&& 然后按照8位(串口设置数据位为8位)形式将数据发送出去。
&&&&&&&& 串口接收的数据格式如下:
&&&&&&&&&&&&&&
&(2)十六进制发送数据
&&&&&&&&& 串口以十六进制发送数据,首先将数据转化为:
&&&&&&&&&&&&&& &&&&&&&& &&& &&& &&&& &&&&
&&&&&&&&&&&&&&0XA8&&&&&&&&&&& 0X52&&&&&&&&&&&&&& 0X01&&&&&&&&&&&&&0X01&&&&&&&&&&&&& 0X00&&&&&&&&&&&0X00&&&&&&&&&&&&&&& 0XA9&&&&&&&&&&&&0X1A&
&&&&&&&&&然后按照8位(串口设置数据位为8位)形式将数据发送出去。
&&&&&&&& 串口接收的数据格式如下:
&&&&&&&&& 仔细对照接收结果就很容易明白字符串发送和十六进制发送的区别了。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38112次
排名:千里之外
原创:15篇
转载:97篇
(1)(3)(2)(7)(1)(4)(2)(1)(5)(8)(12)(3)(35)(18)(1)(3)(6)串口收发数据时字符、十六进制、二进制格式详细区分 - 推酷
串口收发数据时字符、十六进制、二进制格式详细区分
在使用串口调试助手时发送和接收数据都是以字节 (Byte) 为单位,并且可以选择字符、十六进制、二进制三种收发格式 ,那么这三种格式究竟怎样区分呢? &
& & & &首先我们来明确一个概念 :串口收发数据的单位 ''&
字节 (Byte) '' , & 1Byte = 8 bits , 串口收发数据格式一般为 &1bit起始位(一般为0) + 8bits 数据位(一字节) +1bit校验位(可有可无) +1bit结束位(一般为1)
& & & & 下面逐一区分三种收发格式:
& & & & & &(1) 十六进制: & 由于1位十六进制数位宽为 4bits ,那么 2 位十六进制数占有一个字节的位宽,所以当以16进制格式收发时,每个字节发送或者接收2位十六进制数, 举个例子 ,当以16进制格式发送一组数据 '' 0F3C781A '' 时 & , 每个字节对应的数据如下:
& & & & & 注意: 类似 ''0xFF'' 是表示两位十六进制数的标准写法,''0x'' 在实际应用串口调制助手中时直接省略。
& & & & & (2) 二进制 &: &参照十六进制收发格式的原理 ,每位二进制数位宽为 1bit ,那么串口每个字节可以传输 8 位二进制数,同样,在传输数据&
'' 0F3C781A '' 时 &,每个字节对应的数据即为上表中十六进制数对应的二进制数。
& & & & & (3) 字符: 串口在以字符格式收发数据时 ,因为每个字符在
&ASCII 码表中对应
成二进制码 都是8bit 宽的二进制数 ,正好为一个字节,所以默认先将该字符转换为对应的二进制数然后发送,相当于每个字节发送一个字符。串口接收端如果是二进制格式,那么将直接显示;如果为十六进制,即显示该字符在ASCII码表中对应的2位十六进制数 ;如果串口接收端以字符格式显示的话即将接收到的二进制数按照 ASCII 码表再转换为对应的字符 (该字符与发送的字符相同) 然后显示。
& & & & & 同样,以字符的格式发送数据&
'' 0F3C781A '' 时 ,首先按照ASCII码表 (网址:
/) 找到每个字符对应的二进制和十六进制数如下表:
对应的16进制数
对应的2进制数
& & & & & &那么以字符格式发送该段数据后,分别以字符格式、16进制、二进制格式接收到的数据为:
接收字节数
接收16进制数
接收二进制数
& & & & & 讲到这,想必读者对于串口收发数据的三种格式的区别已经清晰明了了吧。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致VB如何向串口发送十六进制数_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VB如何向串口发送十六进制数
上传于|0|0|文档简介
&&软件应用
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 串口发送十六进制数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信