主单片机2程序的主要任务是通过其P1口接收上位机传来的数据,提取各控制信息,在相应控制指令的前面加上地址,依次由串口发送给下位舵控单片机。
舵控单片机的主要任务是识别控制指令和地址指令,并根据收到的控制指令(舵机占空比信号)产生PWM波控制艇上舵机。
该系统软件设计中的关键问题包括以下几个方面:(1)控制信号流程中数据帧的接收识别;(2)舵控系统中主从单片机之间的多机通信;(3)PWM波舵控信号的软件产生方法。下面对这几个问题进行详细的阐述,并给出相应的解决方案。
3.2 软件设计中的关键问题
(1)数据帧的串口接收及识别技术
在舵控系统中,数据以二进制信息帧的格式进行传递。每个信息帧从标题开始都有固定的帧头、帧尾,且长度固定,其基本数据格式如表1所示。

在该舵控系统的设计中,串行通讯占有很重要的地位,如艇载计算机与主单片机1之间的通讯过程。下面以主单片机1的串口接收程序为例,对串行通讯的实现过程加以说明。
在串行通信中,接收程序的任务是数据接收、帧识别和信息提取。常规的设计方法是设置一个比较大的缓冲区。串行接收中断服务程序负责把接收到的数据压入缓冲区,当缓冲区的数据足够多时,再由主程序调用一个帧识别和解码子程序对缓冲区中的数据进行处理。这种方法的好处是中断服务程序比较短,不足之处为从一帧数据接收完毕到解码时间较长,另外对缓冲区进行管理需要占用大量的的CPU时间,因而实时性较差,此处不宜使用。
本文采用了中断服务程序就地帧识别技术,即省掉缓冲区,数据接收、帧识别均由中断服务程序完成,之后在主程序的循环中完成数据的提取和处理。就地帧识别技术的实现机理如下:把中断服务程序看作是一个处理机,串行数据逐字节到来,程序先从数据序列中等到第一个帧头,写入该帧的存储数组,同时置标志位flag1,接收状态推进一步;再判断下一次中断时,来到的数据是否符合第二个帧头的特征。如果符合则存入相应数组,并置相应的标志位flag2,接收状态继续推进;如果帧头两个字节均符合,则将后面来到的数据依次存入指定数组;根据已接收到的字节数判断,当符合该帧的数据部分接收完毕后,判断下一字节是否为帧尾的第一个字节,如果是则置标志位flag3;之后依据同样的方法判断帧尾第二个字节是否来到,如果已接收到,则置该帧数据已完整接收到标志flag4,同时接收状态归零,重新开始等待帧头字符。在帧头帧尾判断期间,一旦有一项不符合要求,则将接收状态归零,以重新开始等待帧头。主程序每循环一次便对“帧完整接收到”标志进行一次判断,若为真则调用相应的数据提取子程序,并清flag4。
串行中断服务程序流程如图2所示。采用中断服务程序就地帧识别技术的优点在于数据接收后立即进行帧识别,省去了对缓冲区的管理工作,减少了存取次数,因而节省了大量的时间,极大地提高了接收程序的实时性。同时错帧和断帧被自动丢弃,不再占用资源。

图2中各标志位含义为:
flag1——接收到帧头Head1标志;
flag2——接收到完整帧头标志;
flag3——接收到帧尾End1标志;
flag4——接收到完整帧标志。