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

📄 nrf2401.c

📁 nRF2401源码
💻 C
字号:
/*******************************************
            nRF2401发送程序
*******************************************/

#include <AT89X51.H>
#include <intrins.h>


#define uchar   unsigned char 
#define uint    unsigned int 
#define nop     _nop_()
#define nop5()  _nop_(); _nop_(); _nop_(); _nop_(); _nop_()    //延时5us

#define DATA P1_0      
#define CLK  P1_1
#define CS   P1_2      
#define CE   P1_3       
#define DIR  P1_4                   //控制74lvc4245数据流向 DIR=1:5V->3V 

#define LED  P1_5   //通讯


uchar  Addr_r[4]={0x00,0x00,0x00,0x11};		 // 地址寄存器
uchar  AddrByte_cnt=4;		    	         // 地址Byte数

uchar  code InitData[15]=         	// nRF2401 控制字 15 Byte
{	0x00,					        // 通道二接收数据宽度(1Byte)(112->119)  --不用
	0x08,							// 通道一接收数据宽度(1Byte)(104->111)  --8位
	0x00,							// 通道二地址(A24)  (5Byte) ( 64->103)  --不用
	0x00,							// 通道二地址(A23)          
	0x00,							// 通道二地址(A22)        
	0x00,							// 通道二地址(A21)        
	0x00,							// 通道二地址(A20)
	0x00,							// 通道一地址(A14)  (5Byte) ( 24->63 )  --地址码:0x00 cccc cccc
	0x00,							// 通道一地址(A13)
	0x00,							// 通道一地址(A12)
	0x00,							// 通道一地址(A11)
	0x00,							// 通道一地址(A10)
	0x83,							// b7~b2:接收地址宽度,和发送端一致,不超过40bit         ( 18->23 ) --地址码长度:32
								    // b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)        ( 16->17 ) --CRC使能,CRC16
	0x4F,						    // b15:接收通道选择(0-通道1;1-通道1和2)                ( 15 )     --单频道
								    // b14:收发模式(0-Direct模式,1-ShockBurst模式)         ( 14 )     --突发模式
								    // b13:波特率选择(0-250Kbps;1-1Mbps)                   ( 13 )     --250Kbps
								    // b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)     ( 10->12 ) --16M
								    // b9~b8:发射功率(11-0db)                              ( 8 -> 9 ) --0db
	0x04						    // b7~b1:发射频率配置					               ( 1 -> 7 ) --2402M	
                                    // b0:收发控制(0-发送;1-接收)                          ( 0 )      --发送状态
};

   
/*******************************************
             函数声明
*******************************************/
void  Delay_ms(uchar n);
void  nRF2401_init(void);
void  nRF2401_WriteByte(uchar b);
void  nRF2401_SendByte(uchar d);



/************************************************************
                  延时子程序
*************************************************************/
void main(void)
{
  uchar a[10]={1,12,23,34,45,56,67,78,89,90};
  uchar m,n; 
  uint k;
  LED=1;

  DIR=1;                       //控制74lvc4245数据流向 DIR=1:5V->3V 
  nRF2401_init();
 
  while(1)
   for(m=0;m<10;m++)
    { 
	 LED=0;
     nRF2401_SendByte(a[m]);   //发送地址和数据

    for(k=0;k<5000;k++);
     for(k=0;k<5000;k++);

	 LED=1;
 
     for(k=0;k<5000;k++);
      for(k=0;k<5000;k++);

    }
}


/************************************************************
                  延时子程序
*************************************************************/
void  Delay_ms(uchar n)
{ uchar i;
  while(n--)
    for(i = 0; i<122; i++)      //延时n ms
     { ; }
}

/************************************************************
 语法格式:	void nRF2401_init(void)
 实现功能:	初始化nRF2401
 参数:		无
 返回值:	无
*************************************************************/
void nRF2401_init(void)
{
	uchar i;
	CLK=0;                         //时钟线初始化
	CE=0;
	CS=1;                          //置配置模式
	nop5();
	nop5();                        //延时10us
	for(i=0;i<15;i++)
      nRF2401_WriteByte(InitData[i]);
    nop5();
    CS=0;
    CE=1;                          //置发送模式
}

/************************************************************
 语法格式:	void nRF2401_WriteByte(unsigned int b)
 实现功能:	向nRF2401A写入一个字节数据
 参数:		uchar b: 待写入数据
 返回值:		无
*************************************************************/
void nRF2401_WriteByte(uchar b)
{  
  uchar i;                             // 发送数据为一个字节(8位)
  for(i=0;i<8;i++) 
   { if ((b<<i)&0x80)     DATA = 1;    //先发送高位
     else                 DATA = 0; 
	 nop;                              //延时1us
     CLK=1;                            //上升沿有效
     nop;
	 nop;
     CLK=0;  
     nop;                   
   } 
} 

/************************************************************
 语法格式:	void nRF2401_SendByte(uchar d)
 实现功能:	将目标地址+字节数据写入nRF2401
 参数:		uchar d: 待发送字节数据
 返回值:		无
*************************************************************/
void nRF2401_SendByte(uchar d)
{
	uchar i;
	CS=0;
    CE=1;
	nop5();
	nop5();
	for(i=0; i<AddrByte_cnt; i++)          //AddrByte_cnt为主机地址字节数
	   nRF2401_WriteByte(Addr_r[i]);       //主机地址
 	nRF2401_WriteByte(d);                  //d为待发数据
	nop5();
	CE=0;                                  //CE置低,激活nRF2401发送数据d
	Delay_ms(1);
}

⌨️ 快捷键说明

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