NRF905一对多的问题

ywchn999123 2012-05-10 01:30:52
各位大虾,我现在在做NRF905的毕设。情况是这样的,我有一个主单片机板子,2个采集板子和一个控制板子。原理是两个采集部分采集到数据,通过NRF905传给主单片机,然后主单片机通过判断向控制的板子发送命令,做出相应的控制。单片机是用的STC的。请问这之间需要注意些什么,怎么样才能实现主单片机的接收和发送?????还有能否提供这方面的c程序?拜托了!!!
...全文
1433 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
tingzhoubao 2014-09-01
  • 打赏
  • 举报
回复
楼主,#7是你用NRF905实现一发多收的源程序吗?
rfinchina2012 2012-08-14
  • 打赏
  • 举报
回复

nRF905是挪威Nordic公司推出的一款单片射频发射器芯片,采用32引脚5mm×5mm QFN封装,工作于433、868、915MHz 3个ISM(工业、科学和医学)频道,其中国内433频段可以免费使用。nRF905由频率合成器、接收解调器、功率放大器、晶体振荡器、调制器等功能组成,不需要外加声表滤波器也可以有良好的通信效果。nRF905使用SPI接口可以和任何MCU进行通信,其中地址、输出功率和通信频道可通过程序进行配置,所以可以用于多机通信。nRF905融合了ShockBurstTM技术,可以自动处理数据包字头,且内置CRC校验功能,确保数据可靠传输。nRF905功耗很低,在以-10dBm的功率发射时,工作电流也只有11mA;而对应接收机的工作电流只有12.5 mA,芯片可以软件设置空闲模式、关机模式,易于节能设计。适合工业数据采集、无线报警及安全系统等诸多领用。
NRF905基本特性
工作电压:1.9-3.6V
调制方式:GFSK
接收灵敏度:-100dBm
最大发射功率: 10mW (+10dBm)
最大传输数率:50kbps
瞬间最大工作电流: <30mA
工作频率:(422.4-473.5MHZ)
低功耗,待机模式下仅2.5uA;
可软件编程实现自动重发功能;
硬件集成载波侦听功能,地址匹配、收发完成状态指示;
发射速率恒定为50Kbit/s,GFSK调制解调抗干扰性能强;
433/868/915工作频段,国内433MHZ为ISM频段可免许使用;
接收发送功能合一,可实现半双工通信,收发完成状态指示;
10dbm发射功率条件下,配外置鞭状天线通信距离在300米左右;
内置硬件8/16位CRC校验,数据传输可靠稳定,降低系统开发难度;
芯片地址、工作频率可编程,可采用TDMA-FDMA原理实现无线网络通讯;
内置SPI接口,最高SPI时钟可大10Mbit/s,也可通过I/O口模拟SPI实现;
室内通信良好通信效果,3层之间可实现有效通信,很强的扰障碍穿透性能;
单次最多可发送接收32字节,并可软件设置发送/接收缓冲区大小2/4/8/16/32字节;
10dbm(10mw-200米左右)微功率:http://item.taobao.com/item.htm?id=1013188358&
20dbm(0.1w-500米左右)微功率:http://item.taobao.com/item.htm?id=1942649132&
27dbn(0.5w-800米左右)远距离:http://item.taobao.com/item.htm?id=3642435356&
30dbm(1w-1000米左右)远距离:http://item.taobao.com/item.htm?id=17739582&
33dbm(2w-2000米左右)远距离:http://item.taobao.com/item.htm?id=2954348816&
NRF905-51版本模块功能介绍:http://item.taobao.com/item.htm?id=10400633068&frm=
NRF905-avr版本模块功能介绍:http://item.taobao.com/item.htm?id=10508099098&frm=
NRF905-51评估板:http://item.taobao.com/item.htm?id=8731411120&
NRF905-AVR评估板:http://item.taobao.com/item.htm?id=1213057118&
NRF905-430评估板:http://item.taobao.com/item.htm?id=2883025694&

