搜索
bottom↓
楼主: myqiang1990

NRF24L01多对一,一对多全部调通(共享源码+中文手册)

  [复制链接]

出0入0汤圆

发表于 2011-3-26 15:23:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-3-26 20:18:14 | 显示全部楼层
感谢楼主!! 我也弄了一段时间的这个, 后来没时间了, 就没弄完!

出0入0汤圆

发表于 2011-4-15 18:53:23 | 显示全部楼层
我做的三发一收,通道0和1都好用,但通道二不好使

出0入0汤圆

发表于 2011-4-15 21:50:58 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-4-15 21:53:29 | 显示全部楼层
呵呵,正要用,谢谢

出0入0汤圆

发表于 2011-4-15 22:51:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-24 11:42:30 | 显示全部楼层
mark

出10入12汤圆

发表于 2011-4-24 12:38:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-24 18:26:45 | 显示全部楼层
以前只调通了一对一!

出0入0汤圆

发表于 2011-4-25 21:17:28 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-4-25 22:41:37 | 显示全部楼层
蛮好玩的,如果能做个无线的CAN就好了

出0入0汤圆

发表于 2011-4-27 21:38:05 | 显示全部楼层
回复【楼主位】myqiang1990  Libby
-----------------------------------------------------------------------
楼主:
unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen)
{  //寄存器地址//读取数据存放变量//读取数据长度//用于接收
    unchar BackDate,i;
        CSN=0;//启动时序
        BackDate=NRFSPI(RegAddr);//写入要读取的寄存器地址
        for(i=0;i<DateLen;i++) //读取数据
          {
             RxDate=NRFSPI(0);
          }
    CSN=1;
   return(BackDate);
} 这个函数中的RxDate=NRFSPI(0)中的0是什么意思,其他的任意的值可以?

出0入0汤圆

发表于 2011-4-27 22:19:33 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2011-4-27 23:46:25 | 显示全部楼层
NRF24L01/NRF24L01+
无线不在神秘 零难度入门
买回就可以看到通信效果
第一次应用和初学者不在为无线迷茫
感性认识+理性分析-->轻松驾驭NRF24L01+
NRF24L01/NRF24L01+是挪威NordicVLSI公司出品的一款新型射频收发器件,采用4 mm×4 mmQFN20封装;NRF24L01/NRF24L01+工作在ISM频段:2.4~2.524 GHz。且内置频率合成器、功率放大器、晶体振荡器、调制器等功能,并融合增强型ShockBurst技术,其中地址、输出功率和通信频道可通过程序进行配置,适合用于多机通信。NRF24L01/NRF24L01+功耗很低,在以-6 dBm的功率发射时,工作电流也只有9 mA;而对应接收机的工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。NRF24L01/NRF24L01+在业界领先的低功耗特点使其特别适合采用钮扣电池供电的2.4G应用,整个解决方案包括链路层和MultiCeiver功能提供了比现有的nRF24XX更多的功能和更低的电源消耗,与目前的蓝牙技术相比在提供更高速率的同时,而只需花更小的功耗.最新采用的nRF24L01+与nRF24L01兼容,并增加250kbps低速功能。
详细点连接:http://item.taobao.com/item.htm?id=10096264698
让我们想的更多,做的更到位,你的无线应用更轻松,更简单


点击此处下载 ourdev_632805VFO9Y3.pdf(文件大小:1.49M) (原文件名:JASK51-24L01模块使用手册.pdf)
点击此处下载 ourdev_632806C18V47.pdf(文件大小:1.56M) (原文件名:USB-TTL模块使用手册.pdf)


点击此处下载 ourdev_632781Z4RW87.pdf(文件大小:462K) (原文件名:nRF24L01芯片文档.pdf)
点击此处下载 ourdev_632782PCXG7E.pdf(文件大小:1.08M) (原文件名:nRF24L01+.pdf)


(原文件名:DSC02404.JPG)

出0入0汤圆

发表于 2011-5-1 21:53:59 | 显示全部楼层
顶,我正在需找一个解决一对多时序的冲突呢!谢谢楼主!膜拜

出0入0汤圆

发表于 2011-5-2 10:15:13 | 显示全部楼层
有个问题想请教大家!关于nrf24L01一对二通信时,接收端设为接收模式后,同时接收到两个发射端的数据,那么在STATUS状态寄存器中的 RX_P_NO三个位是怎么同时显示两个通道的通道号的呢?

出0入0汤圆

