为了方便控制发送过程,首先应初始化SPI接口和一些其他的外部控制设备。然后通过设置射频配置来完成NRF905无线通信模块的初始化。最后开始整个系统的发送和接收工作。
以下以发送端的程序为例,介绍本次所设计的无线呼叫系统。
void main(void)
{
...
Ini_System(); //初始化系统,包括初始化SPI和初始化单片机
while(1)
{
Wait_Rec_Packet(); //等待接收完成
if(!key1) //按键按下发送数据
{
if(!key1)
{
…
//发送数据
success_flag=0;
timeout=0xfff;
red_led=0;
while(timeout!=0)
{
timeout--;
Wait_Rec_Packet(); //等待接收完成
if(success_flag) //如果接收成功
//设置为待机模式
}
if(success_flag==0) //如果接收失败
//显示接收失败
else
//显示接收成功
success_flag=0;
}
}
}
}
在上面这个程序中,Ini_System函数主要负责单片机和SPI总线的初始化,之后程序再做了一下其他设备的初始化,如LED灯等;TxPacket函数的具体实现调用了8次SpiWrite函数,前四次表示的是设定发送参数。第一次调用SpiWrite函数写入的发送数据的地址,第二次调用写入发送数据地址的长度,第三次调用写入发送数据缓冲区的首地址,第四次调用写入发送数据的大小。后四次的调用则是发出发送指令。
当测试无线通信模块接收端时,首先发射端的NRF905无线通信模块应保持发射状态,然后运行数据接收程序。接收程序初始化串口、SPI总线、LED灯等设备,并设置接受端的射频配置寄存器,然后将模式切换到接收模式接收数据包,并将数据存储在缓冲区中。可以通过串口通信程序从接收数据缓冲区中读取数据后传送数据到PC机上并显示结果。
4.3 无线呼叫系统防碰撞解决方案
由于本系统使用的通信链路由多个呼叫器对应一个主机服务器构成多点对一点结构,所以容易出现多路存取数据碰撞问题,也就是说当多个呼叫器同一时刻发起呼叫时,数据通信就会因为发生数据碰撞而导致失败。数据的碰撞问题也被称为无线通信中的多路存取问题。把多个通信通路竞争一个通信信道的通信方式叫做多路存取。由于每个通信通路都有规定的通路容量,且通路容量是由这个通信通路的最大数据传输率以及供它使用的时间片确定的。故分配给每个用户的通路容量必须满足:当有多个发射器同时把数据传输给同一个接收器时不能出现互相干扰(碰撞)。在无线电技术中,多路存取问题是一个十分经典的问题。由此,也发展了许多方法,以便把不同的用户信号分开。第二章已经列举并介绍了经典的四种方法:空分多路法,频分多路法,时分多路法以及码分多路法。 基于NRF905的无线呼叫系统设计与实现(16):http://www.751com.cn/jisuanji/lunwen_1185.html