转载——串口通信数据位长度对传输数据的影响

本文来自:https://blog.csdn.net/petershina/article/details/8612357

针对串口通信,关于设置数据位长度对通信的影响,如图:

在串口数据通信中,会看到串口参数设置。其中“数据位”设置,共有四档选项,分别是8、7、6、5。那么改变这个参数会对数据的传输有什么影响呢?

我来做个试验,通过示波器观察通信过程,能够分析结果如下:

例如数据位设置为5。那么就相当于规定了每个传输字节只能由5个二进制位来表示,例如:11111,10110,01110等。也就是说,这个RS232口只能发送00000~11111这个范围内的数,如果发送一个比11111还大的数,例如11111+1,也就是100000,那么经过这个RS232口的处理以后,只会发送出去一个00000,而接收端只能接收到00000。这样看起来貌似发送的数据和接收的不一样,其实这是串口数据位长度决定了他会发送多少位数据,超出的位是不会被发送的。

通过示波器观察,我们就能清楚的看到,如果设备是正常的情况下,且串口发送端和接收端都设置数据位为5位,发送下面这些十六进制数,会显示出如下波形:

分别在串口调试软件的发送窗口输入上面的这四个十六进制数,就能通过示波器看到这些数字所对应的二进制码波形。数据位设置是5位,要从右往左查看波形,因为串口通信是先传输低位,后传输高位,所以要反过来读取二进制位。

通过上面的观察,我们可以确定,如果数据位设置是5位,那么我们可以发送的最大数字是0x1F,也就是二进制数11111B。超过0x1F的数就保留低五位,所构成的二进制数,就是能够被接收到的数;如果我们设置数据位是6位,那么我们可以发送的最大数字就是0x3F。超过0x3F的数就就保留低六位,所构成的二进制数,就是能够被接收到的数据。

另外,我们知道,一个ASCII码必须要用8位二进制数来表示,其中低7位表示字符,同时还要注意,在标准ASCII中,最高位(b7)用作奇偶校验位。这也就意味着如果串口传输的数据位设置是5或者6位,那么这种情况下,串口是无法发送出ASCII码表中数值大于11111B(十进制31)或者111111B(十进制63)的数所表示ASCII字符的。

比如我们设置串口数据位是5位,我们发送一个字母a,我们知道在字母a在ASCII码中的十进制数是97,二进制是1100001B,大于11111B。则此时只能传输出去后五位,也就是00001B,而接收端只会显示出十六进制数01,而不能显示出一个完整的字母a。只有数据为设置是7位和7位以上时,才能传输一个完整的ASCII字符。

原文地址:https://www.cnblogs.com/netlws/p/9056037.html

时间: 2024-10-08 20:10:50

转载——串口通信数据位长度对传输数据的影响的相关文章

Delphi 串口通信数据位长度对传输数据的影响 转

针对串口通信,关于设置数据位长度对通信的影响,如图: 在串口数据通信中,会看到串口参数设置.其中“数据位”设置,共有四档选项,分别是8.7.6.5.那么改变这个参数会对数据的传输有什么影响呢? 我来做个试验,通过示波器观察通信过程,能够分析结果如下: 例如数据位设置为5.那么就相当于规定了每个传输字节只能由5个二进制位来表示,例如:11111,10110,01110等.也就是说,这个RS232口只能发送00000~11111这个范围内的数,如果发送一个比11111还大的数,例如11111+1,也

QT 串口通信 数据16进制发送

在QT中进行串口通信时,很多情况要用到发送16进制的数据.从网上找来了一段代码测试能用: static QByteArray QString2Hex(QString str) { QByteArray senddata; int hexdata,lowhexdata; int hexdatalen = 0; int len = str.length(); senddata.resize(len/2); char lstr,hstr; for(int i=0; i<len; ) { hstr=st

串口通信属性及事件解析

RS-232串口,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.典型地,串口用于ASCII码字符的传输.通信使用3根线完成:(1)地线,(2)发送,(3)接收. 本文以c#中的SerialPort类为例,分析串口各参数及事件,其他平台串口库的操作类似. 专门串口通信的朋友,建议参看<Visual C++串口通信工程开发实例导航>.   一.属性 1. PortName 串口名    默认值COM1 串口对于操作

在C#中使用SerialPort类实现串口通信(陆续更新)

在.NET Framework 2.0中提供了SerialPort类,该类主要实现串口数据通信等.本文章将本人在学习过程中从网络上搜集到的相关信息写出来供大家参考. 下面主要介绍该类的主要属性(表1)和方法(表.2). 如果需要了解更多的信息请登录http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport(VS.80).aspx查看. 相关文章 <使用System.IO.Ports读取COM口数据> http://www

C#串口通信学习笔记

因为参加一个小项目,需要对继电器进行串口控制,所以这两天学习了基本的串口编程.同事那边有JAVA的串口通信包,不过是从网上下载的,比较零乱,难以准确掌握串口通信的流程和内含.因此,个人通过学习网上大牛的方法,利用C#实现了基本的串口通信编程.下面对学习成果进行总结归纳,希望对大家有所帮助. 一.串口通信简介 串行接口(串口)是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件.一般完成这种功能的电路,我们称为串行接口

C#中显现串口通信SerialPort类

SerialPort类的常用属性 名 称 说 明 BaseStream 获取 SerialPort 对象的基础 Stream 对象 BaudRate 获取或设置串行波特率 BreakState 获取或设置中断信号状态 BytesToRead 获取接收缓冲区中数据的字节数 BytesToWrite 获取发送缓冲区中数据的字节数 CDHolding 获取端口的载波检测行的状态 CtsHolding 获取"可以发送"行的状态 DataBits 获取或设置每个字节的标准数据位长度 Discar

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

转自:http://blog.csdn.net/wityy/article/details/8234739 串口发送数据——字符串发送与十六进制发送的区别 在使用串口发送数据时可以选择字符串发送或者十六进制发送,通常情况下我们习惯选用字符串发送数据.关于两者的区别,需要从计算机存储数据的格式说起. 在计算机中,数据是以二进制的形式存储的,例如十进制 1(10)在计算机中用 0000 0001(2)来表示.我们在用串口发送数据的时候首先将待数据转换为对应的ASCII码,然后再将这些ASCII码按照

ARM cortex a 之串口通信2

现在开始编程. 先写一个大的函数: void main(void) { uart_init(); uart_putc('a');  //发送数据 //uart_getc():  //接收数据 } 然后分别写三个小的子函数 先在宏定义中声明各个寄存器的地址,然后我们开始使用它们. #define GPA0CON 0xE0200000 #define UCON0 0xE2900004 #define ULCON0 0xE2900000 #define UMCON0 0xE290000C #defin

串口参数详解:波特率,数据位,停止位,奇偶校验位

简介 串口是一种非常通用的设备通信的协议(不要与通用串行总线Universal Serial Bus(USB)混淆).大多数计算机包含两个基于RS232的串口.串口同时也是仪器仪表设备通用的通信协议:很多GPIB兼容的设备也带有RS-232口.同时,串口通信协议也可以用于获取远程采集设备的数据. 串口通信的概念非常简单,串口按位(bit)发送和接收字节.尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据.它很简单并且能够实现远距离通信.比如IEEE48