(1)数据帧的串口接收及识别技术
在舵控系统中,数据以二进制信息帧的格式进行传递。每个信息帧从标题开始都有固定的帧头、帧尾,且长度固定,其基本数据格式如表1所示。
在该舵控系统的设计中,串行通讯占有很重要的地位,如艇载计算机与主单片机1之间的通讯过程。下面以主单片机1的串口接收程序为例,对串行通讯的实现过程加以说明。
在串行通信中,接收程序的任务是数据接收、帧识别和信息提取。常规的设计方法是设置一个比较大的缓冲区。串行接收中断服务程序负责把接收到的数据压入缓冲区,当缓冲区的数据足够多时,再由主程序调用一个帧识别和解码子程序对缓冲区中的数据进行处理。这种方法的好处是中断服务程序比较短,不足之处为从一帧数据接收完毕到解码时间较长,另外对缓冲区进行管理需要占用大量的的CPU时间,因而实时性较差,此处不宜使用。
本文采用了中断服务程序就地帧识别技术,即省掉缓冲区,数据接收、帧识别均由中断服务程序完成,之后在主程序的循环中完成数据的提取和处理。就地帧识别技术的实现机理如下:把中断服务程序看作是一个处理机,串行数据逐字节到来,程序先从数据序列中等到第一个帧头,写入该帧的存储数组,同时置标志位 flag1,接收状态推进一步;再判断下一次中断时,来到的数据是否符合第二个帧头的特征。如果符合则存入相应数组,并置相应的标志位flag2,接收状态继续推进;如果帧头两个字节均符合,则将后面来到的数据依次存入指定数组;根据已接收到的字节数判断,当符合该帧的数据部分接收完毕后,判断下一字节是否为帧尾的第一个字节,如果是则置标志位flag3;之后依据同样的方法判断帧尾第二个字节是否来到,如果已接收到,则置该帧数据已完整接收到标志 flag4,同时接收状态归零,重新开始等待帧头字符。在帧头帧尾判断期间,一旦有一项不符合要求,则将接收状态归零,以重新开始等待帧头。主程序每循环一次便对“帧完整接收到”标志进行一次判断,若为真则调用相应的数据提取子程序,并清flag4。
串行中断服务程序流程如图2所示。采用中断服务程序就地帧识别技术的优点在于数据接收后立即进行帧识别,省去了对缓冲区的管理工作,减少了存取次数,因而节省了大量的时间,极大地提高了接收程序的实时性。同时错帧和断帧被自动丢弃,不再占用资源。
图2中各标志位含义为:
flag1——接收到帧头Head1标志;
flag2——接收到完整帧头标志;
flag3——接收到帧尾End1标志;
flag4——接收到完整帧标志。
(2)单片机多机通讯
在舵控系统设计中,各部分间的通讯是设计的重要内容,其中主要包括单片机与上位PC机间的通讯和单片机与单片机之间的通讯。在舵控系统中,主单片机1与上位PC机通讯是通过单片机自带的一路异步串行通讯接口完成的;而主单片机1通过其P1口向主单片机2传输数据,这里不再赘述,重点介绍主单片机2如何通过其一路串口分别向下位的多个舵控单片机传送指令。
此系统中,主单片机2作为主机,m个舵控单片机作为从机,在主机与从机的通讯过程中,串口控制寄存器中SCON中的SM2位发挥了重要作用。当其中一个舵控单片机(89C2051)的SM2位为1时,该单片机只接收地址帧,对数据帧不理睬;而当SM2位为0时,该单片机接收所有发来的消息。具体通信过程如下:
①首先将主、从单片机工作方式选为模式3,所有从机的SM2位开始置1,处于只接收地址帧状态。
②主机接收主单片机1发来的数据帧,从中提出数据部分(m个字节的指令对应m个舵控单片机),根据序号在控制指令字节前加上一个字节的地址信息。然后主机依次通过串口向下发送各舵控单片机的地址字节和数据字节。发送一帧地址信息,包含8位地址,第9位为1,表示发送的帧为地址帧。
③从机接收地址帧后,进入中断,将发来的地址与自身比较;地址一致的从机就是被寻址的从机,它清除SM2位,接收主机发来的所有后续帧信息(数据信息)。未寻址的所有其他从机仍维持SM2=1,对主机发来的数据帧不理睬,直到发来新地址帧;之后在下一次中断时被寻址的从机接收主机发来的数据信息(第9位为 0)。
需要注意的是,如果对已经寻址的从机再发送地址帧,则该从机SM2=1,恢复初始状态,和其他从机竞争。