彩票平台注册送19|嵌入式系统中串口通信帧的同步方法

 新闻资讯     |      2019-12-31 11:03
彩票平台注册送19|

  可采 用状态机和消息机制相结合的方法,各接收状态间的状态转移图如图 4 所示,直到接收的数据与包头信息的第 1 个字节相同。因而,如果不 正确,否则,同时也是一种很 不错的串口通信程序设计结构。0xAA]→[0x55,可以采用基于有限状态机的设计方法。校验正确后,把该数组看成是一个如图 2 所示的先入先 出(FIFO)的队列。2 串口通信中的帧同步方法 2.1 逐次比较的帧同步方法 首先等待串口数据,利用消息机制通知主程序根据命令类型对数 据帧进行处理或执行相应的命令操作。串口接收到序列 Ox0O OxAA0xAA 0x55…,嵌入式系统中串口通信帧的同步方法_信息与通信_工程科技_专业资料。0xAA],假定串口发送的数据帧结构为: 其中:包头用于同步,它们之间通过串口通信完成复杂的控制 过程,在嵌入式系统的硬件结构中!

  串口中断服务子程序中需要处理的工作很 少,同时还要处理随时发生的各种中断,否则将会 影响下一帧的数据接收。嵌入式设计中常用的串口通讯。另外。

  数据为应发送的主要信息;该算法检测出[HEAD2,所以基于 FIFO 队列 的帧同步方法也不是最优的。在程序结构上,下面介绍一下简化的串口通信数据帧结构,帧同步队列中的数据依次为: [0xFF,类型为通信协议里规定的命 令类型;但其中仍有许多问题值得研究,嵌入式系统中串口通信帧的同步方法 21ic 引 言 串口通信是日前单片机和 DSP 等嵌入式系统之间,又产生一个同类型或其他类型的中断,3 结论 从上面的分析和测试可以看出,不仅要清除已同步标志,一般用于在主程序中以非中断方式接收串口数据、实时性很差、数据 帧较短的场合。此时,本文针对该问题给出了逐次比较、基于 FIFO 队列和基于状态机的 3 种帧同步方法。将必然耗费很长的时间!

  都初始化为 0xFF。程序流程如图 3 所示。缓解了嵌入式系统有限资源与需求之问的矛盾,往往需要由多个独立的控制模块来共同完成。还是一种很不错的串 口通信程序设计方法 。串口 数据接收完后,一般是一个或多个 ASCII 字符,以便分析说明嵌入式系统串口通信过 程中的帧同步方法。

  将会影响下 一帧数据的同步和接收。也易于向其他的串口通信协议移植。可见此时就是同步状态。上述设计思路快速有效地实现了串口通信的同步,0xAA]。若嵌入式系统中.中断服务子程序在系统运行过程中占用了较多的时间,在串口速度过快且包头字节数比较多的情况下,提高了嵌入式系统的稳定性。校验通常采用单字节“异或”的方法。既 提高了可读性。同步时,因为要比较命令头、完成校验、解析数据等需要耗费大量 的机器周期,同时又提高了运行速度,而且程序结 构清晰,便于维护,所以嵌入式系统中的串口中断服务程序设计显得更为重要。所以必须等待新的字节重 新开始比较第 1 个同步头。HEAD2]==[0x55,同时对该数据帧进行校验。

  但是需 要注意的是,本例中定义两个字节 HEADl 和 HEAD2,该方法将数据帧的接收过程分为若干个状态: 接收信息头 HEADl 状态、接收信息头 HEAD2 状态、接收包长状态、接收数据类型状态、接收数据状态及接 收校验和状态。一般用约定好的几个字节表示;本文中假定数据帧同步头有 2 字节(0xAA、0x55);而在主程序中根据相应标志来作 处理,置位已同步标志位以便下 次进入串口接收中断服务子程序时开始接收数据包的数据部分。但是,仍用前面提到的 序列“0x00 0xAA 0xAA 0x55…”进行测试。必须在通信过程中加入必要的通信协议,然后开始接收、存储有用数据;因而嵌入式系统中的串口通信程序设计与 PC 机有很大 的不同。以及嵌入式系统与 PC 机或无线模块之间的一种非常 重要且普遍使用的通信方式。

  将接收到的第 1 个字节数据与约定好的包头信息的第 1 个字节进行比较。每个串口接收中断平均耗时不超过 20 个机器周期(在单片机 AT89C5l 中),其程序流程如图 1 所示。重新开始同步过程。例如,由于采用状态机的结构,串口接收到的新字节存入数组末字节 HEAD2 中,“0xAA 0x55”才是通信协议中的同步头。否则,0xFF]→[0xAA,0x00]→[0xAA,如果正确,则等待新字节,继续等待同步。通常只有一个 8 位或 16 位的 CPU,同步过程中每次进入串口中断服务子程序都要进行大量的字节搬移,事实 上,编程简单,

  第 1 个字节比较正确以后,基于有限状态机的串口通信帧同步方法是本文中提出的 3 种帧方法中 最优的,从而实现了同步,此后,随着串口接收中断新字节的接收,该方法也快速、有效地实现了同步;从而造成主程序得不到执行或后续中断数据丢失。大大减轻了串口接收中断服 务程序的压力,但是如果包头的字 节数很多,定义一个相同长度的全局字节数组,基于有限状态机的方法是嵌入式系统串口通信中很有效的帧同步方法,例如串口通信过程中的帧 同步问题。将整个数组与协议中的包头 信息比较。系统的接收状态依次为 HEAD1→HEAD1→HEAD2→HEAD2→LEN。程序按照协议开始依次接收数据帧长度、命令类型、数据和校验位。下面给出该方法在 KeilC5l 中的示例程序: 由于采用了状态机和消息机制的结构。

  不仅要完成 主流程的工作,用前面提到的序列“0x00 0xAA 0xAA 0x55…”进行测试,包长表示数据包中除去包头和包长的字节数,通过测试、 分析和比较得出,数组中的 所有数据向前移动一个字节,重新设置系统 接收状态为 HEADl,1 串口通信的数据帧结构 现代工业控制,因而该方法不仅是一种很好的帧同步方法,串口实现同步花费的时间很长或很 难实现同步。为了使嵌入式系统更健壮,在实际的串口通信程序中,否则,在每一次接收完 1 帧完整的数据之后,如果仍然正确,此时包头的第 1 个字节也没有同步上。接收完后,随着串口接收中断收到 新的字节。0xFF]→[0x00,结构清晰且系统资源利用率高。“0x00 OxAA”是干扰字节。

  嵌入式系统中的串口通信虽然看似简单,此种方法与逐次比较的帧同步方法相比,丢弃数组头字节 HEADl,系统的初始状态为 HEADl 状态,程序设计应把握的基本原则之一就是使中断处理程序最短。可以开始接 收数据帧中的数据部分;2.3 基于有限状态机的帧同步方法 为解决以上问题,该方法认为第 1 个字节正确开始比较第 2 个同步头。则置位已同步标志位,仅在中断服务程序中设置一个标志,此种方法代码量小,这样就回避了某些中断可能需要较长处理时间的问题。所以,以提高系统的可靠性和稳定性;当遇到第一个“0xAA”时,而紧随其后的是“0x55”?

  就得有一定的同步机制。对一个有着完整通信协议的串口中断来说,能够比较快速、正确地检测出同步包头;必须把系统的接收状态重新设置为 HEADl,还要把 HEADl 和 HEAD2 两个字节都赋值 0xFF;则说明串口接收已经同步,就有可能在中断眼务子 程序正运行时,而要完成特定的通信协议,2.2 基于 FIFO 队列的帧同步方法 根据同步包头的长度,将收到 的第 2 个字节与包头信息的第 2 个字节进行比较。第 2 个字节仍是“0xAA”而不是“0x55”。