提供10mw 100mw 500mw 1W 2W NRF905系列模块,欢迎交流 需要请发邮件35625400@qq.com 索要资料
交流方式: 电话:024-62397375(陈先生) QQ: 35625400 MSN: ll88mm88@hotmail.com 邮箱: 35625400@qq.com
ywchn999123 2012-05-26
  • 打赏
  • 举报
回复
#include"reg52.h"
#include <intrins.h>
#include<absacc.h>
#include<stdio.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//uint add=0xE8;

sbit RS = P2^5;
sbit RW = P2^6;
sbit E = P2^7;
sbit RES = P2^3;
sbit PSB = P2^4;
sbit F= P2^2;

sbit TXEN = P1^0;
sbit TRX_CE = P3^3;
sbit PWR = P1^1;

//状态输出口//
sbit CD = P1^2;
sbit AM = P3^2;
sbit DR = P1^3;
//SPI口定义//
sbit MISO = P1^7;
sbit MOSI = P1^4;
sbit SCK = P1^6;
sbit CSN = P1^5;
#define DataPort P0 //MCU P0<------> LCM
unsigned char value;
unsigned int flag=1;

void Init_Timer0();

void InitUART (void)
{

SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit 重装
TH1 = 0xFD; // TH1: 重装值 9600 波特率 晶振 11.0592MHz
TR1 = 1; // TR1: timer 1 打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
}

