我正在为微处理器编写一些代码,以便通过单线上的异步串行通信与外部设备通信。
我可以识别导线上从低/高(无论哪种方式)的过渡,因此我可以找到位边界。如果我知道设备正在使用的波特率,我就可以开始关闭比特,这样我就可以读取来自设备的比特流。
从概念上讲,我正在努力识别一个起始位--找到一个字节帧的起始位(假设我得到的是8位,没有奇偶校验,1个起始位,1个停止位)。我知道每个帧都以开始位开始,以结束位结束,但我的理解是开始位和结束位看起来像任何其他位-所以它们没有什么特殊之处,可以将它们标识为开始位或停止位(除了它们的位置)。
我能想到的识别起始位的唯一方法是,它将是持续空闲周期后的第一个高位-也就是说,因为我期望8位没有奇偶校验,如果我得到9个或更多的低位,那么线路是空闲的,下一个高位将是一个起始位。这一切都很好,但是如果我开始监听设备的中位流,并且线路上没有9位或更多的空闲时间,该怎么办?我正在对位进行计时,但是我如何识别哪个位是起始位,以便我可以读出一个字节?如果我计时比特,那么帧之间的任何东西都只能是比特的整数倍(例如,停止“比特”不能是1.5比特),所以一切看起来都像比特。
我希望我说得有道理。谢谢你的帮助。
发布于 2012-10-15 04:51:50
起始位是让你的代码接收一个字节的原因。最好用状态机来解释。你有4个基本状态:
因此,从这里得到的基本见解是,您需要开始位来运行接收字节的代码。停止位很重要,这样您就可以可靠地看到下一个字节的起始位。
发布于 2017-01-26 04:46:33
我会让你的程序在一个点或另一个点读取序列和解密模式,来回移动9位,数据将有意义,这取决于你正在传输的链。一旦识别出一种模式,可能会识别出数据是否有一个周期,然后我会查看是否在任何点上使一个字节与周期代码(ascii 46)匹配的位线,然后来回计数空格,并建立开始位和结束位。
https://stackoverflow.com/questions/12886026
复制相似问题