打印

为什么6位数据位能和8位数据串口通信

[复制链接]
5054|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yuwei_RS232|  楼主 | 2013-3-24 16:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
jlass| | 2013-3-25 09:18 | 只看该作者
不知道你指的是结构还是长度,串口属于异步通信,和长度是不相关的,想传多长都可以,但是其数据结构还是必须相同的,比如有几位停止位,是否做校检等,否则肯定是不能传输的。

使用特权

评论回复
板凳
jlass| | 2013-3-25 09:20 | 只看该作者
地板
yuwei_RS232|  楼主 | 2013-3-25 10:50 | 只看该作者
jlass 发表于 2013-3-25 09:18
不知道你指的是结构还是长度,串口属于异步通信,和长度是不相关的,想传多长都可以,但是其数据结构还是必 ...

设A串口参数为9600/8/N/1,B串口参数为9600/6/N/1
现A给B发数据“a” 它的数据格式为: 0 1000 0110 1
B接收的数据该为: 0 1000 01 1 则显示 “!”
但,我用B给A发送任何数据,A都能正确收到,
我就想问,B给A发送数据的具体过程,和数据格式

使用特权

评论回复
5
jlass| | 2013-3-25 12:42 | 只看该作者
你这么做首先肯定是错的。

A发B时,因为有数据丢失,B的显示肯定是错的,B接收是以0开头,收6位,在以1结束,因为是串行传输,一旦出现一个错误之后,头就错了,B可以以任何一个0为开头,1为结尾的数据为有效数据,所以显示也就不一定是“!”。
B发A时,数据是没有丢失的,虽然理论上A应该也是错的,但不排除一些特殊的端口能接受,因为毕竟数据是没有丢失的嘛。
数据的具体过程,和数据格式,我发的连接里有

使用特权

评论回复
6
yuwei_RS232|  楼主 | 2013-3-25 14:04 | 只看该作者
jlass 发表于 2013-3-25 12:42
你这么做首先肯定是错的。

A发B时,因为有数据丢失,B的显示肯定是错的,B接收是以0开头,收6位,在以1结 ...

你说的我能明白
我的意思是
如果B给A发送“a”   它理论上 该 为 0 100001 1 吗? 为什么A能接收到“a”?我查了一些资料,有的人说是系统自动填充的,是吗?怎么填充的?

使用特权

评论回复
7
jlass| | 2013-3-26 08:44 | 只看该作者
本帖最后由 jlass 于 2013-3-26 13:51 编辑
yuwei_RS232 发表于 2013-3-25 14:04
你说的我能明白
我的意思是
如果B给A发送“a”   它理论上 该 为 0 100001 1 吗? 为什么A能接收到“a” ...

我的意思是,因为数据没有丢失,所以存在能接收的可能性,但这只是特例,换一个串口可能就不行了。就算你分析出了根本原因,也只是针对你所使用的这个串口而已,不具有普遍意义。

另外:看了你所使用的数据,应该只是巧合而已,0 100001 1的数据,串口应该以0为开头,然后连续收8位,刚巧收了1000 0110,最后一位停止位又刚好为1,你再传几个数据可能就不对了。

使用特权

评论回复
8
chunyang| | 2013-3-26 18:35 | 只看该作者
串行通讯的启停位都是0,满足这个条件,不关信号是多少位,接收端都能做出反应,波特率一致的话就可以通讯,但要求6位数据的时间宽度满足8位的要求,此时后面将自动补0。

使用特权

评论回复
9
jlass| | 2013-3-28 08:38 | 只看该作者
chunyang 发表于 2013-3-26 18:35
串行通讯的启停位都是0,满足这个条件,不关信号是多少位,接收端都能做出反应,波特率一致的话就可以通讯 ...

你确定吗?
如果我用两个GPIO口模拟串口收发数据肯定不会这么做。其次以你的说法,我估计连起始位都判断不了。

使用特权

评论回复
10
chunyang| | 2013-3-29 00:11 | 只看该作者
只要有低电平存在就有起始位。

使用特权

评论回复
11
jlass| | 2013-3-29 08:28 | 只看该作者
本帖最后由 jlass 于 2013-3-29 08:49 编辑
chunyang 发表于 2013-3-29 00:11
只要有低电平存在就有起始位。

1、停止位应该是1,这个用示波器一测就知道了。
2、我实测了一下,6位的串口传给8位是收不到数据的(证明楼主的情况并不是普遍现象),楼主的情况我估计是巧合而已,自动补0的说法是不靠谱的。

使用特权

评论回复
12
chunyang| | 2013-3-30 21:29 | 只看该作者
jlass 发表于 2013-3-29 08:28
1、停止位应该是1,这个用示波器一测就知道了。
2、我实测了一下,6位的串口传给8位是收不到数据的(证明 ...

前面说过这跟数据宽度有关,只要宽度合适,数据就一定会出现而非凑巧,你用正常的串口是无法直接模拟出來的,直接对IO编程输出你就看到结果,画画波形图也应很容易理解。

使用特权

评论回复
13
jlass| | 2013-4-1 09:17 | 只看该作者
chunyang 发表于 2013-3-30 21:29
前面说过这跟数据宽度有关,只要宽度合适,数据就一定会出现而非凑巧,你用正常的串口是无法直接模拟出來 ...

你绝对是一个辩论的高手,每次都能巧妙的绕过我的攻击点,而从侧面击中我的软肋,小弟甘拜下风。

使用特权

评论回复
14
chunyang| | 2013-4-1 23:01 | 只看该作者
晕,至于么……

使用特权

评论回复
15
ytzxd| | 2013-4-11 14:45 | 只看该作者
不能吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

3

帖子

1

粉丝