打印
[MCU]

普通IO口模拟串口异步通信如何区分起始起始位和数据位呢?

[复制链接]
3476|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ss掷弹专业|  楼主 | 2014-5-21 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题所述  采用最基本的NRZ编码  时序是照着51串口的异步时序写的  可问题是2个单片机用普通IO口通信时  如果发送信息的主机先开始工作而从机后开始工作的话   从机就有可能将数据帧中的数据位当成起始位 这样接收就陷入混乱了啊  有什么最简单的方法解决这个问题呢

相关帖子

沙发
ayb_ice| | 2014-5-21 09:49 | 只看该作者
出错是有可能的,
开始结束是用来干嘛的呢

再说不能一步出错,步步出错嘛,不然还要协议来干嘛

使用特权

评论回复
板凳
coody| | 2014-5-21 14:22 | 只看该作者
软件模拟串口很可靠的。
第一下降沿就是起始位的开始。

使用特权

评论回复
地板
airwill| | 2014-5-21 17:35 | 只看该作者
初始化后再开始接收, 通常不会出错. 第一个下降沿开始是起始位.
当然数据一多, 也难免出错. 降低数据占有率, 减小数据包的长度,  数据间增加停止位的长度, 可以减少错误的发生.

使用特权

评论回复
5
vftom3| | 2017-6-21 07:02 | 只看该作者
请问这个问题搞清楚没有啊

使用特权

评论回复
6
kingkits| | 2017-6-21 13:18 | 只看该作者
你可以建立一个握手机制,比如
主机上电时一直发0xAA,并检查接收的数据,一旦确认收到0xaa,发一个0x00作为握手结束标志
从机上电时如果收到的是0xaa就转发回去(loopback),直到收到0x00,才正式处理数据

使用特权

评论回复
7
vftom3| | 2017-6-22 13:48 | 只看该作者
kingkits 发表于 2017-6-21 13:18
你可以建立一个握手机制,比如
主机上电时一直发0xAA,并检查接收的数据,一旦确认收到0xaa,发一个0x00作为 ...

这几天都看资料还是没有搞懂。实际用的情况。主机测量出数据就不停的发送,从机在需要的时候去读去串口上的数据,编程上并没有做特殊的处理。数据类型都是单个字符型。就是最简单的发送和接收。但是没有看到接收数据错误的现象。是否单片机硬件上有特殊的处理来确认起始位和停止位。并不像书中都介绍的检测到一个下降沿就认为是起始位过几个位检测到高位就认为是停止位这么简单了。如果真这么简单。那么从几准备读数据的时候。主机已经发到某一位。也有1到0的变化从机会认为是起始位。主机在发完数据后到停止位就是高电平。那么从几到过了8位也能检测到这个高电平。也就认为是停止位。这样数据就不对了。有没有大师解锁一下。为什么实际应用的时候不做特殊处理没有外界强电场干扰数据都正确单片机是怎么做到的

使用特权

评论回复
8
kingkits| | 2017-6-22 15:45 | 只看该作者
那是硬件自动处理的,只有第一次上电时有可能遇到半个字节

使用特权

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

本版积分规则

12

主题

28

帖子

1

粉丝