×
单片机 > 单片机程序设计 > 详情

nrf24l01 2.4GHZ无线发射接收模块接收程序

发布时间:2020-05-16 发布时间:
|
发射程序是用51写的

#include
#include
#define uchar unsigned char
#define uint unsigned int

#define TX_ADR_WIDTH   5
#define TX_PLOAD_WIDTH 4 

 

// SPI(nRF24L01) commands
#define READ_REG    0x00 
#define WRITE_REG   0x20 
#define RD_RX_PLOAD 0x61 
#define WR_TX_PLOAD 0xA0
#define FLUSH_TX    0xE1 
#define FLUSH_RX    0xE2 
#define REUSE_TX_PL 0xE3
#define NOP         0xFF 
#define CONFIG      0x00 
#define EN_AA       0x01 
#define EN_RXADDR   0x02 
#define SETUP_AW    0x03
#define SETUP_RETR  0x04 
#define RF_CH       0x05 
#define RF_SETUP    0x06 
#define STATUS      0x07 
#define OBSERVE_TX  0x08 
#define CD          0x09 
#define RX_ADDR_P0  0x0A 
#define RX_ADDR_P3  0x0D 
#define RX_ADDR_P4  0x0E 
#define RX_ADDR_P5  0x0F 
#define TX_ADDR     0x10
#define RX_PW_P0    0x11
#define RX_PW_P1    0x12 
#define RX_PW_P2    0x13
#define RX_PW_P3    0x14 
#define RX_PW_P4    0x15 
#define RX_PW_P5    0x16 
#define FIFO_STATUS 0x17 

sbit CE   = P1^2;
sbit CSN  = P3^5; 
sbit MISO = P1^0; 
sbit MOSI = P3^3; 
sbit SCK  = P1^1; 
sbit KEY=P1^6;
sbit LED=P3^6;
sbit IRQ=P3^2; 

uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x40,0x42,0x10,0x10,0x01};  // 定义一个静态发送地址
uchar dar[4]={0x00,0x01,0x50,0x96};
   


void delay(uchar x)  //延时ms
{
 uchar i,j;
 for(i=0;i<110;i++)
  for(j=0;j }
void delayus(uchar x)  //延时us
{
 for(;x>0;x--);
 _nop_;
}

void write_spi(uchar dat)  //写一个字节数据到nrf24l01
{
 uchar i;

 SCK=0;
 for(i=0;i<8;i++)
 
  dat=dat<<1;
  MOSI=CY;
  SCK=1;
  delay(10);
  SCK=0;  
 }

}
uchar read_spi()   //从nrf24l01读出一个字节数据

 uchar i,dat;

 SCK=0;
 for(i=0;i<8;i++)
 {
  delay(10);
  SCK=1;
  dat=dat<<1;
  dat|=MISO;
  SCK=0;
 }

 return dat;
}
void write_reg(uchar reg,uchar value)//配置寄存器
{
 CSN=0;
 write_spi(reg+0x20);
 delay(10);
 write_spi(value);
 CSN=1;
}
uchar read_reg(uchar reg)    //读寄存器值
{
 uchar value;
 CSN=0;
 write_spi(reg);
 delay(10);
 value=read_spi();
 CSN=1;
 return value;
}
void write_fifo(uchar reg,uchar *buf,uchar num)   //写多个字节
{
 uchar i;
 CSN=0;
 write_spi(reg);
 delay(10);
 for(i=0;i  {
  write_spi(*(buf+i));
  
 }
 CSN=1;
}


void read_fifo(uchar reg,uchar *buf,uchar num)    //读多个字节
{
 uchar i;
 CSN=0;
 write_spi(reg);
 delay(10);
 for(i=0;i  {
  *(buf+i)=read_spi();
  delay(10);
 }
 CSN=1;
}
void TX_Mode()    //发送
{
 CE = 0;
 write_fifo(RX_ADDR_P0+0x20, TX_ADDRESS, TX_ADR_WIDTH);
// write_fifo(WR_TX_PLOAD, buf, 4);
 write_reg(CONFIG, 0x0e);
 CE=1;
 delayus(10);

void RX_Mode()    //接收
{
 CE = 0;
 write_reg(CONFIG, 0x0f);            
   CE = 1;
 delayus(130);
                                         
}

 void init() //nrf24l01初始化以及单片机端口初始化
{
 CE  = 0;       
 CSN = 1;       
 SCK = 0;      
    LED = 1;
 IRQ=1;
 write_fifo(TX_ADDR+0x20, TX_ADDRESS, TX_ADR_WIDTH);   
 write_fifo(RX_ADDR_P0+0x20, TX_ADDRESS, TX_ADR_WIDTH);
 write_reg(EN_AA, 0x01);      
   write_reg(EN_RXADDR, 0x01);
 write_reg(RF_CH,40);
 write_reg(RX_PW_P0,4);
 write_reg(RF_SETUP, 0x07);
 write_reg(CONFIG, 0x0e);

}
void main()
{
 uchar status;
 uchar dat[4]={0x01,0x02,0x03,0x04};
 init();
   status=read_reg(STATUS);
 write_reg(STATUS,status) ; //清除状态寄存器
 TX_Mode();//配置为发送模式
 LED=0;
    while(1)
 
  if(KEY==0)
  {
   delay(10);
     if(KEY==0)   //按键扫描,释放后才开始发送数据
   {
    while(!KEY) ;
    write_fifo(WR_TX_PLOAD, dat, 4);
    while(IRQ);   //等待中断
    if(read_reg(STATUS)&0x20)//发送成功中断       
    {
     LED=1;
    }
    status=read_reg(STATUS);
       write_reg(STATUS,status) ;//清除状态寄存器
       IRQ=1;
    write_spi(FLUSH_TX) ;
    write_spi(FLUSH_RX) ; //清除缓存器
    LED=0;
    }
   
   }                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
     
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多