色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > nrf24l01 2.4GHZ無(wú)線發(fā)射接收模塊接收程序

          nrf24l01 2.4GHZ無(wú)線發(fā)射接收模塊接收程序

          作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò) 收藏
          發(fā)射程序是用51寫(xiě)的

          #include2.h>
          #include
          #define uchar unsigned char
          #define uint unsigned int

          本文引用地址:http://cafeforensic.com/article/201611/321663.htm

          #define TX_ADR_WIDTH5
          #define TX_PLOAD_WIDTH 4

          // SPI(nRF24L01) commands
          #define READ_REG0x00
          #define WRITE_REG0x20
          #define RD_RX_PLOAD 0x61
          #define WR_TX_PLOAD 0xA0
          #define FLUSH_TX0xE1
          #define FLUSH_RX0xE2
          #define REUSE_TX_PL 0xE3
          #define NOP0xFF
          #define CONFIG0x00
          #define EN_AA0x01
          #define EN_RXADDR0x02
          #define SETUP_AW0x03
          #define SETUP_RETR0x04
          #define RF_CH0x05
          #define RF_SETUP0x06
          #define STATUS0x07
          #define OBSERVE_TX0x08
          #define CD0x09
          #define RX_ADDR_P00x0A
          #define RX_ADDR_P30x0D
          #define RX_ADDR_P40x0E
          #define RX_ADDR_P50x0F
          #define TX_ADDR0x10
          #define RX_PW_P00x11
          #define RX_PW_P10x12
          #define RX_PW_P20x13
          #define RX_PW_P30x14
          #define RX_PW_P40x15
          #define RX_PW_P50x16
          #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};// 定義一個(gè)靜態(tài)發(fā)送地址
          uchar dar[4]={0x00,0x01,0x50,0x96};


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

          void write_spi(uchar dat)//寫(xiě)一個(gè)字節(jié)數(shù)據(jù)到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讀出一個(gè)字節(jié)數(shù)據(jù)
          {
          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)//寫(xiě)多個(gè)字節(jié)
          {
          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)//讀多個(gè)字節(jié)
          {
          uchar i;
          CSN=0;
          write_spi(reg);
          delay(10);
          for(i=0;i{
          *(buf+i)=read_spi();
          delay(10);
          }
          CSN=1;
          }
          void TX_Mode()//發(fā)送
          {
          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初始化以及單片機(jī)端口初始化
          {
          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) ; //清除狀態(tài)寄存器
          TX_Mode();//配置為發(fā)送模式
          LED=0;
          while(1)
          {
          if(KEY==0)
          {
          delay(10);
          if(KEY==0)//按鍵掃描,釋放后才開(kāi)始發(fā)送數(shù)據(jù)
          {
          while(!KEY) ;
          write_fifo(WR_TX_PLOAD, dat, 4);
          while(IRQ);//等待中斷
          if(read_reg(STATUS)&0x20)//發(fā)送成功中斷
          {
          LED=1;
          }
          status=read_reg(STATUS);
          write_reg(STATUS,status) ;//清除狀態(tài)寄存器
          IRQ=1;
          write_spi(FLUSH_TX) ;
          write_spi(FLUSH_RX) ; //清除緩存器
          LED=0;
          }

          }
          }
          }



          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