NRF24L01全双工调试程序 自动切换收发模式 可用于实现对讲机
应用nRF24L01及干扰问题探讨

10ቤተ መጻሕፍቲ ባይዱ OCCUPATION
2007 08
基于以上的分析, 可以归纳出如下的跳频规则: 1. 监测到当前信道的持续干扰。 2. 跳转到受到自同一干扰源的干扰概率较小的信道。
3. 如果干扰来自其他的跳频系统, 则不进行跳频。 nR F24L01 集成了 载 波 监 测 功 能 , 可 以 准 确 地 监 测 当 前 工 作 信 道 是 否 有 干 扰 , 保 证 了 在 W - LAN 环 境 下 可 靠 地 工 作 。 其 SPI 接 口 与 外 接 微 控 制 器 的 通 信 速 率 可 达 10Mbps, 具 有 高 速 度 和 独 特 的 切 换 时 间 , 减 少 了 与 跳 频 系统如蓝牙出现时碰撞的可能。 对于 nR F24L01 的通信, 可以采取如下方案: 数据发送方发送数据并等待接收方的 ACK, 如果没有 收到 ACK, 表示发送失败, 则在相同信道上重发两次。由 于 蓝 牙 系 统 在 每 个 信 道 上 停 留 的 时 间 为 650us, 而 nR F24L01 一次动作 ( 即发送数据并等待接收对方 ACK 的 时间) 大约为 1ms, 因此如果第一次发送失败是由于与蓝牙 系统发生冲突, 那么第二次发送一般可以顺利到达接收方。 如果三次发送均失败, 说明受到的不是脉冲干扰, 而 是 稳 定 的 干 扰 , 这 时 nR F24L01 需 要 跳 转 到 另 一 个 信 道。事先将所有想要使用的信道做成列表, 在需要跳频 时查表即可。信道列表一般不采用 1, 2, 3, 4…… 的 顺 序安排, 因为如果一个信道受到干扰, 那么与之相邻的 信 道 很 有 可 能 也 受 到 干 扰 , 考 虑 到 W - LAN 的 信 道 带 宽 为 22MHz, 可 以 用 公 式 i+ j×22 ( j= 1, 2, 3, 4, 5; i= 1, 2, 3) 的顺序安排信道列表。 虽 然 蓝 牙 、W- LAN 都 是 标 准 协 议 , 但 是 协 议 复 杂 、 开发难度大、周期 长 等 都 是 其 软 肋 。nR F24L01 采 用 非 标 准 协 议 , 与 蓝 牙 、W - LAN 等 标 准 协 议 相 比 具 有 价 格 较 低、低功耗、易于开发等优势, 为一些只需要简单无线 连接的领域提供一种可供参考的解决方案, 其应用领域 和应用前景十分广泛。 ( 作者单位: 广东省技师学院)
nRF24L01 无线模块 说明书

