“基于485总线的评分系统”

“基于485总线的评分系统”说明
(一)设计思路和方法
RS485为半双工通信。只有通信双方一方处于发送,一方处于接收时,通信才能正常进行。本程序模拟modebus协议,采用主、从技术,上位机的主控制器可以与所有的下位机通信,也可以单独与一个指定的下位机通信。通过RS232转485的转换器引出两根总线,将多个带485模块的下位机控制程序的单片机挂载在该总线上,各单片机有序地通过总线实现评分操作,将分数传给上位机进行显示。
模拟modebus协议,本程序上下位机的数据包都只含5个字节。基本格式:数据包头(0x5A)+地址码(广播地址/从机地址)+功能码+携带数据(一个字节)+校验码字节,携带数据部分可以扩充多个字节,可以视情况进行修改。
数据包具体定义如下:
(1)主机检测从机是否正常相关数据包:(主机与单个从机设备通信)
A、设备正常检测数据包:
方向:上位机—–>下位机
数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+自定义内容(Check_Content)+校验字节
功能:查询下位机是否正常。正常,下位机发送回应查询数据包;不正常,不回应;数据传输过程发生错误,下位机发送回应错误数据包,上位机可以通过设置多次轮询来重新检测该设备是否正常;
B、回应查询数据包:
方向:下位机—–>上位机
数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+自定义内容(接收自主机Check_Content)+校验字节
C、回应错误数据包:
方向:下位机—–>上位机
数据包消息:数据包头+从机地址+检测功能码(Fun_CheckSlave)+错误码(ErrorInfo)+校验字节
(2)主机获取从机评分相关数据包:(主机与单个从机设备通信)
D、获取多、单机评分数据包:
方向:上位机—–>下位机
数据包消息:数据包头+检测正常从机地址+读下位机功能码(Fun_ReadInfo)+从机地址+校验字节
功能:对检测正常的设备,进行一次轮询,获取评分已经准备好的从机的分数。对于单机直接进行通信,没有轮询。
E、结果返回数据包:
方向:下位机—–>上位机
数据包消息:数据包头+从机地址+复位功能码(Fun_ReadInfo)+从机返回的分数值+校验字节(分数值>100:表示上面提及的为准备好,错误消息的变体)
(3)此轮评分结束相关数据包
F、复位数据包:(主机与所有从机通信)
方向:下位机—–>上位机
数据包消息:数据包头+广播地址+复位功能码(Fun_Reset)+从机返回的分数值+校验字节
功能:指示所有正常连接的从机进行复位操作,准备下一轮的评分。
(二)评分系统电路原理图
1. 485模块电路原理图

  1. 导航按键电路图

  2. LED数码管和二极管显示电路图

(三)电路工作原理
485_D/R为MAX485使能,当为高时,485为发送态;当为低时,485为接收态。485_D/R LED指示485_D/R值的状态。
485_RXD引脚接收数据,485_RX LED点亮时表示正在接收数据。
485_TXD引脚发送数据,485_TX LED点亮时表示正在发送数据。
在之前的测试DEMO中已经对这些电路的实现进行了详细的阐述,这里不再述说。

(四)程序总框图设计流程如下所示

(五)下位机相关寄存器配置
1. 选择485芯片引脚:
P_SW2:外围设备功能切换控制寄存器2(不可位寻址)

串口2可在2个地方切换,由S2_S控制位来选择。

该开发板485芯片使用串口2的第2组引脚:
P_SW2 |= 0x01 ;

  1. 设置串口2的工作模式:
    S2CON:串行口2的控制寄存器

S2SM0指定串行口2的工作方式。

设置串行口2为:8位UART,波特率可变;允许串行口2接收
S2CON = 0x50 ;

  1. 选择定时器工作模式:
    AUXR:辅助寄存器(不可位寻址)

T2R:定时器2运行控制位
T2_C/T:控制定时器2用作定时器或计数器;
T2x12:定时器2速度控制位。
设置定时器2为1T模式,并启动定时器2
AUXR |= 0x14 ;

  1. 串行口2中断允许:
    IE2:中断允许寄存器2(不可位寻址)

ES2为串行口2中断允许位
IE:中断允许寄存器(可位寻址)中的EA为CPU的总中断允许控制位。
允许串行口2中断:
IE2 |= 0x01 ;
EA = 1 ;

  1. S2BUF为串口2的收/发缓冲寄存器;S2RI与S2TI为串口2的收/发中断请求标志位。

  2. 上下位机中,数据包相关功能码及附加数据定义如下:
    功能码:

    define Fun_ReadInfo “03”

    define Fun_WriteInfo “05”

    define Fun_CheckSlave “08”

    define Fun_AddrErr “10”

    define Fun_Reset “01”

    附加数据:

    define ErrorInfo “6f”

    define Packet_Head “5A”

    define Broadcast_Addr “00”

    define Check_Content “13”

(六)案例代码见“流水灯工程”

(七)测试方法
1.用STC ISP默认设置,对连接到485总线的所有单片机进行操作:打开工程中的HEX并下载
2.下载后观察现象为:最左边两个数码管显示00,最右边3个数码管显示000
3.本案例需要辅助操作,从机编号(地址)就绪标志通过key2控制,设置评分就绪的标志通过key1控制;具体操作及相关现象参看工程中的视频文件。视频中仅连接2个单片机,实际中我们可以连接多个单片机,进行评分。

你可能感兴趣的:(学习)