串口MSComm控件五种不同校验方式对数据收发的影响

(2008-09-10 14:50:00)
 
http://blog.sina.com.cn/s/blog_470eccc60100arq7.html
 

串口MSComm控件有五种校验方式,分别是无校验(None),奇校验(Odd),偶校验(Even),1校验(Mark),0校验(Space)。

在RS232/RS485/RS422通讯中,通过串口发送一字节(8BIT)数据时,首先发送起始位(固定为0),然后发送8位数据(先低位后高位),如果校验方式不是无校验(None),则紧接着会发送一位校验位,最后发送停止位。停止位固定为1。

停止位依据串口属性的设置可为1位,1.5位或2位。为了说明简洁起见,下面均假设停止位位数为1而数据位位数为8。

在数据发送时,如果校验方式设置为无校验(None),则不发送校验位;否则会发送一位校验位。

具体地,如果校验方式设置为1校验(Mark),校验位固定为1;如果校验方式设置为0校验(Space),校验位固定为0;如果校验位为奇校验(Odd),或者偶校验(Even),那么校验位可能为0也可能为1,依据所发送的数据计算得出。计算方法:如果是奇校验,那么8位数据和1位校验位的累加和必是奇数;对应的,如果是偶校验,8位数据和1位校验位的累加和必为偶数。比如,数据37,其二进制编码为00100101,编码中含有5个0和3个1,5*0+3*1=3,如果采用奇校验,那么校验位为0;如果使用偶校验,校验位则为1。

使用MSComm控件发送数据时,校验位无需用户干预,数据发送时自动地由操作系统计算、添加、发出。

 

串口MSComm控件在接收数据时,如果无校验,则只要检测到串口出现了数据,数据总能收到(试验发现,即使停止位为0也不会被认为是错误帧而遭遇抛弃);而采用了某种校验后,只有校验通码正确的数据才能被正确地收到。

试验中发现,发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出值一律为5BH。

为什么是5BH(‘[’)呢?不明白,纳闷中…

 

下面是试验过程中的截图: 

第一组试验:发送方发送的1个数据桢有10位组成:1位起始位,8位数据位,1位停止位

试验(1.1)

发方:9600,N,8,1(发出的数据位数为8)

收方:9600,N,8,1

解读:协议完全匹配,所有数据均能被正确收到。 串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(1.2)

发方:9600,N,8,1(发出的数据位数为8)

收方:9600,O,8,1

解读:此时发送方的停止位被接收方当作校验位,由于是奇校验,而此时的校验位为1,所以只有含有偶数个1的那些数据才能被PC正确收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH) 串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(1.3)

发方:9600,N,8,1(发出的数据位数为8)

收方:9600,E,8,1

解读:此时发送方的停止位被接收方当作校验位,由于是偶校验,而此时的校验位为1,所以只有含有奇数个1的那些数据才能被PC正确收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH) 串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(1.4)

发方:9600,N,8,1(发出的数据位数为8)

收方:9600,M,8,1

解读:此时发送方的停止位被接收方当作校验位,由于要求校验位为1而此时的校验位恰好为1,所以所有数据都能被PC正确收到。

串口MSComm控件五种不同校验方式对数据收发的影响 

试验(1.5)

发方:9600,N,8,1(发出的数据位数为8)

收方:9600,S,8,1

解读:此时发送方的停止位被接收方当作校验位,由于要求校验位为0而此时的校验位恰好为1,所以所有数据都不能被PC正确收到。 串口MSComm控件五种不同校验方式对数据收发的影响

 

第二组试验:发送方发送的1个数据桢有11位组成:1位起始位,8位数据位,1位校验位(该位固定为1),1位停止位。由于校验位为1,所以只要不是数据一个接一个地连续发送,在时序上和不含校验位的第一组试验中发出的数据完全一致。

试验(2.1)

发方:9600,M,8,1(发出的数据位数为9,第9位为1)

收方:9600,N,8,1

解读:此时发送方的第9位为1,由于接收方使用无校验,发送方的第9位被接收方当作是停止位,所以发送方发送的所有数据都能被PC正确收到。串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(2.2)

发方:9600,M,8,1(发出的数据位数为9,第9位为1)

收方:9600,O,8,1

解读:此时发送方的第9位即校验为1,由于是奇校验,而此时的校验位为1,所以只有含有偶数个1的那些数据才能被PC正确收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH) 串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(2.3)

发方:9600,M,8,1(发出的数据位数为9,第9位为1)

收方:9600,E,8,1

解读:此时发送方的第9位即校验位为1,由于是偶校验,而此时的校验位为1,所以只有含有奇数个1的那些数据才能被PC正确收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH)

串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(2.4)

发方:9600,M,8,1(发出的数据位数为9,第9位为1)

收方:9600,M,8,1

解读:此时发送方的第9位即校验为1,由于要求校验位为1而此时的校验位恰好为1,所以所有数据都能被PC正确收到。 串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(2.5)

发方:9600,M,8,1(发出的数据位数为9,第9位为1)

收方:9600,S,8,1