nRF24L01 无线模块用户手册目录产品概述 (3)基本特性 (3)引脚接口说明 (4)模块尺寸 (6)nRF2401工作模式 (7)Enhanced ShockBurstTM收发模式 (7)Enhanced ShockBurstTM数据发送流程 (8)空闲模式 (9)关机模式 (9)nRF24L01模块参数设置 (9)主要参数设置 (10)程序设计分析 (10)nRF24L01初始化 (10)nRF24L01SPI写操作 (11)nRF24L01 SPI读操作 (11)nRF24L01写寄存器函数 (12)nRF24L01连续读多个寄存器函数 (12)nRF24L01连续写多个寄存器函数 (12)nRF24L01接收模式设置 (13)nRF24L01接收数据流程 (13)nRF24L01发送数据流程 (13)无线应用注意事项 (14)我们的承诺 (15)产品概述nRF24L01是挪威NordicVLSI公司出品的一款新型射频收发器件,采用4 mm×4 mm QFN20封装;nRF24L01工作在ISM频段:2.4~2.524 GHz。
且内置频率合成器、功率放大器、晶体振荡器、调制器等功能,并融合增强型ShockBurst技术,其中地址、输出功率和通信频道可通过程序进行配置,适合用于多机通信。
nRF24L01功耗很低,在以-6 dBm的功率发射时,工作电流也只有9 mA;而对应接收机的工作电流只有12.3 mA,多种低功率工作模式(掉电模式和空闲模式)使节能设计更方便。
nRF24L01在业界领先的低功耗特点使其特别适合采用钮扣电池供电的2.4G应用,整个解决方案包括链路层和MultiCeiver功能提供了比现有的 nRF24XX 更多的功能和更低的电源消耗,与目前的蓝牙技术相比在提供更高速率的同时,而只需花更小的功耗基本特性(1) 2.4Ghz全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps,高效GFSK调制,抗干扰能力强(3) 125频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 低功耗1.9 - 3.6V 工作,适合电池供电应用(6) 待机模式下状态为22uA;掉电模式下为900nA(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便(8) 内置专门稳压电路,即使开关电源也有很好的通信效果(9) 标准DIP间距接口,便于嵌入式应用(10)具有自动应答机制,和CRC校验,数据通讯稳定可靠。
nrf24l01 at指令

nrf24l01 at指令nrf24l01 AT指令是一种用于无线通信的模块,它可以实现低功耗、高速率的数据传输。
通过AT指令,我们可以对nrf24l01模块进行设置和控制,以满足不同应用场景的需求。
让我们来了解一下nrf24l01模块的基本功能。
该模块使用 2.4GHz 频段进行通信,具有可调的发射功率和通信速率。
它支持多种工作模式,如发送模式、接收模式和监听模式,并且可以通过AT指令进行切换和配置。
在使用nrf24l01模块之前,我们需要先连接它到主控设备。
通过对nrf24l01的引脚进行正确的连接,我们可以实现与主控设备的通信。
接下来,我们可以使用AT指令来设置nrf24l01的工作参数,如频率、通道、发射功率等。
通过AT指令,我们可以将nrf24l01设置为发送模式,这样它就可以将数据从主控设备发送到接收设备。
在发送模式下,我们可以使用AT指令设置数据的发送速率和发送功率,以及其他相关参数。
同时,我们还可以使用AT指令查询发送状态和发送结果,以确保数据的可靠传输。
除了发送模式,nrf24l01还支持接收模式和监听模式。
在接收模式下,它可以接收来自发送设备的数据,并将其传输到主控设备。
在监听模式下,nrf24l01可以监测无线信道上的数据活动,并将相关信息传输给主控设备。
通过AT指令,我们可以实现对nrf24l01模块的灵活控制和配置。
无论是设置发送速率还是调整接收功率,都可以通过AT指令来实现。
而且,由于AT指令的简洁易用,我们可以轻松地在不同应用场景中使用nrf24l01模块,以满足不同的通信需求。
nrf24l01 AT指令是一种强大的工具,可以帮助我们实现无线通信的目标。
通过合理使用AT指令,我们可以轻松配置nrf24l01模块的工作参数,并实现稳定可靠的数据传输。
无论是在物联网、智能家居还是其他领域,nrf24l01 AT指令都可以发挥重要的作用,为我们的应用带来便利和效益。
nRF24L01无线通信模块使用手册

nRF24L01无线通信模块使用手册一、模块简介该射频模块集成了NORDIC公司生产的无线射频芯片nRF24L01:1.支持2.4GHz的全球开放ISM频段,最大发射功率为0dBm2.2Mbps,传输速率高3.功耗低,等待模式时电流消耗仅22uA4.多频点(125个),满足多点通信及跳频通信需求5.在空旷场地,有效通信距离:25m(外置天线)、10m(PCB天线)6.工作原理简介:发射数据时,首先将nRF24L01配置为发射模式,接着把地址TX_ADDR和数据TX_PLD 按照时序由SPI口写入nRF24L01缓存区,TX_PLD必须在CSN为低时连续写入,而TX_ADDR在发射时写入一次即可,然后CE置为高电平并保持至少10μs,延迟130μs后发射数据;若自动应答开启,那么nRF24L01在发射数据后立即进入接收模式,接收应答信号。
如果收到应答,则认为此次通信成功,TX_DS置高,同时TX_PLD从发送堆栈中清除;若未收到应答,则自动重新发射该数据(自动重发已开启),若重发次数(ARC_CNT)达到上限,MAX_RT置高,TX_PLD不会被清除;MAX_RT或TX_DS置高时,使IRQ变低,以便通知MCU。
最后发射成功时,若CE为低,则nRF24L01进入待机模式1;若发送堆栈中有数据且CE为高,则进入下一次发射;若发送堆栈中无数据且CE为高,则进入待机模式2。
接收数据时,首先将nRF24L01配置为接收模式,接着延迟130μs进入接收状态等待数据的到来。
当接收方检测到有效的地址和CRC时,就将数据包存储在接收堆栈中,同时中断标志位RX_DR置高,IRQ变低,以便通知MCU去取数据。
若此时自动应答开启,接收方则同时进入发射状态回传应答信号。
最后接收成功时,若CE变低,则nRF24L01进入空闲模式1。
三、模块引脚说明四、模块与AT89S52单片机接口电路注:上图为示意连接,可根据自己实际需求进行更改;使用AT89S52MCU模块时,请将Nrf24L01通讯模块每个端口(MOSI、SCK、CSN和CE)接4.7K的排阻上拉到VCC增强其驱动能力(如下图:)。
nRF24L01的工作原理

nRF24L01的工作原理nRF24L01是一款广泛应用于无线通信领域的射频收发器。
它具有低功耗、高性能以及简单易用的特点,被广泛应用于物联网、智能家居、无线遥控和传感器网络等领域。
nRF24L01的工作原理主要涉及射频通信、调制解调、频率合成和数据包传输等方面。
下面将详细介绍nRF24L01的工作原理。
1. 射频通信:nRF24L01采用2.4GHz的ISM频段进行射频通信。
它支持多通道和多点通信,可以同时与多个设备进行通信。
射频通信是通过天线将电信号转换为无线电波进行传输,接收端再将无线电波转换为电信号进行处理。
2. 调制解调:nRF24L01使用GFSK(Gaussian Frequency Shift Keying)调制技术进行数据的调制和解调。
在发送端,待发送的数据经过调制电路转换为GFSK调制信号,然后通过射频天线发射出去。
在接收端,射频信号经过天线接收后,经过解调电路解调为原始数据。
3. 频率合成:nRF24L01内部集成了频率合成器,可以通过寄存器设置工作频率。
频率合成是指根据设定的频率合成信号源,使其达到指定的频率。
nRF24L01的频率合成器可以将工作频率合成到2.4GHz的ISM频段内,以实现与其他设备的通信。
4. 数据包传输:nRF24L01采用帧结构的数据包传输方式。
发送端将要发送的数据按照一定的格式组织成数据包,包括目标地址、源地址、数据长度和CRC校验等信息。
接收端通过接收到的数据包进行解析,提取出有效的数据。
nRF24L01的数据包传输还采用了自动重发机制和自动应答机制。
发送端在发送数据包后,会等待接收端的应答信号,如果接收端收到数据包并正确解析,会发送一个应答信号给发送端。
如果发送端在一定时间内没有收到应答信号,会自动重发数据包,以提高数据传输的可靠性。
此外,nRF24L01还支持多种工作模式,包括发送模式、接收模式和睡眠模式等。
发送模式用于发送数据,接收模式用于接收数据,睡眠模式可以降低功耗,延长电池寿命。
nrf24l01发送接收一体程序(以调通,解决了接收端只能接收一次的问题)

nrf24l01发送接收一体程序(以调通,解决了接收端只能接收一次的问题)/**************************************************基于单片机无线报警系统主机(机载设别)系统程序/**************************************************/#include#include#define uchar unsigned char/***************************************************/#define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址#define TX_PLOAD_WIDTH 4 // 数据通道有效数据宽度uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x34,0x43,0x10,0x10,0x01}; // 定义一个静态发送地址uchar RX_BUF[4]={0,0,0,0};uchar TX_BUF[4]={0x20,0x20,0x20,0x20};uchar flag; //无线模块接受数据标志uchar DATA = 0x01;uchar bdata sta;unsigned int a,k; //定时器延时参数uchar mark; //传感器响应标志位uchar mark1; // 延时标志位sbit RX_DR = sta^6; //接受数据成功标志位sbit TX_DS = sta^5; // 发送成功标志位sbit MAX_RT = sta^4; //最大重发上限标志位sbit HW=P2^0; //红外感应模块输入端sbit ZD=P1^7; //震动传感器输入端sbit LED=P2^1; //LED报警器输出端sbit SDA=P2^4; //语音模块数据控制端sbit ONN=P2^3; //语音芯片电源控制端口sbit FM =P2^5; //蜂鸣器/************************************************** 函数:delayus()描述:延迟x微秒/**************************************************/void delayus(unsigned int t){while(t--);}/************************************************** 函数:delayms()描述:延迟x毫秒/**************************************************/void delayms(unsigned int h){unsigned int j;while(h--)for(j=85;j>0;j--);}/************************************************** 函数:delays()描述:延迟x.xx秒/**************************************************/void delays( float h){unsigned int i,j;h*=100;while(h--){for(i=0;i<235;i++)for(j=0;j<3;j++);}}/************************************************** 函数:sendadd()描述:语音模块发送地址信号/**************************************************/ void sendadd(unsigned char addr){uchar i;delayms(5); /* 数据信号置于低电平5ms */for(i=0;i<8;i++){ SDA=1;if(addr & 1){delayus(60); /* 高电平比低电平为600us:200us,表示发送数据1 */SDA=0;delayus(20);}else{delayus(20);SDA=0; /* 高电平比低电平为200us:600us,表示发送数据0 */ delayus(60);}addr>>=1;}SDA=1;}/**************************************************函数:SPI_RW()描述:根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01 读出一字节/**************************************************/uchar SPI_RW(uchar byte){for(i=0; i<8; i++) // 循环8次{MOSI = (byte & 0x80); // byte最高位输出到MOSIbyte <<= 1; // 低一位移位到最高位SCK = 1; // 拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据byte |= MISO; // 读MISO到byte最低位SCK = 0; // SCK置低}return(byte); // 返回读出的一字节}/**************************************************//**************************************************函数:SPI_RW_Reg()描述:写数据value到reg寄存器/**************************************************/uchar SPI_RW_Reg(uchar reg, uchar value){uchar status;CSN = 0; // CSN置低,开始传输数据status = SPI_RW(reg); // 选择寄存器,同时返回状态字SPI_RW(value); // 然后写数据到该寄存器CSN = 1; // CSN拉高,结束数据传输return(status); // 返回状态寄存器}/************************************************** 函数:clear()描述:清TX_FIFO寄存器/**************************************************/void clear(){CSN=0;SPI_RW(FLUSH_TX);CSN=1;}/************************************************** 函数:SPI_Read()描述:从reg寄存器读一字节/**************************************************/ uchar SPI_Read(uchar reg){uchar reg_val;CSN = 0; // CSN置低,开始传输数据SPI_RW(reg); // 选择寄存器reg_val = SPI_RW(0); // 然后从该寄存器读数据CSN = 1; // CSN拉高,结束数据传输return(reg_val); // 返回寄存器数据}/**************************************************//**************************************************函数:SPI_Read_Buf()描述:从reg寄存器读出bytes个字节,通常用来读取接收通道数据或接收/发送地址/**************************************************/ uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes) {uchar status, i;CSN = 0; // CSN置低,开始传输数据status = SPI_RW(reg); // 选择寄存器,同时返回状态字for(i=0; ipBuf[i] = SPI_RW(0); // 逐个字节从nRF24L01读出CSN = 1; // CSN拉高,结束数据传输return(status); // 返回状态寄存器}/**************************************************//**************************************************函数:SPI_Write_Buf()描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发射通道数据或接收/发送地址/**************************************************/ uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes) {uchar status, i;CSN = 0; // CSN置低,开始传输数据status = SPI_RW(reg); // 选择寄存器,同时返回状态字for(i=0; iSPI_RW(pBuf[i]); // 逐个字节写入nRF24L01CSN = 1; // CSN拉高,结束数据传输return(status); // 返回状态寄存器}/**************************************************函数:RX_Mode()描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包/**************************************************/void RX_Mode(void){CE = 0;SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F); // CRC使能,16位CRC校验,上电,接收模式CE = 1;delayus(200); // 拉高CE启动接收设备}/**************************************************函数:TX_Mode()描述:这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),130us后启动发射,数据发送结束后,发送模块自动转入接收模式等待应答信号。
NRF24L01--实用无线通信技术

NRF24L01是一款工作在2.4~2.5GHZ频段世界通用ISM频段(不受管制的频段)的单片无限收发器芯片,通信距离可达300米。
RF------------------------射频。
GFSK----------高斯频移键控。
一、模块介绍(1) 2.4Ghz 全球开放ISM 频段免许可证使用(2) 最高工作速率2Mbps ,高效GFSK 调制,抗干扰能力强,特别适合工业控制场合(3) 126 频道,满足多点通信和跳频通信需要(4) 内置硬件CRC 检错和点对多点通信地址控制(5) 低功耗1.9 - 3.6V 工作,待机模式下状态为22uA ;掉电模式下为900nA(6) 内置2.4Ghz 天线,体积小巧15 mm X 29 mm(7) 模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示) ,可直接接各种单片机使用,软件编程非常方便--------中断方式接收数据。
(8) 内置专门稳压电路,使用各种电源包括DC/DC 开关电源均有很好的通信效果(9) 2.54 MM 间距接口,DIP 封装(10) 工作于Enhanced ShockBurst 具有Automatic packet handling, Auto packet transaction handling, 具有可选的内置包应答机制,极大的降低丢包率。
二、注意事项(1) VCC 脚接电压范围为1.9V~3.6V 之间,不能在这个区间之外,超过3.6V 将会烧毁模块。
推荐电压3.3V 左右。
(2) 除电源VCC 和接地端,其余脚都可以直接和普通的5V 单片机IO直接相连,无需电平转换。
当然对3V 左右的单片机更加适用了。
三、NRF24L01模块蛇形部分应该为天线(无线通信);中间方形部分应该为NRF24L01芯片,上面跑道形状为晶振。
四、8个引脚GND,VCC(接3.3V)CE-----芯片使能CSN-----片选非SCK------SPI1 CLKMOSI,MISO------SPI数据线IRQ-------中断信号线VDD_PA 电源输出---------给RF的功率放大器提供的+1.8V电源ANT1------------------天线接口1ANT2------------------天线接口2五、工作模式---------软件编程部分。
2.4G双向收发模块NRF24L01

