举例说明串口发送数据——字符串发送与十六进制发送的区别

本文主要是介绍举例说明串口发送数据——字符串发送与十六进制发送的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

            在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据。关于两者的区别,需要从计算机存储数据的格式说起。

        在计算机中,数据是以二进制的形式存储的,例如十进制 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

 

          仔细对照接收结果就很容易明白字符串发送和十六进制发送的区别了。下面用Arduino语言举例说明

文件sendtype.ino:

#include <Wire.h>
uint8_t buffer[] = "A852010100000000A91A";
char val,i;
void setup() {
Serial.begin(9600);
Wire.begin();
}
void loop(){
val=Serial.read();   
if(val=='c')   
{     
for(i=0;i<20;i++)
Serial.print(buffer[i]);
//Serial.println("");   
}
else if(val=='b')
{   
Serial.write(buffer,20);
//Serial.println("");   
} 
}
我用Arduino板MEGA 2560测试,结果如下

手动发送b,以十六进制形式发送Serial.write(buffer,20);下图是HEX显示

                                      

                                    

手动发送c.以字符形式发送Serial.print(buffer[i]);右图是HEX显示

                                       

                                      

通过上面的例子进一步说明,以什么形式发送数据完全取决于发送函数的处理,最终串口发出的都是一串二进制码。串口实验一定要注意波特率一致,特别是接蓝牙模块时,一般蓝牙模块出厂波特率都是9600,其它波特率需要发AT指令修改。

注:文章部分转载自http://blog.csdn.net/wityy/article/details/8234739

这篇关于举例说明串口发送数据——字符串发送与十六进制发送的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/972434

相关文章

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

C#数据结构之字符串(string)详解

《C#数据结构之字符串(string)详解》:本文主要介绍C#数据结构之字符串(string),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录转义字符序列字符串的创建字符串的声明null字符串与空字符串重复单字符字符串的构造字符串的属性和常用方法属性常用方法总结摘

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

GORM中Model和Table的区别及使用

《GORM中Model和Table的区别及使用》Model和Table是两种与数据库表交互的核心方法,但它们的用途和行为存在著差异,本文主要介绍了GORM中Model和Table的区别及使用,具有一... 目录1. Model 的作用与特点1.1 核心用途1.2 行为特点1.3 示例China编程代码2. Tab

Nginx指令add_header和proxy_set_header的区别及说明

《Nginx指令add_header和proxy_set_header的区别及说明》:本文主要介绍Nginx指令add_header和proxy_set_header的区别及说明,具有很好的参考价... 目录Nginx指令add_header和proxy_set_header区别如何理解反向代理?proxy

python中字符串拼接的几种方法及优缺点对比详解

《python中字符串拼接的几种方法及优缺点对比详解》在Python中,字符串拼接是常见的操作,Python提供了多种方法来拼接字符串,每种方法有其优缺点和适用场景,以下是几种常见的字符串拼接方法,需... 目录1. 使用 + 运算符示例:优缺点:2. 使用&nbsjsp;join() 方法示例:优缺点:3

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

java字符串数字补齐位数详解

《java字符串数字补齐位数详解》:本文主要介绍java字符串数字补齐位数,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java字符串数字补齐位数一、使用String.format()方法二、Apache Commons Lang库方法三、Java 11+的St