void DelayUs2x(unsigned char t)
{
while(--t);
}
void DelayMs2x(unsigned char t)
{

while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
检测忙位
------------------------------------------------*/
void Check_Busy()
{
RS=0;
RW=1;
E=1;
DataPort=0xff;
while((DataPort&0x80)==0x80);//忙则等待
E=0;
}
/*------------------------------------------------
写命令
------------------------------------------------*/
void Write_Cmd(unsigned char Cmd)
{
Check_Busy();
RS=0;
RW=0;
E=1;
DataPort=Cmd;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
写数据
------------------------------------------------*/
void Write_Data(unsigned char Data)
{
Check_Busy();
RS=1;
RW=0;
E=1;
DataPort=Data;
DelayUs2x(5);
E=0;
DelayUs2x(5);
}
/*------------------------------------------------
液晶屏初始化
------------------------------------------------*/
void Init_ST7920()
{
DelayMs2x(20); //大于40MS的延时程序
PSB=1; //设置为8BIT并口工作模式
DelayMs2x(1); //延时
RES=0; //复位
DelayMs2x(1); //延时
RES=1; //复位置高
DelayMs2x(10);
Write_Cmd(0x30); //选择基本指令集
DelayUs2x(30); //延时大于100us
Write_Cmd(0x30); //选择8bit数据流
DelayUs2x(20); //延时大于37us
Write_Cmd(0x0c); //开显示(无游标、不反白)
DelayUs2x(30); //延时大于100us
Write_Cmd(0x01); //清除显示,并且设定地址指针为00H
DelayMs2x(15); //延时大于10ms
Write_Cmd(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动
DelayUs2x(30); //延时大于100us
}



void Lcd_Pst(unsigned char x,unsigned char y)
{
switch(y)
{
case 1:Write_Cmd(0x80+x);break;
case 2:Write_Cmd(0x90+x);break;
case 3:Write_Cmd(0x88+x);break;
case 4:Write_Cmd(0x98+x);break;
default:break;
}
}

void Lcd_Putstring(unsigned char code *s)
{
while(*s>0)
{
Write_Data(*s);
s++;
DelayUs2x(50);
}
}

/*------------------------------------------------
清屏
------------------------------------------------*/
void ClrScreen()
{
Write_Cmd(0x01);
DelayMs2x(15);
}

uchar TxRxBuffer[10];
uchar rxBuffer[6]={1,2,3,4,5,6};
bit lcdbit;
//延时
void Delay(uint x)
{
uint i;
for(i=0;i<x;i++){
_nop_();
}
}

//----------------------------------------------
//RF寄存器配置//

unsigned char idata RFConf[11]=
{
0x00, //配置命令
0x6C, //CH_NO,配置频段在433.2MHZ
0x0C, //输出功率为10db,不重发,节电为正常模式
0x44, //地址宽度设置,为4字节
0x0A,0x06, //接收发送有效数据长度为4字节
0xE7,0xE7,0xE7,0xC2,//接收地址
0xDE, //CRC充许,16位CRC校验,外部时钟信号使能,16M晶振
};


//SPI口写数据到nRF905
void SpiWrite(uchar b)
{
uchar i=8;
while (i--)
{
Delay(10);
SCK=0;
MOSI=(bit)(b&0x80);
b<<=1 ;
Delay(10);
SCK=1;
Delay(10);
SCK=0;
}
SCK=0;
}
//由nRF905读数据
uchar SpiRead(void)
{
uchar i=8;
uchar ddata=0;
while (i--)
{
ddata<<=1 ;
SCK=0;
_nop_();_nop_();
ddata|=MISO;
SCK=1 ;
_nop_();_nop_();
}
SCK=0;
return ddata;
}
//接收数据包
void RxPacket(void)
{
uchar i;
i=0;
while(DR)
{
TxRxBuffer[i] = SpiRead();
i++;
}

}

/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
void TxPacket(void)
{
TXEN=1;
CSN=0;
SpiWrite(0x22); //写发送地址,后面跟4字节地址//
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xC5);
CSN=1;
_nop_();_nop_();
CSN=0;
SpiWrite(0x20); //写发送数据命令
//SpiWrite(xuzu[0]); //四字节数据,符号位或百位
SpiWrite(rxBuffer[0]); //十位
SpiWrite(rxBuffer[1]); //个位
SpiWrite(rxBuffer[2]); //小数位

SpiWrite(rxBuffer[3]);
SpiWrite(rxBuffer[4]);
SpiWrite(rxBuffer[5]);



CSN=1;
_nop_();_nop_();
TRX_CE=1; //使能发射模式//
Delay(50); //等待发送完成
TRX_CE=0;
while(!DR);

}

/*
;写发射数据命令:20H
;读发射数据命令:21H
;写发射地址命令:22H
;读发射地址命令:23H
;读接收数据命令:24H
*/
//--------------------------------------
void DelayMs(uint n) //j=115@F=11.0592MHz
{ uchar j;
while(n--)
{for(j=0;j<115;j++);}
}
//等待接收数据包
//uchar temp;
void Wait_Rec_Packet(void)
{
TXEN=0;
TRX_CE=1;
while(1)
{
if(DR)
{
TRX_CE=0; //若数据准备好则进入待机模式,操作SPI
CSN=0;
SpiWrite(0x24);
RxPacket();
CSN=1;

DelayMs(200);

//}
break;
}
}
}
//初始化配置寄存器
void Ini_System(void)
{
uchar i;
CSN=1;
SCK=0;
PWR=1;
TRX_CE=0;//SPI写入
TXEN=0;
_nop_();
CSN=0;
for(i=0;i<11;i++)
{
if((i==9)&&(flag==0))RFConf[i]=0xC2;
if((i==9)&&(flag==1))RFConf[i]=0xC3;
if((i==9)&&(flag==2))RFConf[i]=0xC4;
SpiWrite(RFConf[i]);
}


//
CSN=1;
PWR=1;
if(flag!=2){
TRX_CE=1;//
TXEN=0; }
Delay(1000);

}


void main()
{
unsigned char kk=1;

InitUART();
Init_ST7920();
Ini_System();
Lcd_Pst(2,2);
Lcd_Putstring("Waitting...");
while(1)
{

switch(RFConf[9])
{
case 0xC2: {
Wait_Rec_Packet();
if(kk==1){kk=0;ClrScreen(); }
DelayMs(100);
Lcd_Pst(0,1);
Lcd_Putstring("C2 Rx1:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[5]+0x30);
Lcd_Pst(2,2);
Write_Data(TxRxBuffer[6]+0x30);
Write_Data(TxRxBuffer[7]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[8]+0x30);
Write_Data(TxRxBuffer[9]+0x30);
flag=1;
break;}
case 0xC3: {
Wait_Rec_Packet();
DelayMs(100);
Lcd_Pst(0,3);
Lcd_Putstring("C3 Rx2:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[5]+0x30);
Lcd_Pst(2,4);
Write_Data(TxRxBuffer[6]+0x30);
Write_Data(TxRxBuffer[7]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[8]+0x30);
Write_Data(TxRxBuffer[9]+0x30);
flag=2;
break;}
case 0xC4: {
ClrScreen();
Lcd_Pst(0,1);
Lcd_Putstring("C4 Tx:");
TxPacket();
ClrScreen();
Lcd_Pst(0,2);
Lcd_Putstring("C4 Tx:");
Write_Data(0x30+TxRxBuffer[0]);
Write_Data(0x30+TxRxBuffer[1]);
Write_Data(TxRxBuffer[2]+0x30);
Write_Data('.');
Write_Data(TxRxBuffer[3]+0x30);
Write_Data(TxRxBuffer[4]+0x30);
Write_Data('.');
Write_Data(rxBuffer[5]+0x30);

flag=0;
break;}
default: break;
}
Ini_System();
DelayMs(1000);
}
}


ywchn999123 2012-05-26
  • 打赏
  • 举报
回复
谢谢,其实我们已经弄的差不多了。通过地址码来区分的,就是一个地址问题,然后在switch一次判断。另外我们外加了fameview,GSM和一个远程控制软件。综合起来功能还是比较充实的。最后还是谢谢你的热心!!!!
langeldep 2012-05-15
  • 打赏
  • 举报
回复
其实这种东西类似早期的串口通信, 你不必使用socket, 就使用 NRF905即可。 你要遵循其规则, 我上面发了例子, 希望对你有用。
langeldep 2012-05-15
  • 打赏
  • 举报
回复
NRF905 无线传输c程序
  发送部分
  /****************************
  //写发射数据命令:20H
  //读发射数据命令:21H
  //写发射地址命令:22H
  //读发射地址命令:23H //读接收数据命令:24H
  ******************************/
  #include <reg52.h>
  #define uint unsigned int
  #define uchar unsigned char
  sbit TXEN = P2^7; //配置口定义5`6`7//
  sbit TRX_CE = P2^6;
  sbit PWR = P2^5;
  sbit MISO = P2^2; //SPI口定义0`1`2`3//
  sbit MOSI = P2^3;
  sbit SCK = P2^1;
  sbit CSN = P2^0;
  sbit DR = P2^4; //状态输出口4//
  sbit led=P1^0;
  /************//*RF寄存器配置*//*************
  // 0x00, //配置命令//
  // 0x6C, //CH_NO,配置频段在433.2MHZ
  // 0x0E, //输出功率为10db,不重发,节电为正常模式
  // 0x44, //地址宽度设置,为4字节
  // 0x03,0x03, //接收发送有效数据长度为3字节
  // 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
  // 0xDE, //CRC充许
  //******************************/
  /*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
  0xe7,0xe7,0xe7,0xe7,0xde};
  */
  uchar RFConf[11]=
  {
  0x00, //配置命令//
  0x4c, //CH_NO,配置频段在423MHZ
  0x0C, //输出功率为10db,不重发,节电为正常模式
  0x44, //地址宽度设置,为4字节
  0x02,0x02, //接收发送有效数据长度为32字节
  0xCC,0xCC,0xCC,0xCC, //接收地址
  0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
  };
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
  }
  void SpiWrite(uchar date) //用SPI口写数据至NRF905内//
  {
  uchar i;
  for(i=0;i<8;i++)
  {
  delay(1);
  SCK=0;
  MOSI=(date&0x80);
  date<<=1 ;
  delay(1);
  SCK=1;
  delay(1);
  SCK=0;
  }
  SCK=0;
  }
  void TxPacket(void)
  {
  // TXEN=1;
  CSN=0;
  SpiWrite(0x22); //写发送地址,后面跟4字节地址//
  SpiWrite(0xcc);
  SpiWrite(0xcc);
  SpiWrite(0xcc);
  SpiWrite(0xcc);
  CSN=1;
  delay(1);
  CSN=0;
  SpiWrite(0x20); //写发送数据命令,后面跟三字节数据//
  SpiWrite(0x01);
  SpiWrite(0x02);
  // SpiWrite(0x04);
  CSN=1;
  delay(1);
  TRX_CE=1;
  TXEN=1; //CE,EN同时为1,为发送模式
  delay(1); //等带发送完成//
  led=~led;
  // while(!DR); //在非屏蔽状态下,只能发射一次
  TRX_CE=0;
  //led=~led; //加上led后,对接收产生了一定的影响,
  //while(!DR); //有时多接收一次的数据
  }
  void Ini_System(void)
  { //初始化配置寄存器//
  uchar i;
  // delay(1);
  CSN=1;
  SCK=0;
  DR=0;
  PWR=1; //进入掉电模式
  TRX_CE=0;
  TXEN=0;
  delay(1);
  CSN=0; //进入SIP模式
  for(i=0;i<11;i++)
  {
  SpiWrite(RFConf[i]); //设置配置寄存器
  }
  CSN=1; //关闭SPI,进入发射状态
  // PWR=1;
  }
  void main(void)
  {
  led=1;
  Ini_System(); //设置配置,并进入发射模式
  // PWR=1; //进入掉电模式
  while(1)
  {
  TxPacket(); //发送数据
  led=~led;
  DR=0;
  }
  }
  接收部分
  #include <reg52.h>
  #define uint unsigned int
  #define uchar unsigned char
  bit lcdbit;
  sbit TXEN = P2^7; //配置口定义7`6`5//
  sbit TRX_CE = P2^6;
  sbit PWR = P2^5;
  sbit MISO = P2^2; //SPI口定义0`1`2`3//
  sbit MOSI = P2^3;
  sbit SCK = P2^1;
  sbit CSN = P2^0;
  sbit DR = P2^4; //状态输出口4//
  sbit led=P1^0;
  /************//*RF寄存器配置*//*************
  // 0x00, //配置命令//
  // 0x6C, //CH_NO,配置频段在433.2MHZ
  // 0x0E, //输出功率为10db,不重发,节电为正常模式
  // 0x44, //地址宽度设置,为4字节
  // 0x03,0x03, //接收发送有效数据长度为3字节
  // 0xE7,0xE7,0xE7,0xE7,//接收地址,16位CRC校验,外部时钟信号使能,16M晶振//UP_CLK输出1MHZ频率
  // 0xDE, //CRC充许
  //******************************/
  /*uchar code RFConf[11]={0x00,0x6c,0x0e,0x44,0x03,0x03,
  0xe7,0xe7,0xe7,0xe7,0xde};
  */
  uchar RFConf[11]={ //配置命令//
  0x00,0x4c,0x0c,0x44,0x02,0x02,
  0xcc,0xcc,0xcc,0xcc,0x58 //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
  };
  uchar TxRxBuffer[2];
  uchar date;
  void delay(uint z)
  {
  uint x,y;
  for(x=z;x>0;x--)
  for(y=110;y>0;y--);
  }
  void SpiWrite(unsigned char date) //用SPI口写数据至NRF905内//
  {
  uchar i;
  for(i=0;i<8;i++)
  {
  delay(1);
  SCK=0;
  MOSI=(date&0x80);
  date<<=1 ;
  delay(1);
  SCK=1;
  delay(1);
  SCK=0;
  }
  SCK=0;
  }
  unsigned char SpiRead(void) //from 905 read data//
  {
  uchar i;
  for(i=0;i<8;i++)
  {
  date<<=1 ;
  SCK=0;
  delay(1);
  date|=MISO;
  SCK=1 ;
  delay(1);
  }
  SCK=0;
  return(date);
  }
  void RxPacket(void) //接收数据包//
  {
  uchar i;
  //while(DR)
  for (i = 0 ;i < 2 ;i++)
  {
  //led=~led;
  TxRxBuffer[i] = SpiRead();
  //i++;
  }
  }
  void Wait_Rec_Packet(void) //等待接收数据包//
  {
  // uchar temp;
  // PWR=1;
  TXEN=0; //接收模式
  TRX_CE=1;
  delay(2);
  while(!DR)
  { delay(10);
  // if(DR) //数据接收成功
  {
  led=~led;
  TRX_CE=0; //如果数据准备好,则进入待机模式,以便SPI口操作
  CSN=0;
  delay(1);
  SpiWrite(0x24); //读nRF905所接受到的数据
  RxPacket(); //保存数据
  CSN=1;
  delay(10);
  TRX_CE=1;
  /*temp=TxRxBuffer[0]+TxRxBuffer[1]+TxRxBuffer[2];
  if(temp==0x07)
  {
  lcdbit=!lcdbit; //lcdbit=0
  }*/
  break;
  }
  }
  }
  void Ini_System(void) //初始化配置寄存器//
  {
  uchar i;
  //lcdbit=1;
  CSN=1;
  SCK=0;
  DR=0;
  PWR=1; //进入掉电模式
  TRX_CE=0;
  TXEN=0;
  delay(1);
  CSN=0; //进入SIP模式
  for(i=0;i<11;i++)
  {
  SpiWrite(RFConf[i]); //设置配置寄存器
  }
  CSN=1; //关闭SPI,进入接收状态
  PWR=1;
  //TRX_CE=1;
  //TXEN=0;
  }
  void main(void)
  {
  P0=0x00;
  led=1;
  Ini_System(); //设置配置,并进入接收模式 (收)
  PWR=1; //进入掉电模式
  while(1)
  {
  Wait_Rec_Packet(); //等待接收完成,保存完接收数据(保存数据+地址)
  //CSN=0;
  P0 = TxRxBuffer[0];
  delay(600);
  P0 = TxRxBuffer[1];
  delay(600);
  P0 = TxRxBuffer[2];
  delay(600);
  //CSN=1;
  }
  }
  程序经本人测试后没太大问题,如要深入研究,本人附加详细资料,希望对您有所帮助。
附加资料
  基于nRF905 模块的AT89S 单片机无线收发系统设计
  管脚 名称 管脚功能 说明
  1 VCC 电源 电源+3.3~3.6V DC
  2 TX_EN 数字输入 工作模式选择
  3 TRX_CE 数字输入 使能芯片发射或接收
  4 PWR_UP 数字输入 芯片上电
  5 uCLK 时钟输出 (未使用)
  6 CD 数字输出 载波检测
  7 AM 数字输出 地址匹配
  8 DR 数字输出 接收或发射数据完成
  9 MISO SPI 接口 SPI 输出
  10 MOSI SPI 接口 SPI 输入
  11 SCK SPI 时钟 SPI 时钟
  12 CSN SPI 使能 SPI 使能
  13、14 GND 地 接地
  下面为典型的 nRF905 模块数据发送流程[3]:
  (1)当微控制器要发送数据时,将接收机的地址和发
  送数据通过SPI 接口传输给nRF905 模块;
  (2)微控制器设置TRX_CE 和TX_EN 管脚同时置为
  高电平,启动发送端的nRF905 模块为发送模式;
  (3)发送端的nRF905 模块发送过程处理:
  a)射频寄存器开启;
  b)数据打包(加字头和CRC 校验码);
  c)数据包发送;
  d)当数据包发送结束,将数据发送完成管脚(DR 管脚)
  置为高电平;
  (4)如果AUTO_RETRAN 被设置为高,nRF905 模块
  将连续地发送数据包,直到TRX_CE 被设置为低;
  (5)TRX_CE 被设置为低时,nRF905 模块数据包发送
  过程结束并回到待机模式。
  AT89S 单片机控制nRF905 模块数据发送流程图如图3
  所示。
  
  下面为典型的 nRF905 模块数据接收流程[4]:
  (1)微控制器控制TRX_CE 为高电平、TX_EN 为低电
  平,nRF905 模块进入接收模式;
  (2)650us 后,nRF905 模块监测空中的信息,等待接
  收数据;
  (3)当nRF905 模块检测到与接收频率相同的载波时,
  设置载波检测管脚(CD 管脚)为高电平;
  (4)当nRF905 模块接收到有效的地址时,设置地址匹
  配管脚(AM 管脚)为高电平;
  (5)当一个正确的数据包接收完毕后,nRF905 模块自
  动去掉数据包的字头、地址和CRC 校验码,然后将数据接
  受完成管脚置为高电平;
  (6)微控制器将TRX_CE 设置为低电平;
  (7)微控制器通过SPI 接口以一定的速率提取数据包
  中的有效接收数据;
  (8)当所有的有效数据接收完毕,微控制器控制nRF905
  模块数据接收完成管脚(DR 管脚)和地址匹配管脚(AM
  管脚)为低电平;
  (9)nRF905 进入待机模式。
  说明:(1)VCC电压范围为DC 3.3V~3.6V之间,不能超过3.6V否则会烧坏模块。
  (2)模块
