搜索
bottom↓
回复: 9

求助 nrf2401程序的问题

[复制链接]

出0入0汤圆

发表于 2009-2-21 20:38:19 | 显示全部楼层 |阅读模式
请各位帮忙看一下下面的代码有什么问题     在调试NRF2410的时候(就是淘宝超值区的那个模块),接受不到一个数据包,单片机用得是C8051f020  
各IO口都已经配置好 该推挽的推挽了 该上拉的也上啦了

#include "nrf2401.h"  

code uchar CofigBuf[15]=
        {
        0x00,               //接收频道二有效数据长度
         
        40,             //接收频道一有效数据长度
         
        0x00,0x00,0x00,0x00,0x00,   //接收频道二地址
         
        0x00,0xcd,0xef,0x12,0xaa,   //接收频道一地址
         
        0x83,               //32位地址,16位CRC,使能CRC
                        //bit7~2:ADDR_W,最大40位
                                    
                        //bit1:CRC_L
                        //Logic 0: 8 bit CRC     
                        //Logic 1: 16 bit CRC
                                    
                                    
                        //BIT0:CRC_EN
                        //Logic 0: On-chip CRC generation/checking disabled
                        //Logic 1: On-chip CRC generation/checking enabled
                                    
                                    
        0x4f,               //ShockBurst模式,250 kbps,16M晶振,0dBm最大功率
         
                        //Bit 15:RX2_EN
                        //Logic 0: One channel receive
                        //Logic 1: Two channels receive
                                    
                        //Bit 14:
                        //Communication Mode:
                        //Logic 0: nRF2401 operates in direct mode.
                        //Logic 1: nRF2401 operates in ShockBurst. mode

                        //Bit 13:
                        //RF Data Rate:
                        //Logic 0: 250 kbps
                        //Logic 1: 1 Mbps
                                    
                        //Bit 12-10:Selects the nRF2401 crystal frequency to be used:
                        //  D12     D11     D10     Crystal Frequency [MHz]
                        //  0       0   0                 4
                        //  0   0   1                 8
                        //  0   1   0           12
                        //  0   1   1           16
                        //  1   0   0           20
                                    
                        //Bit 9-8:RF_PWR: Sets nRF2401 RF output power in transmit mode:
                        //  D9  D8  P [dBm]
                        //  0   0         -20
                        //  0   1         -10
                        //  1   0         -5
                        //  1         1         0
                                    
                                    
                                    
        0x50            //2400+4*1=2404MHZ=2.404G,发送模式
         
                        //Bit 7 – 1:RF_CH#: Sets the frequency channel the nRF2401 operates on.
                        //Channelrf = 2400MHZ + RF_CH# * 1.0MHZ
                                    
                        //Bit 0:Set active mode:
                        //Logic 0: transmit mode
                        //Logic 1: receive mode
        };
         
         
uchar AddrCofig[4]={0xcd, 0xef, 0x12, 0xaa};                //地址
  

/*****************************************************************************************
//函数名void NRF2410_IO_Init(void)
//输入:无
//输出:无
//功能描述:初始化IO程序
/*****************************************************************************************/
void NRF2410_IO_Init(void)
{
    POW_UP = 1;
    Delay1ms(4);
    CE = 0;
    CS = 0;
    CLK1 = 0;
}

/*****************************************************************************************
//函数名:void NRF2410_WriteByte(uchar dat)
//输入:发送的数据
//输出:无
//功能描述:串行发送一个字节  高位在前
/*****************************************************************************************/
static
void NRF2410_WriteByte(uchar dat)
{
    uchar i;

    CLK1 = 0;
    _nop_();
    _nop_();
    for(i=0; i<8; i++)
    {
        if(dat & 0x80)
        {
            DATA = 1;
        }
        else  
        {
            DATA = 0;
        }
        CLK1 = 1;  
        _nop_();
        _nop_();
        dat <<= 1;
        CLK1 = 0;
        _nop_();
        _nop_();
    }
}


/*****************************************************************************************
//函数名:uchar NRF2401_ReadByte(void)
//输入:无
//输出:读出的数据
//功能描述:SPI读出一个字节
/*****************************************************************************************/
static
uchar NRF2401_ReadByte(void)
{
    uchar i,temp= 0;
    DATA = 1;   
    CLK1 = 0;
    _nop_();
    _nop_();
    for(i=0; i<8; i++)
    {
        temp <<= 1;
        CLK1 = 1;
        _nop_();
        _nop_();
        if(DATA)++temp;  
        CLK1 = 0;
        _nop_();
        _nop_();
    }
    return temp;
}

