单片机镇流器路灯控制器电路设计 工作原理 结构框图.

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机镇流器路灯控制器电路设计+工作原理+结构框图

单片机镇流器路灯控制器电路设计+工作原理+结构框图主函数是一个不断遍历E2PROM寻找需要发送的数据块,和判断是否需要向上位机模块发送应答帧的循环过程。前者是通过不断遍历位寻址区查寻标志位f_sending、

f_ack 、f_nack是否被置为1来实现的。后者是当接收到上位机模块的短信数据时所需执行的操作指令。一旦遍历到数据块需要发送,或者实时接收到了上位机模块发送来的短信数据,主函数将快速转到时钟中断服务程序来调用SHELL函数,完成数据块或者应答帧的发送。实际上无论是数据块的发送还是应答帧的发送,都是针对GSM模块不同返回参数的处理过程。另外,主函数在完成单片机和GSM模块的初始化后,将立即开放串口中断,实时接收GSM模块返回的参数以及上位机模块发来的短信数据。系统运行时,上位机模块首先发送一个应答帧给下位机模块,从而启动下位机模块的运行。应答帧可以是确认帧,也可以是非确认帧,这可以事先约定。程序的开头检验是否收到应答帧,有两个意图。其一,当系统启动时作为下位机模块的启动信号;其二,当下位机模块正常运行时,在发送完短信后,下位机模块需要判断上位机模块是否收到了短信,判断的依据就是上位机模块是否返回应答帧。根据应答帧的内容,下位机模块将决定是继续发送下一帧数据还是重新发送上一帧。按照双方通信约定的协议,如果超过了最大延时T1,下位机模块也将重发上一帧,重发的过程也是时钟中断服务程序调用SHELL函数的过程。 3.42 GSM返回参数的处理-SHELL函数 SHELL函数是进入时钟中断程序时被调用的,该函数是对GSM模块返回参数进行处理的函数。根据系统设计的要求,需要对GSM模块进行下列操作:呼叫对方模块号码、发送数据、阅读短信、删除短信。基于以上操作指令,如果操作成功GSM模块会分别返回不同的参数:>、+CMGS、

+CMGR、OK,根据接收到的不同参数,下位机模块将转向不同的操作步骤,判断并改变标志位的值。比如,如果某时刻接收到>,这表明呼叫对方模块号码获得成功,接下来需要发送数据,这时SHELL函数将检查发送不同数据所代表的标志位f_sending、f_ack、f_nack,从而决定需要发送何种类型的数据。如果

f_sending=1,需要发送E2PROM中的某个数据块;如果f_ack=1,需要发送确认帧,告诉对方已经成功接收到了对方发送的数据;如果f_nack=1,需要发送非确认帧,表明本方接收到的数据是错误的,并等待对方重新发送上一帧数据。需要说明的是,在同一时刻这三个标志位只有其中之一等于1,这是双方通信的半双工协议所强行约定的。对于其余三个返回参数,处理思想基本类似,在此不一一罗列。无耻悲鄙下流的网.学^网总是抄六-维~论,文.网如果操作失败,模块返回ERROR,也有三种可能的情况,分别是发短信出错、阅读短信出错、删除短信出错。SHELL函数将检查上述操作的标志位是否为1,并根据标志位的情况重新发送该AT指令。还有一个返回参数比较特殊,即在等待接收返回参数的过程中接收到了+CMTI。这不是本方主动操作获得的返回参数,而是表明上位机模块此刻有短信数据到来。SHELL函数将首先提取短信数据在SIM 卡中的存放序号,并将此序号存放到单片机2的指定单元中,然后根据序号发送阅读短信指令。如果没有接收到任何GSM模块返回的参数,即字符缓冲区中字符个数为0,发生这种情况有两种可能。其一,当单片机和模块初始化完毕

后,如果首次遍历E2PROM时发现有数据块需要发送,SHELL函数将会呼叫对方号码,试图建立连接,准备发送数据。因为在呼叫对方号码之前,下位机模块没有进行任何AT指令操作,模块也就不会返回任何参数,这是情况之一。其二,当下位机模块发送完数据块后,在等待对方应答帧的过程中,如果在最大的延时范围内没有收到对方的应答帧,SHELL函数也将会呼叫对方号码,准备重新发送上一数据块,超时重发机制在这里得到了反映。3.43 短信数据的处理-ExecData函数进入时钟中断调用SHELL函数时,如果接收到了返回的参数+CMTI,表明上位机模块向下位机模块发送了短信数据,可能是命令帧,也可能是确认帧或者非确认帧。在这种情况下,SHELL函数需要对短信内容进行分析,并根据短信的内容进行不同的处理,负责完成以上功能的就是ExecData 函数,它是被SHELL函数调用的,用来分析并处理短信数据。论文网

ExecData函数首先判断接收到的短信数据是否为有效帧,这里的有效帧仅仅指帧的格式是正确的,并不表明帧的内容也是正确的。判断的依据是判断帧头是否为规定的字符“WQ”。在有效帧的前提下,ExecData函数将根据帧的性质进行不同的处理。按照帧的性质来划分,有效帧分为信息帧和应答帧,这在3.2节有详细的介绍。因为接收的是上位机发送的短信数据,所以这里的有效帧只包括命令帧和应答帧。第一种情况,如果接收到的有效帧的帧号为00H,则表明该帧为命令帧。ExecData函数的处理方式是,首先判断I2C总线是否被占用,如果没有被占用就抢占,如果I2C总线忙则丢弃该帧。抢占总线后需要判断命令帧的校验子是否正确,如果正确表明该帧数据无误,接着将数据写入E2PROM的指定区域,该指定区域位于E2PROM前两个数据块的119~134字节处,如表6所示,并修改相应的标志位f_ack,准备向上位机模块发送确认帧;如果校验子不正确,则表明该命令帧错误,ExecData函数将丢弃该命令帧,并置位f_nack,期待对方重发。第二种情况,如果接收到的有效帧的帧号不是00H,则表明该帧一定是应答帧。ExecData函数首先判断帧号是否正确,从而确定该帧是否是本方期待的应答帧。如果帧号不正确,ExecData函数会丢弃该帧,表明此帧并非本方所发送数据帧相应的应答帧。帧号正确的应答帧,既可能是确认帧,也可能是非确认帧。如果收到的是确认帧,表明对方已经正确接收到了本方发送的数据帧,ExecData函数将会改变相应的标志位,并清除E2PROM中的块标记。接下来遍历E2PROM,看是否还有数据块需要发送。如果有,标志位f_sending被置位为1,反之,将会清除E2PROM中的发送标记,即将首字节清成00H,如表6所示;如果收到的是非确认帧,表明对方接收到了本方发送的数据帧,但是数据帧是无效的。这种情况ExecData函数处理起来比较简单,仅仅将标志位f_sending置为1即可,表明该数据帧需要重发。通过以上的分析,我们不难发现,整个程序错综复杂,函数之间相互牵扯。上一页[1] [2] [3] [4] [5] [6] [7] [8]

相关文档
最新文档