⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nrf2401drive.c

📁 nfr2401的驱动程序
💻 C
字号:
/*********************************Copyright (c)*****************************
**
**                            飞鹏电子工作室
**                              嵌入式项目
**                      http://xpstudio2003.blog.163.com
**
**项目名称: xp51nRF2401
**编译环境: KEIL 2
**--------------------------------------------------------------------------
**文 件 名: nRF2401Drive.C
**作    者: 曹香鹏
**创建日期: 2008年12月18日
**描    述: 
**--------------------------------------------------------------------------
**维护记录:
**          未优化程序.
****************************************************************************/


#include "xp51HDF.H"
#include "nRF2401Drive.H"


//引脚定义
sbit 	nRFPWR	    = 	P1^0; 						
sbit	nRFCE 	    = 	P1^1;							
sbit 	nRFCS	    = 	P1^2;							
sbit 	nRFDR1	    = 	P1^3;								
sbit	nRFCLK1     = 	P1^4;							
sbit 	nRFDATA	    = 	P1^5;

//从2401中,单字节读出,
INT8U nRFByteRead(void) 
{ 
    INT8U i;
    INT8U RxDatTmp=0;
    nRFDATA = 1;
    for (i=0; i<8; i++)
    {
        nRFCLK1  = 1;
        RxDatTmp <<= 1; 
      
        if(nRFDATA)
        { 
            RxDatTmp |= 1; 
        } 
        nRFCLK1 = 0;  
    } 
    return RxDatTmp; 
} 

//写入单字节至2401
void nRFByteWrite(INT8U SendData) 
{ 
    INT8U i; 
    for (i=0; i<8; i++) 
    { 
        nRFCLK1=0; 

        if( SendData&0x80 )     //总是发送最高位 
        { 
            nRFDATA = 1;
        } 
        else 
        { 
            nRFDATA = 0; 
        } 

        nRFCLK1=1;
        SendData <<=1;    
    }
} 

//2401的配置文件
INT8U nRFConf[15] =
{
    //0x01,
    //0x01,
    //0x01,
    0x08,//通道二接收数据宽度(bit)
    0x08,//通道一接收数据宽度(bit)
    0x00,//通道二地址(A24)
    0x00,//通道二地址(A23)
    0x00,//通道二地址(A22)
    0x00,//通道二地址(A21)
    0x01,//通道二地址(A20)
    0x00,//通道一地址(A14)
    0x00,//通道一地址(A13)
    0x00,//通道一地址(A12)
    0x00,//通道一地址(A11)
    0x01,//通道一地址(A10)
    0xA3,//b7~b2:接收地址宽度,和发送端一致,不超过40bit;
         //b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)
    0x4F,//b15:接收通道选择(0-通道1;1-通道1和2)
         //b14:收发模式(0-Direct模式,1-ShockBurst模式)
         //b13:波特率选择(0-250Kbps;1-1Mbps)
         //b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)
         //b9~b8:发射功率(11-0db)
    0x04 //b7~b1:发射频率配置
         //b0:收发控制(0-发送;1-接收)

}; 

//接收方通道硬件地址 
INT8U nRFRxAddress[5]={ 0x00,
                        0x00,
                        0x00,
                        0x00,
                        0x02};

//初始化2401
void nRFInit() 
{ 
    INT8U i; 
    
    nRFCS  = 0; 
    nRFCE  = 0; 
    nRFPWR = 1; //上电,进入待机模式
    for(i=0;i<10;i++) 
    {//从上电到进入配置模式需要3ms 的延时 
        Delay100();
    }

    //进入配置方式 
    nRFCS  = 1;
    Delay100();
    for(i=0;i<15;i++) 
    { 
        nRFByteWrite(nRFConf[i]); 
    } 

    Delay100(); 
    nRFCS  = 0;    //CS置低使配置有效 
    Delay100(); 
} 

//使2401进入发送模式
void nRFSetTxMode(void) 
{ 
    //进入配置模式 
    nRFPWR  = 1; 
    nRFCE   = 0; 
    nRFCS   = 1; 
    Delay100(); 
    
    //配置寄存器0 字节RXEN  设置为0:发送模式 
    nRFCLK1 = 0; 
    nRFDATA = 0;
    Delay100();
    nRFCLK1 = 1; 
    
    Delay100();

    //进入工作模式
    nRFCS   = 0; 
    nRFCE   = 1;
    Delay100(); 
} 

//使2401进入接收模式
void nRFSetRxMode(void) 
{ 
    //设置为配置模式 
    nRFPWR  = 1; 
    nRFCE   = 0; 
    nRFCS   = 1;
    Delay100(); 

    //配置寄存器0 字节RXEN 设置为 1:接收模式 
    nRFCLK1 = 0; 
    nRFDATA = 1; 
    Delay100();
    nRFCLK1 = 1;
    
    Delay100();

    //进入工作模式
    nRFCS   = 0; 
    nRFCE   = 1;
    Delay100(); 
    
} 


//nRF 数据发送函数 
void nRFTxPacket(INT8U TxBuf[]) 
{ 
    INT16U i; 
    
    nRFCE  = 1; 
    Delay100(); 

    //写入接收地址
    for(i=0; i<5; i++)
    { 
        nRFByteWrite(nRFRxAddress[i]); 
    }
 
    //写入数据
    for(i=0; i<1; i++)
    { 
        nRFByteWrite(TxBuf[i]); 
    }

    //CE 置低使2401发送数据
    nRFCE  = 0;     
    Delay100();
    Delay100(); 
} 

//-------------------------------------------------------
//检测并接收数据函数 
//返回  0:没有数据接收 
//      1:接收到数据 
INT8U nRFRxPacket(INT8U *RxBuf) 
{ 
    INT16U i; 
    nRFDR1  = 1; 
    
    if(nRFDR1) 
    { 
        for (i=0; i<8; i++) 
        { 
            *RxBuf  = nRFByteRead(); 
            RxBuf++; 
        } 
        return 1; 
    } 
    return 0; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -