2.1 主机控制命令
主机发出的控制命令有两种。第一种是定长的,包含8个字节(见图5)。C3H是开始字节,5AH表示结束;地址1、地址2表示控制器在整个系统中所处的位置;数据1、数据2包含了对矩阵输入输出更新的具体信息;优先级代表了本次命令的优先级别,00H级别最高;校验字节为前6个字节之和。第二种命令是分组控制命令,长度不定(见图6),C5H 表示第二种控制命令的开始;地址1、地址2同第一类控制命令;数据0是本次分组命令所控制的输出通道;数据1至数据n是本次分组中的输入通道;校验字节为前几个字节之和对FFH取余;55H 表示本次命令的结束。
2.2主程序
控制器在没收到主机发送的控制命令时,会一直运行于主程序之中。主程序主要完成对系统的初始化;定时向看门狗电路发送电压翻转信号;对主机的控制命令发送回传信息。
在初始化时,先从存储器中读取信息,判断读出的数据是否超出了矩阵的输入输出范围。若数据无误,则按此信息(一般是上次关机时控制器的状态)初始化矩阵。若发现某一数据有误,则按预先的约定初始化矩阵。控制器在向主机返回命令之前要判断回响标志,若标志为“1”,则调用回响主机的子程序,否则会跳过这一步,继续向看门狗电路发送电压翻转信号,以示其工作正常。
2.3 串口中断服务子程序
一旦控制器检测到串口有数据到来,就会发出中断请求信号。单片机在执行完当前的指令后,会转向服务子程序(流程如图7)。在子程序内要完成对主控命令的判断、分析、处理,完成对矩阵的更改及信息的保存等任务。中断服务子程序也是软件设计的核心部分与难点之处。在接收完主机发送的命令之后,要处理的事务有:
(1)判断命令是否正确。这包括判断命令是否正确;检查命令是第一类还是第二类。若是第一类命令,要检查其起始、结束字节和校验字节是否正确;输入输出是否在规定的范围之内。若是第二类命令,要保存分组信息,开启记时器。若检查有一点不对,将放弃该命令,恢复现场,退出服务子程序。