/*****************************************************************************************
//函数名:void NRF2401_SetTxMode(void)
//输入:无
//输出:无
//功能描述:转为发送模式
/*****************************************************************************************/
void NRF2401_SetTxMode(void)
{
        uchar ch;
        CS = 1;
        Delay1us(10);
        ch = FRESELE;
        NRF2410_WriteByte(ch);
        CS = 0;
        Delay1us(200);
}

/*****************************************************************************************
//函数名:NRF2401_SetRxMode()
//输入:无
//输出:无
//功能描述:转为接收模式
/*****************************************************************************************/
void NRF2401_SetRxMode(void)
{
        uchar ch;
        CS = 1;
        Delay1us(10);
        ch = FRESELE;
        NRF2410_WriteByte(ch | 0x01);
        CS = 0;
        Delay1us(200);              //200us
}

/*****************************************************************************************
//函数名:NRF2401_Init()
//输入:无
//输出:无
//功能描述:Nrf2401_Init初始化,配置成32位地址。
/*****************************************************************************************/
void NRF2401_Init(void)
{
    uchar i;
    CE = 0;
    CS = 1;
    Delay1us(10);
       for(i=0; i<15; i++)
       {
          NRF2410_WriteByte(CofigBuf);
       }
    CS = 0;   
    Delay1ms(1);
}
  
/*****************************************************************************************
//函数名:void NRF2401_TX_Data(uchar *TxBuf)
//输入:uchar *TxBuf   5字节缓冲
//输出:无
//功能描述:发送缓冲区的数据。
/*****************************************************************************************/
void NRF2401_TX_Data(uchar *TxBuf)
{
    uchar i;     
    NRF2401_SetTxMode();     
    CE = 1;     
    Delay1us(100);     
       for(i=0; i<4; i++)
       {
           NRF2410_WriteByte(AddrCofig); //发送地址
       }
       for(i=0; i<5; i++)
       {
           NRF2410_WriteByte(TxBuf);     //发送五位数据
       }
    CE = 0;
    Delay1ms(1);
}  

/*****************************************************************************************
//函数名:uchar NRF2401_RX_Data(uchar *RxBuf)
//输入:uchar *RxBuf    5字节接收缓冲
//输出:0 :超时错误  1 :正常返回
//功能描述:接收数据 保存在*RxBuf接收缓冲区内
/*****************************************************************************************/
uchar NRF2401_RX_Data(uchar *RxBuf)
{
    uchar i;
    uint time=0;
    NRF2401_SetRxMode();
    CE = 1;     
    while(DR1 == 0)
    {
        ++time;
        if(DR1==1)  break ;
        if (time > 200)
        {
            CE = 0;
            return 0;
        }                  
    }
    i = 0;
    while(DR1)
    {
        RxBuf = NRF2401_ReadByte();
        ++i;
        if (i == 5)
        break;
    }
    while(DR1)
    {
        NRF2401_ReadByte();
    }
    CE = 0;
    return 1;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

 楼主| 发表于 2009-2-22 01:39:30 | 显示全部楼层
大哥们帮忙看会啊

出0入0汤圆

发表于 2009-2-22 13:05:46 | 显示全部楼层
帮顶。。。。

出0入0汤圆

 楼主| 发表于 2009-2-22 16:15:55 | 显示全部楼层
自己顶   都已经淹没了~~~~

出0入0汤圆

 楼主| 发表于 2009-2-22 16:18:07 | 显示全部楼层
问题还没解决的啊    期待哪位好心人 或者调试过2401的看看   帮忙想想问题出哪了   现在也不晓得模块工作没的

出0入0汤圆

 楼主| 发表于 2009-2-22 18:08:27 | 显示全部楼层
有谁能发个能用的代码让我测试一下吗?

出0入0汤圆

发表于 2009-2-22 20:11:12 | 显示全部楼层
ICC的,肯定能用,是“avenbbs ”提供的。


这个链接里的NRF2401子程序就是参考后,改的。
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=3213867&bbs_page_no=1&search_mode=3&search_text=zajia&bbs_id=9999

点击此处下载 ourdev_421480.rar(文件大小:37K) (原文件名:ourdev_556789_NRF2401_icc719.rar)

出0入0汤圆

 楼主| 发表于 2009-2-25 19:49:26 | 显示全部楼层
谢谢楼上的!

出0入0汤圆

发表于 2012-3-7 10:41:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2013-8-26 18:37:49 | 显示全部楼层
谢谢楼上的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-3 03:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表