这两天调试一个zigbee模块,要求命令要求使用16进制格式发送给模块。
用串口助手的16进制发送功能控制zigbee,换单片机发送怎么试都不好用,只知道是数据格式转换有问题,一直没搞明白串口助手的16进制发送是怎么发的,直到网上看到一篇文章,下边直接复制过来了。
在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据。关于两者的区别,需要从计算机存储数据的格式说起。
在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示。我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照二进制的方式一位一位的发送出去。
例如我们要发送一串数据“A852010100000000A91A”,以字符串和十六进制两种方式发送:
(1)字符串发送
串口以字符串发送数据,首先将字符串转化为二进制,格式如下:
0000 1010 0000 1000 0000 0110 0000 0010 0000 0000 0000 0001 0000 0000 0000 0001
A 8 5 2 0 1 0 1
0000 0000 0000 0000 0000 0000 0000 0000 0000 1010 0000 1001 0000 0001 0000 1010
0 0 0 0 A 9 1 A
然后按照8位(串口设置数据位为8位)形式将数据发送出去。
串口接收的数据格式如下:
编号
|
数据内容
|
编号
|
数据内容
|
0
|
A
|
8
|
0
|
1
|
8
|
9
|
0
|
2
|
5
|
10
|
0
|
3
|
2
|
11
|
0
|
4
|
0
|
12
|
A
|
5
|
1
|
13
|
9
|
6
|
0
|
14
|
1
|
7
|
1
|
15
|
A
|
(2)十六进制发送数据
串口以十六进制发送数据,首先将数据转化为:
1010 1000 0110 0010 0000 0001 0000 0001 0000 0000 0000 0000 1010 1001 0001 1010
0XA8 0X52 0X01 0X01 0X00 0X00 0XA9 0X1A
然后按照8位(串口设置数据位为8位)形式将数据发送出去。
串口接收的数据格式如下:
编号
|
数据内容
|
编号
|
数据内容
|
0
|
A8
|
4
|
00
|
1
|
52
|
5
|
00
|
2
|
01
|
6
|
A9
|
3
|
01
|
7
|
1A
|
仔细对照接收结果就很容易明白字符串发送和十六进制发送的区别了。
|