NRF24L01的问题
时间:10-02
整理:3721RD
点击:
情况是这样:我用LCD18654和NRF24L01联调(那是一块2401的单独调试),读出2401中寄存器的状态在LCD上显示,所有寄存器的数值读出来都是00,我用万能表测过2401的电压,是3V左右,没问题,由于买了两块,之后换了一块上去,都是读出来00(有可能两块都坏了?不会把。),之后我把2401拔出来(也就是电路上不加入2401),此时12864的读出数值还是00(程序是没变的),(12864的子程序是没问题的,我换一个固定的值让它显示,是可以的),NRF2401的程序如下:
uchar SPI_RW(uchar uuchar) //NRF24L01的SPI写时序
{
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
MOSI=(uuchar&0x80); //输出uuchar的最高位,从高位读起
uuchar=(uuchar<<1);
SCK=1;
uuchar|=MOSI; //同时读取STATUS
SCK=0;
}
return(uuchar); //返回读取的值
}
uchar SPI_Read(uchar reg) //NRF24L01读取一个字节的时序
{
uchar reg_val;
CSN=0; //CSN置0,允许指令操作
SPI_RW(reg); //写一条reg指令,这个是废弃的
reg_val=SPI_RW(0); //读取reg的值到reg_val,这个才是reg的值
CSN=1; //CSN置1,禁止操作
return(reg_val);
}
uchar SPI_RW_Reg(uchar reg,uchar value) //NRF24L01写一个字节到寄存器函数
{
uchar status;
CSN=0;
status=SPI_RW(reg); //读取STATUS
SPI_RW(value);
CSN=1;
return(status);
}
void main(void)
{
CE=0;
CSN=1;
SCK=0;
IRQ=1;
status=0;
delayms(200);
Lcd_Init();
Lcd_WriteCmd(0x01);
delayms(2);
hanzi_Disp(0,0,"NRF24L01发射测试");
status=SPI_Read(0x07);
hanzi_Disp(1,0,"STA");
while(1)
{
uchartoster1(status);
hanzi_Disp(1,4,str1);
delayms(800);
delayms(800);
hanzi_Disp(1,4," ");
delayms(800);
}
}
端口定义就给出来了,我也检查了三遍,没什么问题。这个是网上的程序,我自己也看了几次,也看不出有什么问题,高手请教下,只有10分了,谢谢,帮下忙把亲那个hanzi_Disp()函数是LCD的显示函数,不用纠结这个,这个没问题的。
uchar SPI_RW(uchar uuchar) //NRF24L01的SPI写时序
{
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++)
{
MOSI=(uuchar&0x80); //输出uuchar的最高位,从高位读起
uuchar=(uuchar<<1);
SCK=1;
uuchar|=MOSI; //同时读取STATUS
SCK=0;
}
return(uuchar); //返回读取的值
}
uchar SPI_Read(uchar reg) //NRF24L01读取一个字节的时序
{
uchar reg_val;
CSN=0; //CSN置0,允许指令操作
SPI_RW(reg); //写一条reg指令,这个是废弃的
reg_val=SPI_RW(0); //读取reg的值到reg_val,这个才是reg的值
CSN=1; //CSN置1,禁止操作
return(reg_val);
}
uchar SPI_RW_Reg(uchar reg,uchar value) //NRF24L01写一个字节到寄存器函数
{
uchar status;
CSN=0;
status=SPI_RW(reg); //读取STATUS
SPI_RW(value);
CSN=1;
return(status);
}
void main(void)
{
CE=0;
CSN=1;
SCK=0;
IRQ=1;
status=0;
delayms(200);
Lcd_Init();
Lcd_WriteCmd(0x01);
delayms(2);
hanzi_Disp(0,0,"NRF24L01发射测试");
status=SPI_Read(0x07);
hanzi_Disp(1,0,"STA");
while(1)
{
uchartoster1(status);
hanzi_Disp(1,4,str1);
delayms(800);
delayms(800);
hanzi_Disp(1,4," ");
delayms(800);
}
}
端口定义就给出来了,我也检查了三遍,没什么问题。这个是网上的程序,我自己也看了几次,也看不出有什么问题,高手请教下,只有10分了,谢谢,帮下忙把亲那个hanzi_Disp()函数是LCD的显示函数,不用纠结这个,这个没问题的。
大婶们,求助~~~~~
我单机么。?
哎~~~~~~~沉了!
没人知道么?很急啊,求帮助。
真的没人能解决么。