解读:此时发送方的第9位即校验为1,由于要求校验位为0而此时的校验位恰好为1,所以没有数据能被PC正确收到。串口MSComm控件五种不同校验方式对数据收发的影响

 

第三组试验:发送方发送的1个数据桢有11位组成:1位起始位,8位数据位,1位校验位(该位固定为0),1位停止位。

试验(3.1)

发方:9600,S,8,1(发出的数据位数为9,第9位为0)

收方:9600,N,8,1

疑惑:此时发送方的第9位为0,由于接收方使用无校验,发送方的第9位被接收方当作是停止位,此时停止位为0,应该发生帧错误,怎么发送方发送的所有数据都能被PC正确收到呢? 串口MSComm控件五种不同校验方式对数据收发的影响 

试验(3.2)

发方:9600,S,8,1(发出的数据位数为9,第9位为0)

收方:9600,O,8,1

解读:此时发送方的第9位即校验为0,由于是奇校验,而此时的校验位为0,所以只有含有奇数个1的那些数据才能被PC正确收到,比如01H,02H,04H,07H,08H,0BH,0DH,0EH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH)串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(3.3)

发方:9600,S,8,1(发出的数据位数为9,第9位为0)

收方:9600,E,8,1

解读:此时发送方的第9位即校验为0,由于是偶校验,而此时的校验位为0,所以只有含有偶数个1的那些数据才能被PC正确收到,比如00H,03H,05H,06H,09H,0AH,0CH,0FH等。(发生校验错的那些数据在后面能校验通过的数据被收到时才被输出,输出为5BH)串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(3.4)

发方:9600,S,8,1(发出的数据位数为9,第9位为0)

收方:9600,M,8,1

解读:此时发送方的第9位即校验为0,由于是1校验,而此时的校验位为0,所以收不到任何数据。串口MSComm控件五种不同校验方式对数据收发的影响

 

试验(3.5)

发方:9600,S,8,1(发出的数据位数为9,第9位为0)

收方:9600,S,8,1

解读:此时发送方的第9位即校验位为0,由于是0校验,而此时的校验位为0,所以所有数据均可正确地收到。串口MSComm控件五种不同校验方式对数据收发的影响

MSComm控件发出9位数据的方法

from: http://blog.sina.com.cn/s/blog_470eccc60100arpo.html

使用8051单片机进行主从式多机串行通讯时,使用TB8/RB8区分地址或数据是一种常见的处理方式。如果主机是51系列单片机,利用串口工作方式2或3可方便地实现此功能。

如果主机是PC呢?通过资料查询,发现正确设置串口控件MSComm的Settings属性可完成此功能,具体是:

将串口控件MSComm的Settings属性中的奇偶校验项设置为“M”(Mark)可使所发数据的第9位为1;将Settings属性中的奇偶校验项设置为“S”(Space)可使所发数据的第9位为0。

将第9位设置为1的另一方法是将Settings属性中的奇偶校验项设置为“N”(None)同时将停止位设置为2,利用多发出的1位停止位使得下位机收到数据的第9位为1。

那么这些属性的设置影响PC对从机发出的数据的奇偶校验的检测呢?比如,如果设置“M”,那么一定要求从机发出的数据的第9位必须为1呢?

实验表明:是的,否则将收不到数据。

但如果将Settings属性中的奇偶校验项设置为“N”(None)同时将停止位设置为2时,发送时的效果和将Settings属性中的奇偶校验项设置为“M”(Mark)同时将停止位设置为1的效果完全一致,但接收时的处理却不尽一致。如果设置校验为“M”,那么发出的数据中第9位必须为1,接收方才能收到;而设置为无校验,试验中发现,即使第9位为0(此时被当作停止位中的第1位),数据照样能被收到。

所以,主机、从机的软件设计时需要特别注意这其中的细微差别,正确设置MSCOMM控件的Settings属性,免得调试莫名遇阻。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利刃 MVVMLight 3:双向数据绑定

利刃 MVVMLight 3:双向数据绑定 原文:利刃 MVVMLight 3:双向数据绑定上篇我们已经了解了MVVM的框架结构和运行原理。这里我们来看一下伟大的双向数据绑定。说到双向绑定,大家比较熟悉的应该就是AngularJS了,几乎所有的AngularJS 系…

使用Java扫描DynamoDB项目

在之前的文章中,我们介绍了如何查询DynamoDB数据库 查询DynamoDB第1部分 查询DynamoDB第2部分 。 除了发出查询之外,DynamoDB还提供扫描功能。 扫描所做的是获取您在DynamoDB表上可能拥有的所有项目。 因此,扫描不需要任何基于我们的分区键…

实战 SSH 端口转发

from: http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题。学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息。…

627.Swap Salary-(LeetCode之Database篇)

问题描述 给出下面的表,名为salary。 idnamesexsalary1Am25002Bf15003Cm55004Df500要求执行一个UPDATE语句,将表转换成下面的样子。 idnamesexsalary1Af25002Bm15003Cf55004Dm500即m与f交换位置。 问题解决 下面我使用SQL中的case when来解决问题。…

unix/linux命令“ls -l”选项输出结果详解

