3.3.2 收发模式的自动识别设计
为简化编程,增强代码通用性,本文为上位单片机和下位单片机设计了完全相同的同一套程序代码,系统自动识别并设置工作模式,无需人为区分单片机是接收还是发送。实现接收和发送模式自动切换的代码如下:
void Switch_RT(uchar SW, uchar mode)
{ //收发模式切换子函数
CE=0; //待机
if(SW) //为1
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG) & 0xfe); //发射模式
else //为0
SPI_WR_Reg(CONFIG, SPI_RD(CONFIG) | 0x01); //接收模式if(mode)
CE=1; //拉高CE启动收发
}
程序默认无线模块处于接收模式,下位单片机测得温度数据后,将Config寄存器的PRIM_RX位置0,控制nRF2401工作于发送模式,将数据打包发出,随即将PRIM_RX位置1,处于接收模式;上位机端nRF2401接收到数据包后,即由上位单片机将其读出并通过串口传给上位PC机。
PC机向下位机发送指令时,首先将指令发给上位单片机,上位单片机一旦接到指令,即将PRIM_RX位置0,控制nRF2401工作于发送模式,发出数据包;下位单片机通过nRF2401接收后将数据包读出执行。
4 、系统运行情况
PC机应用程序采用Visual Studio2010 VB.net编写,上位单片机与PC机应用程序之间的通信通过串口控件实现,二者之间的参数设置需一致。
程序运行界面如图4所示,各库区温度正常时,温度值字体颜色正常,某库区温度超过正常值时,相应温度值字体以红色显示并闪烁,下位单片机自动接通对应库区继电器,启动散热风扇进行降温;当温度下降至正常值后,单片机控制继电器关断散热风扇,同时温度值字体颜色恢复正常。温度值右侧标签显示的数据是设定的正常温度范围。