没有合适的资源?快使用搜索试试~ 我知道了~
在整个无线通信过程中,初始化只需设置一次。 TxBuf[]存放的是发送的数据。并且此数据被发送时,是将这个数组的数全部发送的。对方也全部接收。 RxBuf[]接收数组,用于存放对方发来的数据。 SetRX_Mode(); nRF24L01_RxPacket(RxBuf); 当主程序中包含这两个子函数时,且这时某个数据被发送过来,则会被接收到。且被存放到了RxBuf[]; 反之包含nRF24L01_TxPacket(TxBuf);且TxBuf[]已经存入你想要的数据的时候,这个数据将被发送。 程序部分:下面给出程序,由于收发双方程序是完全一样的,所以只粘贴一份。
资源推荐
资源详情
资源评论







(相关人员如觉得本人水平低下,还请见谅)
Nrf24L01 的使用程序和使用方法和简单操作:
功能:
无线对发程序。两个模块 a,b,实现按下一个按键,会在对方的数码管上显示 3 或 4,在
本机上显示 1,2。
当一个模块,比如 a 模块。当两个按键按下其中一个,则会在另一个模块 b 上显示数字
3,4(具体根据按下哪个按键)。以上功能描述,B 模块按键按下,如同 a 模块一样的功能,
不做系统性描述了。
下面给出程序中几个地方的解释:
#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 指令
#define REUSE_TX_PL 0xE3 // 定义重复装载数据指令
#define NOP 0xFF // 保留
类似这种的描述,可以等同于 READ_REG =0x00; 这个是经过实际程序测试出来的,比
如
以下程序:
#include<reg51.h>
#define k 0xfe
void main()
{
P1=k;
}
则会出现此类结果:

MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSI
uchar = (uchar << 1); // shift next bit into MSB..
SCK = 1; // Set SCK high..
uchar |= MISO; // capture current MISO bit
SCK = 0;
此处为 spi 的核心,是 spi 协议的编程,其中 uchar |= MISO; 表示 uchar |= MISO | uchar;
MOSI = (uchar & 0x80);其中 0x80 是 1000 0000,与上 uchar,这种&,是按位与,故可以
从 uchar 提取出一个电平给 mosi。
MOSI = (uchar & 0x80); // output 'uchar', MSB to MOSI
uchar = (uchar << 1);
这两句组合起来用,就实现了把 uchar 编程 8 位 2 进制数后的每一位都可以发送给 mosi;
Uchar 的只待对象,就是上面的诸如#define FLUSH_TX 0xE1
这样的数,或者是相关的发送数据。
*pBuf 这个并不是一个主要的问题,实际这个是涉及指针问题的,带*的跟地址有关系,但
是我们其实不需要很关心编译的时候数据被具体存入哪个地址,即使是很重要的数据。
void init_NRF24L01(void)
{
inerDelay_us(100);
CE=0; // chip enable
CSN=1; // Spi disable
SCK=0; //
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); // 写
接收端地址

SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 频道 0 自动 ACK 应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允许接收地址只有频道 0,如果
需要多频道可以参考 Page21
SPI_RW_Reg(WRITE_REG + RF_CH, 0); // 设置信道工作为 2.4GHZ,收发必须一
致
SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,
本次设置为 32 字节
SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //设置发射速率为 1MHZ,发射
功率为最大值 0dB
}
在整个初始化中我们看到:
CE=0; // chip enable
CSN=1; // Spi disable
这是设置整个的状态。如过状态设置成待机,则引脚可能变为高阻。(以上并非全部引
脚)
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); // 写
接收端地址
类似以上两句,这是应用 spi 的子程序,将寄存器指令放入 nrf24l01。如果需深究,请参考
说明书,手册等。或者可以通过#define READ_REG 0x00 // 读寄存器指令 等了解大
概流程。
在整个无线通信过程中,初始化只需设置一次。
TxBuf[]存放的是发送的数据。并且此数据被发送时,是将这个数组的数全部发送的。对方
也全部接收。
RxBuf[]接收数组,用于存放对方发来的数据。
SetRX_Mode();
nRF24L01_RxPacket(RxBuf);
当主程序中包含这两个子函数时,且这时某个数据被发送过来,则会被接收到。且被存放
到了 RxBuf[];
反之包含 nRF24L01_TxPacket(TxBuf);且 TxBuf[]已经存入你想要的数据的时候,这个数据
将被发送。
程序部分:下面给出程序,由于收发双方程序是完全一样的,所以只粘贴一份。
程序虽然不是自己写的,但是经过实际测试的,没有任何诡异的问题。
#include <reg52.h>
#include <intrins.h>
typedef unsigned char uchar;
剩余12页未读,继续阅读
资源评论


Anthony安东尼
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