AnYidan 2012-05-15
  • 打赏
  • 举报
回复
用什么协议,
数据采集后的处理
ywchn999123 2012-05-14
  • 打赏
  • 举报
回复
这几被板子都是放在大棚里的各个点上,要求就是要用NRF905做传输。另外我是学C的,现在学SOCKET有点迟了。
langeldep 2012-05-10
  • 打赏
  • 举报
回复
你这几个板子如果都在一起的话, 串口链接, 通过RS232串口API即可进行通信, 如果是距离很远, 用网线进行数据传输, 那么你就得懂socket网络编程了, 或者也可以主单片机提供web service接口, 让另外两个单片机通过http协议进行数据传输, 总之这个问题其实是很简单的。
一、5G技术的发展简介2018年6月,5G NR独立组网标准冻结,标志着5G时代的来临。5G仅仅是比4G的网速更快吗?绝非如此。5G不仅提供了极高的网速,而且将网络时延、可靠性、容量等性能大幅提升,使得5G成为一个万物互联的平台,从而可以极大地推动大量相关产业的发展。中国信息通信研究院在其研究报告中称:“第五代移动通信技术(5G)正在阔步前行,它将以全新的网络架构,提供至少十倍于4G 的峰值速率、毫秒级的传输时延和千亿级的连接能力,开启万物广泛互联、人机深度交互的新时代。”中国电信在其《5G技术白皮书》中也写道:“5G将是引领科技创新、实现产业升级、发展新经济的基础性平台”。  由此可以看到,5G技术的应用,将不再局限于用户间的通信联系以及个人用户的信息获取,而是渗透到了诸多行业,满足各种行业应用的通信需求,从而推动整个社会的智能化进程,这将是一场广泛而深刻的通信变革。二、本课程的特色这门课程,是我花费了大量的时间,在阅读了大量的资料的基础上,精心编写、录制而成的。这门课程的目标人群是那些已经有了一定的移动通信知识,但对5g网络尚未有系统了解和掌握的朋友们。在编写课件的过程中,我力争做到深入浅出,既能把技术问题探讨到一定的深度,不流于肤浅,又能易于理解,避免晦涩难懂。从内容的选择上,我力争做到全面而系统,对于5G的组网策略、核心网、接入网、承载网、网络切片技术、大规模MIMO和移动边缘计算等内容都纳入了课程内容。如果各位认真地学完这门课程,我想您会对5G移动通信技术有一个相当程度的了解和掌握,您会感到“课有所值”。三、本课程主要内容本课程包括八个方面的内容:1、从1G到5G在这一部分主要讲述了蜂窝移动通信系统的基本概念,1G、2G、3G、4G和5G移动通信系统的特点、发展演变的过程,以及5G的三大应用场景—eMBB(增强移动宽带)、mMTC(海量大连接)、URLLC(低时延高可靠),并以VR/AR(虚拟现实/增强现实)、智能家居、农业传感、智能制造、自动驾驶等具体应用来说明5G在垂直行业的应用场景。2、5G的独立组网和非独立组网模式主要讲述5G的组网方案,包括独立组网的2种模式和非独立组网的3个系列8种模式。课程中对各种组网方式的网络结构、优缺点、对业务的支持情况等进行了详细的分析,讲解了双连接、用户面、控制面、锚点等概念,并且对目前5G网络运营商如何选择各种组网模式进行了介绍。3、5G核心网解析主要讲述5G核心网SBA(基于服务的架构)、网络功能虚拟化、微服务、NF的调用、CUPS(控制面和用户面分离)、网络切片等内容,课程中对5G核心网的总体结构和各个NF(NSSF、NEF、NRF、PCF、UDM、AUSF、AMF、SMF、UPF)的作用都进行了讲解。4、5G接入网架构在这一部分,首先为大家回顾了从2G到4G接入网的发展过程,简述了它们各自的结构和特点。接下来,重点讲解了5G接入网的总体架构,CU、DU、AAU的作用,以及它们之间的功能划分。最后介绍了5G标准支持的多种接入网设备部署方案,包括CU/DU合设的两种方案和CU/DU分设的两种方案,以及它们各自的特点和适用场景。5、5G承载网作为移动通信网的三大子网之一,5G时代的承载网同样需要向前演进。这部分课程首先讲解了5G网络对承载网在带宽、时延、时间同步和网络切片等方面的性能需求。在参考大量文献资料的基础上,我尽量将这些性能需求量化,以期达到能够对实际工作起到指导和参考的作用。在带宽需求方面,针对前传、中传和回传网,分别给出了带宽需求的范围。接下来,课程讲解了5G承载网的技术实现方案,包括前传网的三种技术方案:光纤直连、无源WDM和有源OTN,以及中传和回传网络的通用分层结构、PAM4技术、FLEX-E技术、SR技术等,并介绍了中国移动、中国电信和中国联通的5G中、回传网技术方案:SPN(切片分组网络)、M-OTN(面向移动承载优化的OTN)和IP RAN增强,讲解了这三种技术的发展由来和技术特点。6、MIMO及大规模MIMO技术这一章包括四个部分的内容。第一部分是MIMO技术的原理,主要讲述了MIMO技术的基本概念、历史发展、对网络性能的改善(提高系统容量、对抗多经衰落、降低系统内干扰)等。第二部分讲MIMO技术的应用,主要包括MIMO技术的三种应用方式—空间复用、传输分集和波束成形的技术特点和优势,以及MIMO技术在WLAN、3G、B3G和4G系统的应用。第三部分讲解大规模MIMO技术的原理,包括它的技术特点、对系统性能的改善(信道容量大幅增加、波束更窄、系统内干扰更低、可实现3D波束赋形)以及它的缺点(算法复杂度高等)。第四部分是大规模MIMO技术的应用,主要介绍了它在4G和5G网络的应用,分析了大规模MIMO技术对4G网络容量提升的实测结果。7、5G网络切片技术这一章首先介绍了在5G网络中引入网络切片技术的必要性,以及网络切片技术的定义等内容,然后讲解了实现网络切片的技术基础。网络切片的实现,需要两个主要的技术来支撑,一个是NFV(网络功能虚拟化),另外一个是SDN(软件定义网络),课程中对这两项技术进行了比较详细的介绍。最后讲述了5G网络切片的实现,内容包括核心网切片、接入网切片以及承载网切片的实现,涉及到网络切片的选择、GROUP A、B、C三种切片构成方式、子载波间隔的选择等内容。8、5G与移动边缘计算这一章首先介绍了MEC(移动边缘计算)的起源和发展,追溯了IBM与诺基亚西门子开发的最早的MEC,ETSI在MEC方面的工作,以及3GPP在4G和5G标准中关于MEC的相关内容。接下来,讲解了MEC在5G网络的部署,包括边缘级、区域级和地区级MEC三种部署方式以及它们的适用场景。最后列举了一些具体的应用场景来说明MEC的应用情况,包括视频优化加速、车联网、VR直播和视频优化分析。四、讲师简介老铁于1991年毕业于南开大学电子系。从1994年开始,进入移动通信行业,先后在摩托罗拉公司、中国联通和中国电信的省级公司工作。2011年进入高校,从事移动通信相关课程的教学工作。       在联通和电信工作期间,老铁从事过移动通信网络的建设、规划、优化等工作,可以说在移动通信网络技术方面积累了比较丰富的知识和经验。在联通工作期间,参加过许多技术项目,也获得了一些奖项,包括中国通信标准化协会颁发的科学技术奖一等奖、信息产业部颁发的“CDMA网络创新贡献”奖,以及中国联通的“科技进步奖”三等奖。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