发表于 2011-5-3 16:41:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-3 20:32:58 | 显示全部楼层
mark~~

出0入0汤圆

发表于 2011-5-3 20:40:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-3 20:52:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-3 20:52:14 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-3 23:45:29 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-5-9 02:14:39 | 显示全部楼层
mark,谢谢

出0入0汤圆

发表于 2011-5-13 00:05:42 | 显示全部楼层
好东西啊,顶起来,下载来。

出0入0汤圆

发表于 2011-5-29 22:06:32 | 显示全部楼层
楼主的共享很给力,最近正在研究无线通信,这样就有了参考,mark一下。

出0入0汤圆

发表于 2011-5-31 19:38:53 | 显示全部楼层
mark.

出0入0汤圆

发表于 2011-5-31 22:26:10 | 显示全部楼层
看看!!!

出0入4汤圆

发表于 2011-5-31 22:27:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-31 22:46:10 | 显示全部楼层

出0入0汤圆

发表于 2011-5-31 22:59:24 | 显示全部楼层
绝对好帖,不顶无理!

出0入0汤圆

发表于 2011-5-31 23:08:50 | 显示全部楼层
今天也搞了 2块~~~先下下来有空玩玩

出0入0汤圆

发表于 2011-6-4 00:42:22 | 显示全部楼层
问下楼主,不知道其通道是如何使用用的呢,比如说在什么情况下用0通道,什么情况下用1通道?谢谢!

出0入0汤圆

发表于 2011-6-22 09:09:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-6-23 16:45:29 | 显示全部楼层
楼主我太爱你了

出0入0汤圆

发表于 2011-6-24 16:25:08 | 显示全部楼层
好资料收下!!

出0入0汤圆

发表于 2011-6-24 16:47:07 | 显示全部楼层
拿来LZ东西  顶一个!呵呵!!

出0入0汤圆

发表于 2011-6-24 18:11:10 | 显示全部楼层
jihao

出0入0汤圆

发表于 2011-6-24 20:00:01 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-6-24 20:16:26 | 显示全部楼层
留着以后学习用!!!

出0入0汤圆

发表于 2011-6-24 20:23:33 | 显示全部楼层
正准备用这个
mark一下

出0入0汤圆

发表于 2011-6-28 21:23:41 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2011-7-28 16:10:32 | 显示全部楼层
学习中

出0入0汤圆

发表于 2011-7-28 17:00:54 | 显示全部楼层
学习

出0入0汤圆

发表于 2011-7-28 17:06:57 | 显示全部楼层
不是很明白~~收藏

出0入0汤圆

发表于 2011-8-19 20:43:14 | 显示全部楼层
正学习

出0入0汤圆

发表于 2011-8-19 23:32:31 | 显示全部楼层
手头上是的si4432,不知道怎么用~唉。。。

出0入0汤圆

发表于 2011-8-20 00:32:00 | 显示全部楼层
顶下

出0入0汤圆

发表于 2011-8-20 08:47:00 | 显示全部楼层
多谢楼主了,我也正在研究一对多的

出0入0汤圆

发表于 2011-8-23 18:55:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-23 19:35:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-24 10:22:02 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-24 10:53:59 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-8-28 15:34:02 | 显示全部楼层
是的,而且发现清中断标记的时候如果没有用sta&0x70去写寄存器,也会发现一样的情况

出0入0汤圆

发表于 2011-9-2 23:08:40 | 显示全部楼层
NRF24L01通信及调试,MARK!

出0入0汤圆

发表于 2011-9-2 23:19:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-3 11:55:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-5 16:59:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-21 09:16:12 | 显示全部楼层
楼主 我用的是自己做的直流稳压电源 在1117上加什么滤波电容好的 我加一个滤高频一个滤低频是不是更好?

出0入0汤圆

发表于 2011-9-29 22:40:18 | 显示全部楼层
回复【楼主位】myqiang1990 切.格瓦拉
-----------------------------------------------------------------------

楼主 我最近也在调nRF24L01  遇上点问题 先请教下您 我用一块芯片发送  没用接受芯片 可为什么STATUS寄存器里的位全部变成1,MAX_RT  TX_DS RX_DR  全变成1,您遇到过这种情况吧  应该怎么解决啊?

出20入12汤圆

发表于 2011-9-29 22:47:18 | 显示全部楼层
学习楼

出0入0汤圆

发表于 2011-9-29 23:30:42 | 显示全部楼层
mark

出0入55汤圆

