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

📄 rf2401.c

📁 无线收发模块RF2401的所有源代码
💻 C
字号:
#include<avr/io.h>

#define BYTE_BIT0	0x01
#define BYTE_BIT1	0x02
#define BYTE_BIT2	0x04
#define BYTE_BIT3	0x08
#define BYTE_BIT4	0x10
#define BYTE_BIT5	0x20
#define BYTE_BIT6	0x40
#define BYTE_BIT7	0x80

#define uchar unsigned char
#define uint unsigned int
#define Comd_Port  PORTD
#define PWR_UP_1  	Comd_Port|=(1<<2)
#define PWR_UP_0  	Comd_Port&=~(1<<2)
#define CE_1  		Comd_Port|=(1<<3)
#define CE_0  		Comd_Port&=~(1<<3)
#define CS_1  		Comd_Port|=(1<<4)
#define CS_0  		Comd_Port&=~(1<<4)
#define DR1_1  		Comd_Port|=(1<<5)
#define DR1_0  		Comd_Port&=~(1<<5)
#define CLK1_1  	Comd_Port|=(1<<6)
#define CLK1_0  	Comd_Port&=~(1<<6)
#define DATA_1  	Comd_Port|=(1<<7)
#define DATA_0  	Comd_Port&=~(1<<7)
                                        

#define Data_OUT 	DDRD|=(1<<7)
#define Data_IN		DDRD&=~(1<<7)

#define DR1_OUT 	DDRD|=(1<<5)
#define DR1_IN		DDRD&=~(1<<5)

#define  TEST_2  0x8E
#define  TEST_1  0x08
#define  TEST_0  0x1C

#define  DATA2_W  0x10
#define  DATA1_W  0xE8


#define  ADDR2_4 0x00
#define  ADDR2_3 0x1c
#define  ADDR2_2 0xcc
#define  ADDR2_1 0xcc
#define  ADDR2_0 0xcc

#define  ADDR1_4 0x00
#define  ADDR1_3 0xcd
#define  ADDR1_2 0xcd
#define  ADDR1_1 0xcd
#define  ADDR1_0 0xcd

#define  ADDR_W  0X10
#define  CRC_L   0X0
#define  CRC_EN  0X1

#define  RX2_EN  0X0
#define  CM      0X1

#define  RFDR_SB 0X1  // 传输速度
#define  XO_F    0X3   //晶振频率设置 16M

#define  RF_PWR  0X3  //信号发射频率
#define  RF_CH   0X2
#define  RXEN    0X0

#define  RFConfig_Bit0    TEST_2
#define  RFConfig_Bit1    TEST_1
#define  RFConfig_Bit2    TEST_0
#define  RFConfig_Bit3    DATA2_W
#define  RFConfig_Bit4    DATA1_W
#define  RFConfig_Bit5    ADDR2_4
#define  RFConfig_Bit6    ADDR2_3
#define  RFConfig_Bit7    ADDR2_2
#define  RFConfig_Bit8    ADDR2_1
#define  RFConfig_Bit9    ADDR2_0
#define  RFConfig_Bit10   ADDR1_4
#define  RFConfig_Bit11   ADDR1_3
#define  RFConfig_Bit12   ADDR1_2
#define  RFConfig_Bit13   ADDR1_1
#define  RFConfig_Bit14   ADDR1_0
#define  RFConfig_Bit15  (ADDR_W<<2|CRC_L<<1|CRC_EN)
#define  RFConfig_Bit16  (RX2_EN<<7|CM<<6  |RFDR_SB<<5|XO_F<<2|RF_PWR)
#define  RFConfig_Bit17  (RF_CH<<1|RXEN)


unsigned char  nRF2401_Conf[18]={
RFConfig_Bit0,RFConfig_Bit1,RFConfig_Bit2,RFConfig_Bit3,
RFConfig_Bit4,
RFConfig_Bit5,RFConfig_Bit6,RFConfig_Bit7,RFConfig_Bit8,
RFConfig_Bit9,
RFConfig_Bit10,RFConfig_Bit11,RFConfig_Bit12,RFConfig_Bit13,RFConfig_Bit14,
RFConfig_Bit15,RFConfig_Bit16,RFConfig_Bit17
};


