码迷,mamicode.com
首页 > 其他好文 > 详细

串口收发数据时字符、十六进制、二进制格式详细区分

时间:2014-08-02 12:54:23      阅读:1238      评论:0      收藏:0      [点我收藏+]

标签:串口发送   字符   十六进制   二进制   

          在使用串口调试助手时发送和接收数据都是以字节 (Byte) 为单位,并且可以选择字符、十六进制、二进制三种收发格式 ,那么这三种格式究竟怎样区分呢?  

       首先我们来明确一个概念 :串口收发数据的单位 ‘‘ 字节 (Byte) ‘‘ ,   1Byte = 8 bits , 串口收发数据格式一般为  1bit起始位(一般为0) + 8bits 数据位(一字节) +1bit校验位(可有可无) +1bit结束位(一般为1)


        下面逐一区分三种收发格式:


           (1) 十六进制:   由于1位十六进制数位宽为 4bits ,那么 2 位十六进制数占有一个字节的位宽,所以当以16进制格式收发时,每个字节发送或者接收2位十六进制数, 举个例子 ,当以16进制格式发送一组数据 ‘‘ 0F3C781A ‘‘ 时   , 每个字节对应的数据如下:

发送数据 0x0F 0x3C 0x78 0x1A
字节数   1   2   3   4
  

          注意: 类似 ‘‘0xFF‘‘ 是表示两位十六进制数的标准写法,‘‘0x‘‘ 在实际应用串口调制助手中时直接省略。


          (2) 二进制  :  参照十六进制收发格式的原理 ,每位二进制数位宽为 1bit ,那么串口每个字节可以传输 8 位二进制数,同样,在传输数据 ‘‘ 0F3C781A ‘‘ 时  ,每个字节对应的数据即为上表中十六进制数对应的二进制数。

发送数据 0000_1111 0011_1100 0111_1000 0001_1010
字节数          1           2          3          4
          (3) 字符: 串口在以字符格式收发数据时 ,因为每个字符在 ASCII 码表中对应成二进制码 都是8bit 宽的二进制数 ,正好为一个字节,所以默认先将该字符转换为对应的二进制数然后发送,相当于每个字节发送一个字符。串口接收端如果是二进制格式,那么将直接显示;如果为十六进制,即显示该字符在ASCII码表中对应的2位十六进制数 ;如果串口接收端以字符格式显示的话即将接收到的二进制数按照 ASCII 码表再转换为对应的字符 (该字符与发送的字符相同) 然后显示。

          同样,以字符的格式发送数据 ‘‘ 0F3C781A ‘‘ 时 ,首先按照ASCII码表 (网址:http://www.asciima.com/) 找到每个字符对应的二进制和十六进制数如下表:


字符 0 F 3 C 7 8 1 A
对应的16进制数 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
对应的2进制数 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001
           那么以字符格式发送该段数据后,分别以字符格式、16进制、二进制格式接收到的数据为:

接收字节数 1 2 3 4 5 6 7 8
接收字符 0 F 3 C 7 8 1 A
接收16进制数 0x30 0x46 0x33 0x43 0x37 0x38 0x31 0x41
接收二进制数 0011_0000 0100_0110 0011_0011 0100_0011 0011_0111 0011_1000 0011_0001 0100_0001

          讲到这,想必读者对于串口收发数据的三种格式的区别已经清晰明了了吧。



串口收发数据时字符、十六进制、二进制格式详细区分,布布扣,bubuko.com

串口收发数据时字符、十六进制、二进制格式详细区分

标签:串口发送   字符   十六进制   二进制   

原文地址:http://blog.csdn.net/li200503028/article/details/38342363

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!