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

📄 rx.c

📁 单片机NRF2401的接受程序程序
💻 C
字号:
#include "msp430x16x.h"
#include "sfuntion.h"



#define PWR_UP BIT3 //P5.3
#define CE  BIT2  //P5.2
#define CS  BIT6  //P4.6
#define CLK1 BIT4  //P4.4
#define DATA BIT3  //P4.3
#define DR1  BIT5  //P4.5
#define KEY  BIT4  //P2.4



uchar InitData[15];
uchar RXData[10];


uchar BitCnt;
uchar ByteCnt;

uchar tempi;


void IO_2401A();
void nRF2401_ON();

void delay(uint del);
void delayus(uint del);
void DoSPIClock();
void CE_High();
void CE_Low();
void BuildInitWord();
void InitnRF2401();


void BuildShockWord(uchar *data);
void ShockBurst();
void ReceiveShock();




void IO_2401A()
{P5DIR|=PWR_UP+CE;
 P2DIR&=~KEY;
 P4DIR|=CS+CLK1+DATA;
 P4DIR&=~DR1;
 P5OUT&=~(PWR_UP+CE);
 P4OUT&=~(DATA+CS+CLK1);
 }


void nRF2401_ON()
{P5OUT|=PWR_UP;
delay(48);//延时3MS
}

/*void nRF2401_OFF()
{P5OUT&=~PWR_UP;}*/

void delay(uint del)
{uint x,y;
 for(x=0;x<del;x++)
 {for(y=0;y<100;y++)
   ;
 }
}

void delayus(uint del)
{uchar x;
 for(x=0;x<del;x++)
 ;
}

void DoSPIClock()//上升沿时钟
{P4OUT|=CLK1;
 _NOP();
P4OUT&=~CLK1;
}

void CE_High()
{P5OUT|=CE;}
void CE_Low()
{P5OUT&=~CE;}

void BuildInitWord()  //ConfigurationWord
{InitData[0]=0x50;   //channel2 receiver 2,datalength 80bit(10byte) 
 InitData[1]=0x50;   //channel1 receiver 1,datalength 80bit(10byte) 
 InitData[2]=0x00;
 InitData[3]=0xcc;   //
 InitData[4]=0xcc;   // 
 InitData[5]=0xcc;   //
 InitData[6]=0xcc;   //channel2 5 bytes  rx address
 InitData[7]=0x00;    
 InitData[8]=0xcc;     // 
 InitData[9]=0xcc;     //
 InitData[10]=0xcc;    //
 InitData[11]=0xcc;   // channel1 5 bytes rx address
 InitData[12]=0x82;//32bits address  CRC(16bit)  CRC (DENABLE)
 InitData[13]=0x6f;//one channel,shock mode,datarate 1Mbps,f=16MHZ
 InitData[14]=0x01;//RX MODE
}
void InitnRF2401() //Configuration Word Enter
{P5OUT&=~CE;
 P4OUT|=CS;  // confige mode
 for(ByteCnt=0;ByteCnt<15;ByteCnt++)
 {tempi=InitData[ByteCnt];
   for(BitCnt=0;BitCnt<8;BitCnt++)
   {if(tempi&0x80) P4OUT|=DATA;
      else  P4OUT&=~DATA;
      tempi<<=1;
      DoSPIClock();// 模拟CLOCK
   }
 }
 P4OUT&=~CS;
}

void ReceiveShock()
{uchar i=0,j=0;
 uchar dat=0;
 P4DIR&=~DATA;
 while(P4IN&DR1)
 { dat<<=1;
   if(P4IN&DATA)  dat|=0x01;
   P4OUT|=CLK1;
   _NOP();
   P4OUT&=~CLK1;
   i++;
   if(i==8)
    {i=0; 
     RXData[j++]=dat;
    dat=0;
    }
   }
 P4DIR|=DATA;
}

⌨️ 快捷键说明

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