nrf24l01 地址rf24l01寄存器表是几位的

nRF24L01中状态寄存器读出来的数据都是00啊?
[问题点数:20分]
本版专家分:0
CSDN今日推荐
本版专家分:12612
2010年11月 硬件/嵌入开发大版内专家分月排行榜第三
本版专家分:0
本版专家分:12612
2010年11月 硬件/嵌入开发大版内专家分月排行榜第三
本版专家分:0
本版专家分:12612
2010年11月 硬件/嵌入开发大版内专家分月排行榜第三
本版专家分:8
匿名用户不能发表回复!|
CSDN今日推荐关于NRF24L01 读寄存器的问题,大家帮帮忙!【单片机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:150,314贴子:
关于NRF24L01 读寄存器的问题,大家帮帮忙!收藏
我使用的是STC89C52 用电脑串口 查看寄存器的值
结果全是0 , 请问有可能是哪些问题呢?#include&reg52.h&#include &intrins.h&#define uchar unsigned char#define unit unsigned intsbit CE=P1^0;
//发送或接受模式选择端sbit CSN=P1^1;
//SPI片选信号sbit SCK=P1^2;
//SPI时钟线sbit MOSI=P1^3;
//数据输出端sbit MISO=P1^4;
//数据接收端sbit IRQ=P1^5;
//可屏蔽中断脚unit const TX_ADDRESS[5]={0x01,0x04,0x33,0x40,0x21};
//设置发送地址码unit const RX_ADDRESS[5]={0x01,0x04,0x33,0x40,0x21};
//设置接收地址码//****************************SPI寄存器指令********************************#define READ_REG
// 读寄存器指令#define WRITE_REG
// 写寄存器指令#define RD_RX_PLOAD
// 读取接收数据指令#define WR_TX_PLOAD
// 写待发数据指令#define FLUSH_TX
// 冲洗发送 FIFO指令#define FLUSH_RX
// 冲洗接收 FIFO指令#define REUSE_TX_PL
// 定义重复装载数据指令#define NOP
// 保留//*************************************SPI(nRF24L01)寄存器地址****************************************************#define CONFIG
// 配置收发状态,CRC校验模式以及收发状态响应方式#define EN_AA
// 自动应答功能设置#define EN_RXADDR
// 可用信道设置#define SETUP_AW
// 收发地址宽度设置#define SETUP_RETR
// 自动重发功能设置#define RF_CH
// 工作频率设置#define RF_SETUP
// 发射速率、功耗功能设置#define STATUS
// 状态寄存器#define OBSERVE_TX
// 发送监测功能#define CD
// 地址检测
#define RX_ADDR_P0
// 频道0接收数据地址#define RX_ADDR_P1
// 频道1接收数据地址#define RX_ADDR_P2
// 频道2接收数据地址#define RX_ADDR_P3
// 频道3接收数据地址#define RX_ADDR_P4
// 频道4接收数据地址#define RX_ADDR_P5
// 频道5接收数据地址#define TX_ADDR
// 发送地址寄存器#define RX_PW_P0
// 接收频道0接收数据长度#define RX_PW_P1
// 接收频道1接收数据长度#define RX_PW_P2
// 接收频道2接收数据长度#define RX_PW_P3
// 接收频道3接收数据长度#define RX_PW_P4
// 接收频道4接收数据长度#define RX_PW_P5
// 接收频道5接收数据长度#define FIFO_STATUS
// FIFO栈入栈出状态寄存器设置//*****************************************************************sbit RX_DR=sta^6;
//数据接收中断sbit TX_DS=sta^5;
//数据发送中断sbit MAT_RT=sta^4;void delay(uchar a){ for(a;a&0;a--);
_nop_();}void delay20ms(void)
//误差 0us{
unsigned char a,b;
for(b=215;b&0;b--)
for(a=45;a&0;a--);
//if Keil,require use intrins.h
//if Keil,require use intrins.h}unit SPI_RW(unit aa)
//SPI读写{ for(b=0;b&8;b++)
//循环八次达到八位数据交换的目的 {
MOSI=(aa & 0x80);
//取aa的首位值赋予MOSI
//aa左移一位
//时钟电路拉高发送数据
//将收到的MISO中的数据加入aa最后一位
//放开时钟,完成一位数据交换 }
//返回收到的值
}uchar SPI_Read(uchar reg)
//读取寄存器的值{ CSN=0;
//片选使能,(选择此芯片) SPI_RW(reg);
//打开所要读取的寄存器 a=SPI_RW(0);
//读取寄存器 CSN=1;
//关闭芯片
//返回读取的值 }uchar SPI_RW_Reg(uchar reg,uchar a)
//读写寄存器。像寄存器内写入值{ CSN=0;
//打开片选 b=SPI_RW(reg);
//打开寄存器,取出寄存器状态值 SPI_RW(a);
//向寄存器写入值 CSN=1;
//关闭寄存器}uchar SPI_Read_pbuf(uchar reg,unit *pbuf,uchar byte)
//读取寄存器内的值,放入参数二的数组中{ uchar a,b; CSN=0;
//片选打开 a=SPI_RW(reg);
//打开寄存器 for(b=0;b&b++)
pbuf[b]=SPI_RW(0);
//循环读入数组 } CSN=1;}uchar SPI_Write_pbuf(uchar reg,unit *pbuf,uchar byte)
//向寄存器内写入数组数据{ uchar a,b; CSN=0;
//片选打开 a=SPI_RW(reg); //打开寄存器 for(b=0;b&b++)
SPI_RW(pbuf[b]);
//逐次将数组中的值写入 } CSN=1;}void TX_Mod(void){ CE
// 待机 CSN = 1;
// SPI禁止 SCK = 0;
// SPI时钟置低 IRQ = 1;
// 中断复位 SPI_Write_pbuf(WRITE_REG+TX_ADDR,TX_ADDRESS,5);
//写发送地址码 SPI_Write_pbuf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,5); //写接收地址码,设置为通道0接收 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
允许接收地址只有频道0
SPI_RW_Reg(WRITE_REG + RF_CH, 0);
设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, 5); //设置接收数据长度,本次设置为5字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
//配置射频参数}void RX_Mod(void){ CE
// 待机 CSN = 1;
// SPI禁止 SCK = 0;
// SPI时钟置低 IRQ = 1;
// 中断复位 SPI_Write_pbuf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,5); //写接收地址码,设置为通道0接收 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);
频道0自动 ACK应答允许
SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);
允许接收地址只有频道0
SPI_RW_Reg(WRITE_REG + RF_CH, 0);
设置信道工作为2.4GHZ,收发必须一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, 5); //设置接收数据长度,本次设置为5字节 SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);
//配置射频参数}void TX_Packet(unit *pbuf){ CE=0;
//停止发送 SPI_Write_pbuf(WR_TX_PLOAD,pbuf,5);
//装载将发送内容 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);
//配置寄存器 CE=1;
//开始发送 delay(10);}void RX_Packet(unit *pbuf){
sta=SPI_Read(STATUS);
//读取寄存器状态,看是否收到数据 if(TX_DS==1)
//如果收到数据 {
//停止接收
SPI_Read_pbuf(RD_RX_PLOAD,pbuf,5);
//读出数据到pbuf中 } SPI_RW_Reg(WRITE_REG+STATUS,sta);
//将状态寄存器置1 if(CE==0)
//如果为待机状态 {
//打开接收 }}uchar c,d,i;void int_com()
//串口初始化{ TMOD=0X20; TH1=0XF3; TL1=0XF3; SCON=0X50; PCON=0X80; ES=1; EA=1; TR1=1;}void main(){ TX_Mod(); delay20ms(); int_com(); SBUF=0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); while(!TI);
TI=0; while(1) {
case 1: d=SPI_Read(READ_REG+RF_SETUP);
case 2: d=SPI_Read(READ_REG+EN_RXADDR);
case 3: d=SPI_Read(READ_REG+RF_CH);
while(!TI);
} }void intrcom() interrupt 4{
RI=0; c=SBUF;// P2=a; i=1;}
超低功耗,256KB-512KB闪存,可扩展存储器,备有开发板
好吧,我的问题沉底了
Spi接口没弄好
楼主我这个小白连为什么只有通道0应答?就是SPI_RW_Reg最后面那个十六进制数是怎么确定的?
登录百度帐号nrf24l01通信读取寄存器都为0
[问题点数:30分,结帖人candicezjm]
本版专家分:0
结帖率 93.33%
CSDN今日推荐
本版专家分:0
结帖率 93.33%
本版专家分:729
本版专家分:0
结帖率 93.33%
本版专家分:729
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐 上传我的文档
 上传文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
NRF24L01无线模块寄存器的操作设置
下载积分:30
内容提示:NRF24L01无线模块寄存器的操作设置
文档格式:PDF|
浏览次数:392|
上传日期: 09:39:15|
文档星级:
全文阅读已结束,如果下载本文需要使用
 30 积分
下载此文档
该用户还上传了这些文档
NRF24L01无线模块寄存器的操作设置
关注微信公众号}

我要回帖

更多关于 nrf24l01通过改变地址 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信