void delay100()//delay 1
{
   unsigned int i;
   for (i=0;i<100;i--);
}



void delay(int a)//delay 2
{
   uchar i,j;
   for(i=0; i<100; i++) 
      for(j=0; j<a; j++) ;
}


unsigned char DATA_BUF;

#define DATA7 ((DATA_BUF&BYTE_BIT7)!=0)
#define DATA0 ((DATA_BUF&BYTE_BIT0)!=0)

unsigned char ByteRead()
{
  unsigned char i,k=0;
   for (i=0;i<8;i++)
  {
     DATA_BUF=(DATA_BUF<<1);
	 CLK1_1;

   	 Data_IN;
	 if((PIND&0X80)==0X80)
	 {
	 
	    DATA_BUF|=BYTE_BIT0;
	 }
     else 
	 {
	    DATA_BUF&=(~BYTE_BIT0);
	 }
    CLK1_0;
  }
  return DATA_BUF;
}

 void ByteWrite(unsigned char send)
 {
    
    unsigned char i;
	Data_OUT;
	DATA_BUF=send;
	for(i=0;i<8;i++)
	{
       if (DATA7)
       {
		    DATA_1;
       }
     else
	 {
            DATA_0;

	 }
	 CLK1_1;
	 DATA_BUF=DATA_BUF<<1;
	 CLK1_0;
	}
 }

void Config2401()
{
     Data_OUT;
	 unsigned int i;
	 unsigned char variable1;
	 CS_0;
	 CE_0;
	 PWR_UP_1;
	 for(i=0;i<10;i++)
		 delay100();
	 CS_1;
	 for(i=0;i<18;i++)
	 {
	    variable1=nRF2401_Conf[i];
		ByteWrite(variable1);
	 }
	 delay100();
	 CS_0;
	 delay100();
	 
}

void SetTxMode()//out
{
  Data_OUT;
  PWR_UP_1;
  CE_0;
  CS_1;
  delay100();
  DATA_0;
  CLK1_1;
  CLK1_0;
  CS_0;
  CE_1;
  delay100();
  
}

void SetRxMode()//in
{
    Data_OUT;
	PWR_UP_1;
	CE_0;
    CS_1;
	delay100();
	DATA_1;
    CLK1_1;
    CLK1_0;
    CS_0;
    CE_1;
	delay100();
}
unsigned char TxAddress[]={0xcd,0xcd,0xcd,0xcd};

void nRF2401_TxPacket(unsigned char TxBuf[])
{  
   int i;
   unsigned char variable2;
   CE_1;
   delay100();
 
   for(i=0;i<(ADDR_W/8);i++)
   {  
      variable2=TxAddress[i];
	  ByteWrite(variable2);
	  delay(1);
   }
   
    for(i=0;i<(DATA1_W/8);i++)
	{
	   variable2=TxBuf[i];
	   ByteWrite(variable2);
	 }
    CE_0;

	delay(3);
	
	 
}	

unsigned  char nRF2401_RxPacket(unsigned char *RxBuf)
{
  	unsigned int i,k;
 
 	DR1_IN;
    DR1_1;
  	if((PIND&0X20)==0X20)
    {
	   
       
	   for(i=0;i<(DATA1_W/8);i++)
	    {
		    *RxBuf=ByteRead();
	
			RxBuf++;
	
	     }
	   
	  return 1;
     }
      return 0;
}

IOinit()
{
   	DDRA=0XFF;
	PORTA=0xff;
	DDRD=0XFF;
	PORTD=0xFF;
}
unsigned char TxRxBuf[32];

 void main()
 {
	    volatile uchar i,j;
	    int k;
	    IOinit();
	    delay(5);
		Config2401();
		delay100();
		TxRxBuf[0]=0xff;
		TxRxBuf[1]=0xff;    
		TxRxBuf[2]=0xff;     
		TxRxBuf[3]=0xff;
		delay(1);
		SetRxMode();

	while(1)
		{


           /* 	nRF2401_TxPacket(TxRxBuf);*/
			 

            delay(6);
		
			if(nRF2401_RxPacket(TxRxBuf)==1)
			 { 
			     	PORTA=0X01;
		
			   		PORTA=TxRxBuf[0];
	       
			 }

	    }  
		
}

⌨️ 快捷键说明

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