基于单片机的智能照明控制系统设计 下载本文

图3-8 全部定时控制从机程序流程图

3.3.2 单独定时控制程序设计

主控制器使用键盘输入被呼叫分控制器的地址,并通过网络向所有分控制器传送,在分控制器将该地址与本机地址进行比较后,判断是否是呼叫自己,如果是呼叫本机,就将本机地址传送给主控制器,进一步接收传送的数据,然后分控制器就将数据写入DS12887芯片,等到设定的时间到达时就执行关闭照明灯的命令。单独定时控制的主机程序流程图同图3-6所示,从机程序流程图如图3-9所示。

向主机发送本机地址与本机地址相符吗接收主机发送的地址中断程序入口初始化接收主机发送的数据

图3-9 单独定时控制从机控制程序流程

3.4 RS485通信程序设计

由于RS485总线是异步半双工的通信总线,在某一个时刻总线只可能呈现一种状态,所以这种方式一般适用于主机对从机的查询方式通信。在通信中,主机与各个从机进行通信,必须能对各个从机进行识别,这一识别功能是利用串口控制寄存器SCON的SM2位实现的。当串口以方式3工作时,发送和接收的每一帧信息都是11位,其中第9位数据位是可编程的,通过对SCON寄存器的TB8位置1或置0,以区别发送的是地址帧还是数据帧(规定地址帧的第9位为1,数据帧的第9位为0)。若从机的控制位SM2被设为1,则当接收的是地址帧时,数据装入SBUF,并置RI=1,向CPU发出中断申请,若接收的是数据帧,则不产生中断,信息被抛弃。若SM2被设为0,则无论是地址帧还是数据帧都将产生

RI=1中断标志,数据装入SBUF。利用这一功能,可以按照如下步骤进行数据通信:

(1) 将所有SM2位置1,使其处于只接收地址帧的状态。

(2) 主机发送一帧地址信息,其中前8位数据位表示通信的从机地址,第9位为1,表示当前帧为地址帧。

(3) 从机接收到地址帧后,如果是广播地址帧,则所有从机都将其SM2位置0,准备接收主机发送的数据或命令;如果不是广播地址帧,则将本机地址与帧中地址进行比较。如果地址相同,则将其SM2位置0,并发送本机地址帧,然后准备接收数据。如果地址不同,则丢弃当前数据,SM2位不变。

(4) 主机发送数据帧,相应的从机接收,其他从机则不受影响。 (5) 当主机需要与其他从机通信时,可以再次发出地址帧寻呼从机,重复这一过程。

主机在发送数据时,按照表3-1的数据格式进行传输。

表3-1

字节数n数据1数据2数据n字节奇偶校验在程序中,第9位发送数据位SCON中的TB8位,第9位接收数据位为SCON的RB8位,因此,发送数据前,可以通过对TB8位置1或0来确定要发送的是地址帧还是数据帧。而接收数据时,对地址帧的判断则是通过读取RB8位来获得的,RB8=1,当前帧为地址帧,RB8=0,当前帧为数据帧。

单片机的串口工作在方式3下,其波特率由定时器1(T1)的溢出率决定,

计算公式为:

SMOD 232波特率=T1的溢出率

定时器T1的溢出率的计算公式为:

溢出率= fosc32

则波特率的公式变为:

k的初值 )÷( 2 - T1

波特率=SMOD232× fosc32k的初值 )÷( 2 - T1系统所采用的晶振频率为11.0592MHz,T1工作在模式3下,波特率=9600b/s。

3.4.1 主机部分通信程序设计

系统中的主机通信程序分为4个部分,分别为预定义及全局变量部分、程序初始化部分、数据通信流程和发送数据部分。主机的数据通信的基本流程如下:

(1) 主机首先向所有从机发送地址帧对要通信的从机进行呼叫,发送地址帧时需将TB8位置1。

(2) 发送地址帧后,如果发送的是广播地址帧,则不需要从机应答,待延迟一段时间后,调用发送函数发送数据;如果发送的是非广播地址帧,主

机则要接收应答,若应答信号中的地址与前面发送的地址并不相同,主机将重新发送地址帧呼叫,否则调用发送函数发送数据。

(3) 发送完数据后,主机等待从机的校验信号,如果接收到0X0F数据,表示发送成功,通信结束,否则主机将重新发送数据,直至发送成功。

该部分程序对应的流程图如图3-10所示。

是广播地址吗N发送地址帧等待从机应答开始 Y应答信息与发送的地址相符吗YN 调用发送函数发送数据

N等待从机应答发送成功吗Y结束