系统主程序流程图如图3所示。系统上电后,先关闭看门狗定时器,开关电源进入SNOOZE节功状态,同时关闭无线通讯模块电源,进行I2C接口的初始化,读取拨码开关状态,并根据拨码开关的状态进行单片机通用I/O口的初始化,以确定其作为脉冲量输入端口还是开关量输入端口,或是撤防设防输入端口。其中,若作为脉冲量输入端口,则调用相应脉冲量初始化程序,设置其端口为上升沿触发;若作为开关量输入端口,则调用相应开关量初始化程序,设置其端口为下降触发;若作为撤防设防输入端口,则调用设防撤防初始化程序,当前端口状态为设防状态时,进行撤防初始化,设置其端口为上升沿触发。当前端口状态为撤防状态时,进行设防初始化,设置其端口为下降沿触发。
端口初始化结束之后,进行串行通讯UART接口初始化,打开UART接收中断使能,使其能响应网关发送给子节点的命令。定时器连续工作在计数模式,打开计数器溢出中断使能。
单片机各部分初始化结束后,进入LPM3休眠模式,只有ACLK始终保持工作,因此在串行通讯UART和定时器初始化中,将其工作时钟定义为ACLK是十分重要的,否则进入LPM3休眠模式后,串口和定时器将停止工作和相应中断。进入LPM3休眠模式后,系统的功耗最低。
系统可响应I/O中断,当其作为脉冲量输入端口时,脉冲量上升沿触发中断,经过去抖处理后,脉冲量计数增1,遇到进位时,调用函数处理进位,最后将计数值写入FRAM,进入LPM3休眠模式。当其作为开关量输入端口时,开关量下降沿触发中断,停止计数器计数,打开电源,打开串行通讯,重复发送报警信息,直到收到网关应答信息时才停止报警,恢复定时器计数,进入LPM3休眠模式。
数据发送要遵循通讯协议,图4所示为数据发
相关专题: