关于串口通信中数据传输的问题

数据在串口通信的过程中是以字节为基本单位——也就是说发送的每一个数必需在0-255之间(现只考虑无符号的情况)。如果想发送256那就必须要分成两个数发(255+1)。

一般在串口通信中会遇到不同的收发格式,诸如ASCII,Hex之类的,只有确保收发两方的收发格式相同。

例:如果发的一方发送了50,收的一方如果用不同的接收格式接收,就会出现完全不同的数(以ASCII的格式接收,那么就会收到53+48)(以10进制的格式接收,那么就会收到的50)(以16进制的格式接收,那么就会收到32)

Ps.由上可知,以ASCII码格式收发,效率要明显慢很多

在用C#编写上位机的时候:

 byte[] sendBuf = new byte[2] { 21,0X21};

上面的21在发送的时候会默认为是十进制,0X21会默认为是十六进制(在发送的时候也会有一次数据转换)

当用十六进制的格式接收会收到15,21;用十进制的格式接收会收到21,33

 

posted @   回首起了风沙  Views(660)  Comments(0Edit  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示