发表于 2011-9-30 10:33:52 | 显示全部楼层
手头有几个,过些天应该会用上,先mark一下

出0入0汤圆

发表于 2011-9-30 11:26:24 | 显示全部楼层
挖坟 mark 调过1v1的 还没试过1v多...

出0入0汤圆

发表于 2011-9-30 11:51:04 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-30 16:04:39 | 显示全部楼层
NRF24L01多对一
mark

出0入0汤圆

发表于 2011-10-1 21:15:26 | 显示全部楼层
看看,没弄过NRF24L01

出0入0汤圆

发表于 2011-10-1 21:44:42 | 显示全部楼层
显然,很有用

出0入0汤圆

发表于 2011-10-9 00:32:01 | 显示全部楼层
学习中

出0入0汤圆

发表于 2011-10-9 01:13:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-9 08:35:08 | 显示全部楼层
MARK 学习

出0入0汤圆

发表于 2011-10-9 08:47:52 | 显示全部楼层
学习中

出0入0汤圆

发表于 2011-10-9 11:18:01 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-10-9 14:36:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-9 18:55:42 | 显示全部楼层
顶一个。

出0入0汤圆

发表于 2011-10-10 16:53:03 | 显示全部楼层
学习下

出0入0汤圆

发表于 2011-10-10 18:19:51 | 显示全部楼层
mark一个!

出0入0汤圆

发表于 2011-10-11 09:16:28 | 显示全部楼层
一对一调通过,苦于没有多的板子!留着哟用!

出0入0汤圆

发表于 2011-10-11 16:05:19 | 显示全部楼层
很好,谢谢

出0入0汤圆

发表于 2011-10-11 21:43:28 | 显示全部楼层
xuexi

出0入0汤圆

发表于 2011-10-11 22:33:04 | 显示全部楼层
感谢分享,支持一个

出0入0汤圆

发表于 2011-10-12 23:27:04 | 显示全部楼层
好东西!
MARK

出0入0汤圆

发表于 2011-10-19 17:28:05 | 显示全部楼层
楼主啊,现在还看这个帖子不,我是遇见大问题了,呵呵
一主多从,比如说有一个主设备,N个从设备,怎么着一下子识别出,现场有多少个从设备,用轮询的方式太慢了,要是直接发一个指令,从设备都往这发,主设备也就只能接收一个,这个怎么解决啊;
路过的朋友也给个建议啊,快没招了,我QQ231299903,
有玩这方面的可以加我,大家一块讨论一下,呵呵

出0入0汤圆

发表于 2011-10-20 21:01:45 | 显示全部楼层
回复【20楼】rongchenfeng
-----------------------------------------------------------------------

你是贵港的?老乡喔,,我也对电子比较感兴趣,有空交流下!!

出0入0汤圆

发表于 2011-10-21 14:51:14 | 显示全部楼层
回复【35楼】myqiang1990 小松鼠
-----------------------------------------------------------------------

我之前NRF241L没弄出来,现在感觉问题出在寄存器设置!

出0入0汤圆

发表于 2011-10-22 09:28:36 | 显示全部楼层
正在学习中

出0入0汤圆

发表于 2011-10-23 08:35:46 | 显示全部楼层
好东西呀

出0入0汤圆

发表于 2011-10-23 22:24:16 | 显示全部楼层
回复【楼主位】myqiang1990 小松鼠
-----------------------------------------------------------------------

case 0x00:NRFReadRxDate(R_RX_PAYLOAD,RevTempDate0,RX_DATA_WITDH);break;// 从RXFIFO读取数据通道0
case 0x02:NRFReadRxDate(R_RX_PAYLOAD,RevTempDate1,RX_DATA_WITDH);break;// 从RXFIFO读取数据通道1
那位大侠知道这个0x00,0x02,是怎么确定的?

出0入0汤圆

发表于 2011-10-24 08:09:37 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 08:38:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-10-24 10:48:53 | 显示全部楼层
好贴!MARK!

出0入0汤圆

发表于 2011-10-24 13:16:55 | 显示全部楼层
正想学习这块 拿过来看看吧

出0入0汤圆

发表于 2011-10-24 20:49:04 | 显示全部楼层
先收藏了作参考.

出0入0汤圆

发表于 2011-10-25 16:07:57 | 显示全部楼层
好东西,谢谢楼主分享

出0入0汤圆

发表于 2011-10-26 21:48:52 | 显示全部楼层
回复【32楼】kaok
-----------------------------------------------------------------------

不知32楼弄出来没?我也在研究那个问题!