2.4G双向收发模块NRF24L01⼀、简介WLC-24L01基于Nordic Semiconductor的nRF24L01⽆线收发芯⽚,是⼀款体积⼩巧的、低功耗、远距离的⽆线收发模块。
nRF24L01是Nordic推出的ISM频段⽆线收发芯⽚之⼀,频率设定为2.4G频段,灵敏度最佳可达到-94dBm@250Kbps,最⾼传输速率达2Mbps,输出功率通过寄存器配置可达到+4dBm。
模块集成了所有射频相关功能和器件,⽤户只需要通过SPI接⼝进⾏简单的寄存器配置,即可以实现通信,缩短了⽤户⽆线产品开发的周期。
nRF24L01是⼀款新型单⽚射频收发器件:⼯作于2.4GHz~2.5GHz ISM频段。
内置频率合成器、功率放⼤器、晶体振荡器、调制器等功能模块,并融合了增强型ShockBurst技术,其中输出功率和通信频道可通过程序进⾏配置。
NRF24L01功耗低:在以-6dBm的功率发射时,⼯作电流也只有9mA;接收时,⼯作电流只有12.3mA,多种低功率⼯作模式(掉电模式和空闲模式)使节能设计更⽅便。
⼆、基本特性●SHUTDOWN模式下,低电流损耗●⽅便投⼊应⽤●⼯作温度范围:﹣40℃~+85℃●⼯作电压:1.8~3.6Volts●有效频率:2.400G~2.525G●通信速率250K~2Mbps,可编程配置●3通道独⽴的32字节RX FIFO与TX FIFO●最多⽀持125个信号通道,可实现跳频通信●数字RSSI●⾃动频率校正(AFC)三、模块尺⼨图正视图侧视图斜⾓⽴体图四、应⽤范围●极低功耗UHF⽆线接收器●家⽤⽆线设备控制●⼯业仪器仪表⽆线数据采集和控制●AMR(⽔、电、煤⽓)三表抄表●建筑物与住宅(智能家居)控制●电⼦消费类产品⽆线遥控●⽆线报警与安全系统●⽆线传感器⽹络中控系统五、技术参数测试条件:Ta=25°C,VCC=3.3V技术指标参数备注⼯作电压直流 1.8~3.6V⼀般应⽤于3.0V或3.3V供电系统中中⼼频率2400MHz可配置寄存器到2400~2483MHz内频率误差±5KHz调制⽅式GFSK/2-FSK/MSK可通过配置寄存器实现不同的调制⽅式接收灵敏度-94dBm250kBaudRate发射电流<11.3mA@0dBm接收电流<13.5mA通过间歇式⼯作可实现200uA以内的平均⼯作电流休眠电流<1uA传输速率250K/1M/2M(bps)可通过配置寄存器实现不同的空中传输速率谐波功率<-35dBm最⼤0dBm输出时,⼆次谐波的功率通讯距离<50m ⽤WCL-nRF24L01作为发射器,GFSK调制⽅式,250kBaud 速率,0dBm发射天线阻抗50ohm⼯作温度-40~+85°C 存贮温度-55~+125°C外形尺⼨19mm×12mm×1.75mm引脚及详细尺⼨请以外形尺⼨图为准备注:1.模块的通信速率会影响通信距离,速率越⾼,通信距离越近,灵敏度越低。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;
sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);//设置发射速率为2MHZ,发射功率为最大值0dB
SPI_RW_Reg(WRITE_REG + CONFIG, 0x7c);//IRQ引脚不显示中断掉电模式1~16CRC校验
ucharbdata sta;
sbitRX_DR=sta^6;
sbitTX_DS=sta^5;
sbitMAX_RT=sta^4;
//********************************NRF24L01初始化******************************************//
void init_NRF24L01()
{
delayus(100);
CE=0; //片选使能
CSN=1; // SPI使能
SCK=0; // SPI时钟拉低
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); //写本地地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); //写接收端地址
#define TX_PLOAD_WIDTH 16 // ?个字节的TX数据长度
#define RX_PLOAD_WIDTH 16 // ?个字节的RX数据长度
uchar const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//本地地址
#defineIRQP32
//*****************************NRF24L01的接收和发送地址***************************************//
#define TX_ADR_WIDTH 5 // 5个字节的TX地址长度
#define RX_ADR_WIDTH 5 // 5个字节的RX地址长度
#define TX_ADDR 0x10 //发送地址寄存器
#define RX_PW_P0 0x11 //接收频道0接收数据长度
#define RX_PW_P1 0x12 //接收频道0接收数据长度
#define RX_PW_P2 0x13 //接收频道0接收数据长度
#define RX_PW_P3 0x14 //接收频道0接收数据长度
uchar const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};//接收地址
//***************************************NRF24L01寄存器指令**********************************//
#define READ_REG 0x00//读寄存器
#define WRITE_REG 0x20//写寄存器
#define RD_RX_PLOAD 0x61//读取接收数据
#define WR_TX_PLOAD 0xA0//写待发数据
#define FLUSH_TX 0xE1//冲洗发送FIFO
#define FLUSH_RX 0xE2//冲洗接收FIFO
{
MOSI = (num & 0x80); // output 'uchar', MSB to MOSI
num = (num << 1); // shift next bit into MSB..
SCK = 1; // Set SCK high..
num |= MISO;// capture current MISO bit
#define EN_AA 0x01 //自动应答功能设置
#define EN_RXADDR 0x02 //可用信道设置
#define SETUP_AW 0x03 //收发地址宽度设置
#define SETUP_RETR 0x04 //自动重发功能设置
#define RF_CH 0x05 //工作频率设置
函数:uchar SPI_Read(uchar reg)
功能:NRF24L01的SPI时序
sbit P07 = P0^7;
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
sbit P20 = P2^0;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
#define LEDP36
#define KEY P20
//*****************************************延时函数***************************************//
SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); //通道0自动应答
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //允许接收地址频道0
SPI_RW_Reg(WRITE_REG + RF_CH, 0x32); //设置信道工作频率,收发必须一致
//NRF24L01调试程序,全双工双向通信,即两个模块兼具收发功能,自动高速切换收发模式。
//使用本程序的前提条件是:硬件没问题。如果能正确运行本程序,也能说明你的硬件电路没问题。
//大家根据实际情况,更改NRF24L01各引脚、LED和KEY的宏定义。
//LED灯的状态由RxBuf[0]来决定,RxBuf[0] == 0,LED输出0;RxBuf[0] == 1,LED输出1;你也可以自行更改规则。
//KEY可以改变TxBuf[0]的值,从而改变另一起模块RxBuf[0]的值,进而改变LED的状态。
//此程序未用到外部中断,即不响应IRQ因此IRQ引脚可以接任意I/O口,不必接到外部中断引脚,不过建议接到外部中断引脚。
//若注释部分为乱码:设置keil:Edit>Configuration>Editor>Encoding选择chinese2312。
uchar SPI_Read(uchar reg);
void SetRX_Mode();
void SetTx_Mode();
uchar SPI_RW_Reg(uchar reg, uchar value);
uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);
#define uchar unsigned char
#define uint unsigned int
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
接收地址nrf24l01definereadreg0x00读寄存器definewritereg0x20写寄存器definerdrxpload0x61读取接收数据definewrtxpload0xa0写待发数据defineflushtx0xe1冲洗发送fifodefineflushrx0xe2冲洗接收fifodefinereusetxpl0xe3定义重复装载数据definenop0xff保留spinrf24l01defineconfig0x00配置收发状态crc校验模式以及收发状态响应方式defineenaa0x01自动应答功能设置defineenrxaddr0x02可用信道设置definesetupaw0x03收发地址宽度设置definesetupretr0x04自动重发功能设置definerfch0x05工作频率设置definerfsetup0x06发射速率功耗功能设置definestatus0x07状态寄存器defineobservetx0x08发送监测功能definecd0x09地址检测definerxaddrp00x0a频道0接收数据地址definerxaddrp10x0b频道1接收数据地址definerxaddrp20x0c频道2接收数据地址definerxaddrp30x0d频道3接收数据地址definerxaddrp40x0e频道4接收数据地址definerxaddrp50x0f频道5接收数据地址definetxaddr0x10发送地址寄存器definerxpwp00x11接收频道0接收数据长度definerxpwp10x12接收频道0接收数据长度definerxpwp20x13接收频道0接收数据长度definerxpwp30x14接收频道0接收数据长度definerxpwp40x15接收频道0接收数据长度definerxpwp50x16接收频道0接收数据长度definefifostatus0x17fifo栈入栈出状态寄存器设置voidinitnrf24l01