本文为博主 日月同辉,与我共生,csdn原创首发。希望看完后能对你有所帮助,不足之处请指正!一起交流学习,共同进步!
> 发布人:@日月同辉,与我共生_单片机-优快云博客
> 欢迎你为独创博主日月同辉,与我共生点赞❤❤❤+关注👍+收藏🌹+评论☺。
系列专栏: 优快云-单片机串口通信学习系列🎁
> 我的格言是:“尽最大努力,做最好的自己!💪
要转载,请提前告知!!!
版权声明:本文为优快云博主「日月同辉,与我共生」的原创文章,优快云独一份。

目录
一、数据帧

发送到数据帧可以细分成【帧头】、【地址】、【类型】、【长度】、【数据块】、【效验】、【帧尾】7种,但并不是每次发送的数据都要有这7种。
像【地址】,一般只有多机通信会用到,单机通信不需要有。多机通信时,会给每台机编一个地址,确保数据不会发送到其他的机。还有,【长度】并不是每次都要有,如果发的数据长度是固定的,一般不需要有,发送到数据长度不固定时,才需要有。
1.1数据类型
数据类型一般决定处理某个模块。比如我与用户约定好,数据类型01,处理LED,数据类型02,处理蜂鸣器,那么我的设备发送数据01给对方,则对方去处理LED,发送数据02给对方,则对方去处理蜂鸣器。
1.2帧尾
一次通信的结束,一般用一些特殊符号(比如回车等)表示,以防止帧尾前面的数据与帧尾一样,导致通信出现故障。
1.3ASCII码
ASCII码是一种字符编码方式,共有128个字符,包括英文字母、数字、标点符号和一些控制字符等。每个字符用7个二进制位表示,这些二进制位可以转换成十进制数,也可以转换成十六进制数。
字母 A 在 ASCII 码中的二进制表示为 01000001,十进制表示为 65,十六进制表示为 0x41。
数字 0 在 ASCII 码中的二进制表示为 00110000,十进制表示为 48,十六进制表示为 0x30。
控制字符包括换行符、回车符、制表符等,它们的 ASCII 码值在 0~31 和 127 中。

二、系统设计
2.1设计要求
虚拟串口com3发送数据给51单片机com1,com1发回数据给com3,同时处理好接收到的数据。
这次数据帧有帧头+类型+数据块+帧尾组成。帧头为AA 55,数据类型分为01/02,数据块分为高8位和低8位,帧尾为0x0D(回车)。
数据类型为01时,LED灯工作,数据类型为02时,蜂鸣器工作。不论01还是02,持续时间与数据块有关(高8位、低8位)。
2.2系统原理
2.2.1接收原理&正确性判断原理
上两篇文章我们用定时器实现串口通信,本质是先接收后处理数据。
回顾上两篇文章:
今天我们讲述如何一边接收数据一边处理数据。
定义一个数组recv_buf,用于存储接收到数据,采用switch-case语句,每接收一个【帧头】数据,立刻用if语句判断【帧头】是否正确,若不正确,则重头判断。
若帧头AA 55数据均正确(recv_buf[0]=AA,recv_buf[1]=55),则进入下一步骤。
在分支2(case 2),接收【类型】(recv_buf[2])和【数据块】(recv_buf[3]和recv_buf[4])。
接着在分支3中,如果帧尾(recv_buf[5]=0x0D)正确,则开始处理LED灯和蜂鸣器。
2.2.2持续时间原理
分别定义两个控制持续时间的变量led_data、beep_cnt。
2万+



被折叠的 条评论
为什么被折叠?