出0入0汤圆

发表于 2011-11-6 00:16:13 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-11-6 14:28:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-12 20:29:09 | 显示全部楼层
2对1成功了,3对1没成功。各位高手。赐教赐教。帮忙改改呗!!!毕设马上就要答辩了
#ifndef __24L01__H_
#define        __24L01__H_

#include<reg52.h>
#include <intrins.h>

#define unchar unsigned char
#define unint unsigned int

#define TX_ADDR_WIDTH 5        //发送地址宽度设置为5个字节
#define RX_ADDR_WIDTH 5        //接收地址宽度设置为5个字节
#define TX_DATA_WIDTH 4 //发送数据宽度1个字节
#define RX_DATA_WIDTH 4 //接收数据宽度1个字节
/*******************命令寄存器***************************/
#define  R_REGISTER      0x00//读取配置寄存器
#define  W_REGISTER      0x20//写配置寄存器
#define  R_RX_PAYLOAD          0x61//读取RX有效数据
#define  W_TX_PAYLOAD         0xa0//写TX有效数据
#define  FLUSH_TX                 0xe1//清除TXFIFO寄存器
#define  FLUSH_RX                 0xe2//清除RXFIFO寄存器
#define  REUSE_TX_PL     0xe3//重新使用上一包有效数据
#define  NOP             0xff//空操作
/******************寄存器地址****************************/
#define  CONFIG          0x00//配置寄存器
#define  EN_AA                         0x01//使能自动应答
#define  EN_RXADDR       0x02//接收通道使能0-5个通道
#define  SETUP_AW        0x03//设置数据通道地址宽度3-5
#define  SETUP_RETR      0x04//建立自动重发
#define  RF_CH           0x05//射频通道设置
#define  RF_SETUP        0x06//射频寄存器
#define  STATUS          0x07//状态寄存器
#define  OBSERVE_TX      0x08//发送检测寄存器
#define  CD              0x09//载波
#define  RX_ADDR_P0      0x0a//数据通道0接收地址
#define  RX_ADDR_P1      0x0b//数据通道1接收地址
#define  RX_ADDR_P2      0x0c//数据通道2接收地址
#define  RX_ADDR_P3      0x0d//数据通道3接收地址
#define  RX_ADDR_P4      0x0e//数据通道4接收地址
#define  RX_ADDR_P5      0x0f//数据通道5接收地址
#define  TX_ADDR         0x10//发送地址
#define  RX_PW_P0        0x11//P0通道数据宽度设置
#define  RX_PW_P1        0x12//P1通道数据宽度设置
#define  RX_PW_P2        0x13//P2通道数据宽度设置
#define  RX_PW_P3        0x14//P3通道数据宽度设置
#define  RX_PW_P4        0x15//P4通道数据宽度设置
#define  RX_PW_P5        0x16//P5通道数据宽度设置
#define  FIFO_STATUS     0x17//FIFO状态寄存器
/*******************相关函数声明**************************/
//unchar NRFACK();
unchar NRFSPI(unchar date);
unchar NRFReadReg(unchar RegAddr);
unchar NRFWriteReg(unchar RegAddr,unchar date);
unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen);
unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen);
void NRFSetTxMode(unchar *TxDate);
void NRF24L01Int();
void NRFSetRXMode();
unsigned char  CheckACK();
void GetDate();



void NRFDelay(unint t)
{
   unint x,y;
   for(x=t;x>0;x--)
    for(y=110;y>0;y--);
}
/*********************************************************/

sbit CE=P1^2;  //RX/TX模式选择端
sbit CSN=P1^3; //SPI片选端//就是SS
sbit SCLK=P1^4;        //SPI时钟端
sbit MOSI=P1^5;        //SPI主机输出从机输入端
sbit MISO=P1^6;        //SPI主机输出从机输出端
sbit IRQ=P1^7; //可屏蔽中断端

unchar RevTempDate0[5];//同道0接收数据
unchar RevTempDate1[5];//同道1接收数据
unchar RevTempDate2[5];//同道2接收数据

unchar code RxAddr0[]={0x34,0x43,0x10,0x10,0x01};//编号1接收地址这个地址和发送方地址一样!
unchar code RxAddr1[]={0xc2,0xc2,0xc2,0xc2,0xc1};//编号2
unchar code RxAddr2[]={0xc2,0xc2,0xc2,0xc2,0xc2};//编号3

