接收数据时,P89LPC916把nRF905的TRX_CE引脚置为高电平,TX_EN引脚拉为低电平后,就开始接收数据。本设计中P89LPC916设定的40s内一直判断nRF905的DR引脚是否变高,若为高,则证明接收到了有效数据,可以退出接收模式,若一直没有接收到,待时间到时也退出接收模式。退出后在待机模式,P89LPC916通过SPI总线把nRF905内部的接收数据寄存器中的数据读出,即接收到的有效数据。
软件设计
本系统设计的重点是控制nRF905的程序设计,首先是对nRF905进行初始配置,配置完成后按需要编写用户数据的发送或接收程序。

图3 软件系统的整体数据处理流程
初始化
·初始化nRF905的射频配置寄存器
这些寄存器中有很多信息,必须根据实际情况进行配置,本设计中nRF905外接16MHz晶体,XOF应配置为0
11;PA_PWR为发射功率、RX_RED_PWR为接收灵敏度,可根据需要配置;另外还有发送地址、接收地址、发送数据和接收数据的长度(字节数),可根据实际应用配置。注意这组寄存器中还有接收时的实际地址,而发送地址在其他单独寄存器中。
·配置nRF905的发送地址
在实际工作中,nRF905可以自动滤除地址不相同的数据,只有地址匹配且校验正确的数据才会被接收,并存储在接收数据寄存器中。本设计中配置最多4个字节(32位),发送端的发送地址应与接收端设备的接收地址相同。
用户程序
根据系统的硬件设计方案,分为发送端和接收端两个部分,软件系统的整体数据处理流程如图3所示。软件系统分为5个模块:温湿度采集模块、外部设备模块、RF发送模块、RF接收模块、中央监控系统报表统计分析模块。
通信协议
系统结构为有多个发送端向1个接收端单向发送温湿度数据,同时要求接收端能够根据接收的数据内容判断信号来自哪一个发送模块;接收端根据温湿度数据是否越界从而驱动前端外部设备。为此,将系统通信协议设置为如下格式:
Preamble为引导字节,Add为接收机地址,Payload为有效加载数据(包括接收显示单元识别码Rid、源发送单元识别码Sid及Data字——在接收时Data字高八位内容即为温度数据,低八位内容即为湿度数据;发送控制命令即为外部设备控制字,长度为2字节),CRC为校验码。nRF905处于发射模式时,Add和Payload由微控制器按顺序送入射频模块nRF905,Preamble和CRC由nRF905自动加载。接收时,nRF905先接收一个数据包,分别验证Preamble、Add和CRC正确后,再将Payload数据送入微控制器处理;当接收显示单元微处理器判断Payload中的Rid和本机识别码一致时,继续处理后继数据,并通过Sid来判断收到的数据来自哪一个监测点,保存至中央监控系统数据库供后期数据分析处理。
结语
基于nRF905、湿度传感器HS1101以及DS18B20智能温度传器设计的分布式多点测量系统能很好的满足粮库温湿度监测的要求。自2006年3月在中山市某应急粮加工中心使用至今,系统稳定可靠,简单易用。
参考文献:
1.Dallas Semiconductor. DS18B20 Datasheet.http://www.maxim-ic.com.cn,2005-06-14
2.Nordic VLSI ASA Inc.nRF905 Datasheet. rev1-2.http://www.nvlsi.com,2005-01-22
3.毛哲、谢兆鸿等,粮情智能测控系统的研制,微计算机信息,2003.6:39-40