微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > NRF24L01的问题

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的显示函数,不用纠结这个,这个没问题的。


大婶们,求助~~~~~

我单机么。?

哎~~~~~~~沉了!

没人知道么?很急啊,求帮助。

真的没人能解决么。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top