//unchar RevTempDate[6];//最后一位用来存放结束标志
//unchar code TxAddr[]={0x34,0x43,0x10,0x10,0x01};//发送地址
/*****************状态标志*****************************************/
unchar  bdata sta;   //状态标志
sbit RX_DR=sta^6;
sbit TX_DS=sta^5;
sbit MAX_RT=sta^4;
/*****************SPI时序函数******************************************/
unchar NRFSPI(unchar date)
{
    unchar i;
           for(i=0;i<8;i++)          // 循环8次
           {
          if(date&0x80)
            MOSI=1;
          else
            MOSI=0;   // byte最高位输出到MOSI
             date<<=1;             // 低一位移位到最高位
             SCLK=1;
          if(MISO)               // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
               date|=0x01;               // 读MISO到byte最低位
             SCLK=0;                    // SCK置低
           }
    return(date);                   // 返回读出的一字节
}
/**********************NRF24L01初始化函数*******************************/
void NRF24L01Int()
{
        NRFDelay(2);//让系统什么都不干
        CE=0;
        CSN=1;  
        SCLK=0;
        IRQ=1;
}
/*****************SPI读寄存器一字节函数*********************************/
unchar NRFReadReg(unchar RegAddr)
{
   unchar BackDate;
   CSN=0;//启动时序
   NRFSPI(RegAddr);//写寄存器地址
   BackDate=NRFSPI(0x00);//写入读寄存器指令  
   CSN=1;
   return(BackDate); //返回状态
}
/*****************SPI写寄存器一字节函数*********************************/
unchar NRFWriteReg(unchar RegAddr,unchar date)
{
   unchar BackDate;
   CSN=0;//启动时序
   BackDate=NRFSPI(RegAddr);//写入地址
   NRFSPI(date);//写入值
   CSN=1;  
   return(BackDate);
}
/*****************SPI读取RXFIFO寄存器的值********************************/
unchar NRFReadRxDate(unchar RegAddr,unchar *RxDate,unchar DateLen)
{  //寄存器地址//读取数据存放变量//读取数据长度//用于接收
    unchar BackDate,i;
        CSN=0;//启动时序
        BackDate=NRFSPI(RegAddr);//写入要读取的寄存器地址
        for(i=0;i<DateLen;i++) //读取数据
          {
             RxDate=NRFSPI(0);
          }
    CSN=1;
   return(BackDate);
}
/*****************SPI写入TXFIFO寄存器的值**********************************/
unchar NRFWriteTxDate(unchar RegAddr,unchar *TxDate,unchar DateLen)
{ //寄存器地址//写入数据存放变量//读取数据长度//用于发送
   unchar BackDate,i;
   CSN=0;
   BackDate=NRFSPI(RegAddr);//写入要写入寄存器的地址
   for(i=0;i<DateLen;i++)//写入数据
     {
            NRFSPI(*TxDate++);
         }   
   CSN=1;
   return(BackDate);
}
/*****************NRF设置为发送模式并发送数据******************************/
void NRFSetTxMode(unchar *TxDate)
{  //发送模式
    CE=0;   
           NRFWriteTxDate(W_REGISTER+TX_ADDR,RxAddr0,TX_ADDR_WIDTH);//写寄存器指令+P0地址使能指令+发送地址+地址宽度
        NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,RxAddr0,TX_ADDR_WIDTH);//为了应答接收设备,接收通道0地址和发送地址相同
        NRFWriteTxDate(W_TX_PAYLOAD,TxDate,TX_DATA_WIDTH);//写入数据
        /******下面有关寄存器配置**************/
          NRFWriteReg(W_REGISTER+EN_AA,0x01);       // 使能接收通道0自动应答
          NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);   // 使能接收通道0
          NRFWriteReg(W_REGISTER+SETUP_RETR,0x0a);  // 自动重发延时等待250us+86us,自动重发10次
          NRFWriteReg(W_REGISTER+RF_CH,0x40);         // 选择射频通道0x40
          NRFWriteReg(W_REGISTER+RF_SETUP,0x07);    // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
          NRFWriteReg(W_REGISTER+CONFIG,0x0e);      // CRC使能,16位CRC校验,上电       
        CE=1;       
        NRFDelay(5);//保持10us秒以上
}
/*****************NRF设置为接收模式并接收数据******************************/
//接收模式
void NRFSetRXMode()
{
    CE=0;
          NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,RxAddr0,TX_ADDR_WIDTH);  // 接收设备接收通道0使用和发送设备相同的发送地址
        NRFWriteTxDate(W_REGISTER+RX_ADDR_P1,RxAddr1,TX_ADDR_WIDTH);  // 接收设备接收通道1使用和发送设备相同的发送地址
        NRFWriteTxDate(W_REGISTER+RX_ADDR_P2,RxAddr2,TX_ADDR_WIDTH);  // 接收设备接收通道1使用和发送设备相同的发送地址
    //NRFWriteTxDate(W_REGISTER+RX_ADDR_P0,TxAddr,TX_ADDR_WITDH);  // 接收设备接收通道0使用和发送设备相同的发送地址
          //NRFWriteReg(W_REGISTER+EN_AA,0x01);               // 使能接收通道0自动应答
  //        NRFWriteReg(W_REGISTER+EN_RXADDR,0x01);           // 使能接收通道0
          //NRFWriteReg(W_REGISTER+EN_AA,0x07);               // 使能数据通道0和1,2自动应答
          NRFWriteReg(W_REGISTER+EN_RXADDR,0x07);           // 使能接收通道0和1,2
        NRFWriteReg(W_REGISTER+RX_PW_P0,RX_DATA_WIDTH);  // 接收通道0选择和发送通道相同有效数据宽度
        NRFWriteReg(W_REGISTER+RX_PW_P1,RX_DATA_WIDTH);  // 接收通道1选择和发送通道相同有效数据宽度
        NRFWriteReg(W_REGISTER+RX_PW_P2,RX_DATA_WIDTH);  // 接收通道1选择和发送通道相同有效数据宽度
        NRFWriteReg(W_REGISTER+RF_CH,0x40);                 // 选择射频通道0x40
          //NRFWriteReg(W_REGISTER+RX_PW_P0,TX_DATA_WITDH);  // 接收通道0选择和发送通道相同有效数据宽度
          NRFWriteReg(W_REGISTER+RF_SETUP,0x07);            // 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
        NRFWriteReg(W_REGISTER+CONFIG,0x0f);             // CRC使能,16位CRC校验,上电,接收模式     
          CE = 1;
        NRFDelay(5);   
}
/****************************检测是否有接收到数据******************************/
unsigned char  CheckACK()
{  //用于发射模式接收应答信号
        sta=NRFReadReg(R_REGISTER+STATUS);                    // 返回状态寄存器
        if(TX_DS)
          {
                 NRFWriteReg(W_REGISTER+STATUS,0xff);  // 清除TX_DS或MAX_RT中断标志
                   CSN=0;
                    NRFSPI(FLUSH_TX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!!  
                CSN=1;
                 return(0);        
           }
        else return(1);
}


/*************************接收数据*********************************************/
void GetDate()                                 
{
    unchar RX_P_NO;//接收通道号
        sta=NRFReadReg(R_REGISTER+STATUS);//发送数据后读取状态寄存器
    if(RX_DR)                                // 判断是否接收到数据
     {
           RX_P_NO=sta&0x0e;//获取通道号
           CE=0;//待机
           switch(RX_P_NO)
                {
                   case 0x00:NRFReadRxDate(R_RX_PAYLOAD,RevTempDate0,RX_DATA_WIDTH);break;// 从RXFIFO读取数据通道0
                   case 0x02:NRFReadRxDate(R_RX_PAYLOAD,RevTempDate1,RX_DATA_WIDTH);break;// 从RXFIFO读取数据通道1
                   case 0x04:NRFReadRxDate(R_RX_PAYLOAD,RevTempDate2,RX_DATA_WIDTH);break;// 从RXFIFO读取数据通道2
                   default:break;
                }
        //        NRFReadRxDate(R_RX_PAYLOAD,RevTempDate,RX_DATA_WITDH);// 从RXFIFO读取数据 接收4位即可,后一位位结束位
           //LcdWriteChStr(2,65,RevTempDate);//LCD12864液晶显示
           //MAX232SendDate();//发送数据到上位机         
          
           NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标
           CSN=0;
           NRFSPI(FLUSH_RX);//用于清空FIFO !!关键!!不然会出现意想不到的后果!!!大家记住!!
           CSN=1;                 
     }
    //NRFWriteReg(W_REGISTER+STATUS,0xff); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标          
}
#endif

出0入0汤圆

发表于 2011-12-14 17:14:10 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2011-12-17 21:09:40 | 显示全部楼层
谢谢分享,学习中。。。

出0入0汤圆

发表于 2011-12-17 21:40:08 | 显示全部楼层
多谢楼主的分享!学习下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 07:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表