from: http://hi.baidu.com/hoxily/item/12e2a02d03f77e0942634a8e unix/linux命令“ls -l”选项输出结果详解 下面是我在lucidubuntu使用”ls -l /”的结果: hoxilyubuntulucid:/$ ll / total 96 drwxr-xr-x 22 root root 4096 2012-02-06 20:10 ./ drwxr-xr-x 2…

delayqueue_在DelayQueue中更改延迟,从而更改顺序

delayqueue因此,我正在考虑构建一个简单的对象缓存,该缓存在给定时间后会使对象过期。 显而易见的机制是使用Java并发包中的DelayedQueue类。 但是我想知道是否有可能在将对象添加到队列后更新延迟。 看一下Delayed接口,似乎没有充分的理由不…

使用Amalgamate将C/C++项目合并成一个.h/.c[pp]文件

简述 C/C开源库一般是一堆的头文件和源文件,做到声明和实现分离,减小单个模块大小,这在设计上是很好的,但是用起来稍显麻烦。在网上看到有好心人推荐了一个开源工具Amalgamate,专门用来对C/C的头文件和源文件进行合并用…

Java数组排序解码

排序是我们在计算机科学中学习的第一个算法。 排序是一个非常有趣的领域,它有大约20多种算法,而且总是很难确定哪种算法最好。 排序算法的效率是根据所需的时间和所需的空间来衡量的。 一些时间气泡排序是最好的,因为它没有空间需求&#xff…

linux下删除乱码文件名的方法

from: http://www.jb51.net/LINUXjishu/32910.html linux下删除乱码文件名, 不废话: 1. ls -i 列出文件的节点ID, 如: 123456789 2. find ./ -inum 123456789 -print -exec rm -rf {} \; 批量删除: for n in 123456789 987654321;do find . -inum $n -exec rm -f {} \;…

A - Beautiful Matrix

Problem description Youve got a 5  5 matrix, consisting of 24 zeroes and a single number one. Lets index the matrix rows by numbers from 1 to 5 from top to bottom, lets index the matrix columns by numbers from 1 to 5 from left to right. In one move, you …

MATLAB中用FDATool设计滤波器及使用

from: http://blog.sina.com.cn/s/blog_3e4367660100nyz1.html 1. 在Matlab中键入fdatool运行Filter Design and Analysis Tool。具体使用请参见Matlab Help中的Signal Processing Toolbox->FDATool。 2. 在fdatool工具中应该注意的几个问题:(a)Fstop&#xf…

电商等大型网站高可用,高负载架构借鉴方案(转载)

任何一个大型网站都是经历用户积累然后成长,从一台服务器到多台服务器才能构架支撑网站现有数据、用户、页面请求等。大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务…

《Hadoop实战》的笔记-2、Hadoop输入与输出

from: http://book.douban.com/annotation/17068812/ 这一问题本书只在第三章简单说了一下读写HDFS,虽然能说明问题,但是本着第一遍读书应该把书读厚的原则,我觉得很有必要自行展开一番。再说凡是万变不离其宗嘛,任何程序都是从“…

复制模式和扩展模式_扩展剂:模式还是反模式?

复制模式和扩展模式扩展器模式在最近几年变得很流行,甚至已经在OSGi标准(例如,蓝图服务和Web应用程序规范)中使用。 在处女座,我们从一开始就与扩展程序一起工作,但是尽管它们具有优势,但它们仍…

Ubuntu 18.04 下安装pip3及pygame模块

1.Ubuntu下pip3的安装、升级、卸载 安装pip3 sudo apt-get install python3-pip 升级pip3 sudo pip3 install --upgrade pip 卸载pip3 sudo apt-get remove python3-pip 2.安装pygame sudo pip3 install pygame 3.验证pygame是否安装成功,如果安装成功则会出现如下图…

linux 禁止账户远程登录

为了安全或其他原因,经常需要禁止某些用户远程登录,方法整理如下: 1. 禁止root账户远程登录 root账户下修改 /etc/ssh/sshd_config # vi /etc/ssh/sshd_config 找到 PermitRootLogin yes 这一句,将yes改成no,退出保存…

ANTLR和网络:一个简单的例子

网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序。 因此,我非常习惯在计算机上安装工具。 但是在2016年,网络无处不在,因此那里也可能需要我们的语言。 可能的情况: ANTLR 也在网络上&#xf…

下一秒

好想能看到 你嘴角微笑 最好在下一秒 好想能听到 你轻声歌唱 最好在下一秒 纯白棒球帽 墨绿色衣角 时间静止的美好 默契发生在每个下一秒 爱上同一种口味的蛋糕 不约而同哼唱一段曲调 喜欢这样看你傻傻的笑 好想能这样 就白头到老 最好从下一秒 转载于:https://www.cnblogs.com…

类加载器 jboss_JBoss AS 7类加载说明

类加载器 jboss这是示例章节,摘自Francesco Marchioni编辑的JBoss AS 7 Configuration Deployment and Administration一书,该书正在运行一个名为mastertheboss.com的JBoss门户。 根据Java EE规范的要求,理想情况下,应用程序服务器…

【转】Docker 容器化核心概念

DockerVM vs DockerDocker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 示例一&…