android@home家庭通讯网关的设计4软件部分的设计基于第三章的硬件设计,本章主要介绍包括通信协议的制定和单片机具体代码的实现。在整个程序上,主要划分为以下的几个模块:图4-1程序总体框图4.1android客户端和网关蓝牙通信协议在此次的设计中,为了保证和客户端的成功通讯,需要制定数据传输协议。通过这个数据通信协议,实现android客户端通过蓝牙与网关进行数据通信的底层操作。数据传输以信息帧格式传输,且帧长度为定长信息。4.1.1帧定义系统中共有三种帧格式,根据类型不同帧的格式也不同,具体定义如下:1)命令帧表4-1命令帧说明同步帧2Byte帧类型1Byte信息帧12Byte信息帧22Byte结束字1Byte0xF50x5F0x30命令信息10x01返回回复帧0x10返回数据帧命令信息22272地址控制命令0x552)回复帧表4-2回复帧说明主程序无线发射模块程序无线接收模块程序串行通讯任务处理程序嘉兴学院本科生毕业设计同步帧2Byte帧类型1Byte信息帧12Byte信息帧22Byte结束字1Byte0xF50x5F0x350x30正确0x39错误0x553)数据帧表4-1数据帧说明同步帧2Byte帧类型1Byte信息帧12Byte信息帧22Byte结束字1Byte0xF50x5F0x39数据信息12262地址+数据数据信息20x55其中,命令帧是android客户端发给网关的,回复帧和数据帧是由网关发给android客户端的。4.1.2同步字为了保证数据正确传输,帧格式中设有起始同步字和结束同步字,起始同步字包括两个字节,内容为0xF50x5F,结束同步字包括一个字节,内容为0x55。4.1.3帧类型类型字包括一个字节,表示发送的数据的类型,本系统中包括三个类型:命令、回复、数据三类。具体定义如下:表4-4帧类型说明类型类型值说明命令0x30命令信息,由android客户端发给网关回复0x35命令响应,由网关发给android客户端数据0x39传输数据信息,网关执行命令后得到的结果数据4.1.4通信流程1)android客户端发送采集命令android客户端发送采集设置命令(帧类型0x30),网关接收到数据后检测是否正确,如果检测错误则返回接收错误命令。客户端接收到网关返回接收错误信息,android客户端重新发命令。2)android终端接收数据网关接收到采集测试的命令并检验命令格式正确后,开始执行相应的采集操作。采集完后然后发送采集数据。android@home家庭通讯网关的设计4.2软件流程图主程序流程图如下所示:一旦发生报警,网关接收来自无线的数据,执行报警处理,将数据从蓝牙发送出去。此外,可以调用无线发射程序,实现对终端设备的控制。图4-2主程序流程图主程序具体的代码实现如下:voidmain(void){init_sys();UART1_SendFrame(0xf7,0x11,0x11,0x11,0x11,0x11);//系统开始工作while(1){if(R_D0==1||R_D1==1||R_D2==1||R_D3==1)嘉兴学院本科生毕业设计{UART1_SendFrame(0x39,P2,0xFF,0x11,0x11,0x55);//警报处理F55F3901FF111155}Com_task();}}无线发射程序流程图:无线发射程序比较简单,主要是一个设置地址值和设置发射数据的过程,具体的流程如下所示:图4-3无线发射程序流程图串行中断服务程序流程图:串行服务程序,是实现通信协议的关键部分。我们设计的通信协议采用定长的数据帧传输,每帧数据长度为8位。android@home家庭通讯网关的设计图4-4串行通讯服务程序具体代码实现如下:voidCom_Ser()interrupt4using0{staticbitFindFrameHead=0;staticunsignedcharLast_SBUF;if(RI){RI=0;Com_ROK=0;if(FindFrameHead)//framehead?{RevData[Rev_i]=SBUF;Rev_i++;if(Rev_i>=7){FindFrameHead=0;Com_ROK=1;}}elseif((SBUF==0x5f)&&(Last_SBUF=0xf5)){FindFrameHead=1;RevData[0]=0xf5;RevData[1]=0x5f;Rev_i=2;}嘉兴学院本科生毕业设计Last_SBUF=SBUF;}elseif(TI){if(Send_i<7){Send_i++;SBUF=Senddata[Send_i];}else{Com_SOK=1;}TI=0;}}android@home家庭通讯网关的设计