<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > C8051F的nRF24L01 PTR6000無線收發(fā)

          C8051F的nRF24L01 PTR6000無線收發(fā)

          作者: 時間:2016-11-30 來源:網(wǎng)絡(luò) 收藏

          //接收函數(shù),接收返回1表示有數(shù)據(jù)收到
          uchar nRF24L01_RxPacket(uchar *rx_buf)
          {
          uchar sta;
          uchar revale=0;
          SPI_RW_Reg(WRITE_REG+CONFIG,0X0F);
          SPI_RW_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//定義接收通道號

          本文引用地址:http://www.ex-cimer.com/article/201611/324033.htm

          CE_HIGH; //開始接收數(shù)據(jù)
          delay(130);

          sta=SPI_Read(READ_REG+STATUS);//接收狀態(tài)寄存器,用于判斷是否收到數(shù)據(jù)
          if(sta&0x40)
          {
          CE_LOW; //結(jié)束接收數(shù)據(jù)
          SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);
          revale=0xff;
          }

          SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收復(fù)位
          return revale;
          }


          void nRF24L01_TxPacket(uchar *tx_buf) //發(fā)送函數(shù)
          {
          CE_LOW;

          SPI_RW_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); //給發(fā)送寄存器寫入地址,寬度為TX_ADR_WIDTH

          SPI_RW_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//給接收寄存器寫入地址,寬度也為TX_ADR_WIDTH
          SPI_Read_Buf(RX_ADDR_P0,rx_buf,TX_ADR_WIDTH);

          SPI_RW_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH); //向發(fā)送寄存器寫入TX_PLOAD_WIDTH寬度的數(shù)據(jù),

          SPI_RW_Reg(WRITE_REG+CONFIG,0X0E); //配置為PWR_UP位,使能CRC,16位校驗,發(fā)送模式

          CE_HIGH;
          delay(100);
          CE_LOW;

          }

          void nRF24L01_Config() //nRF24L01的配置函數(shù)
          {
          CE_LOW;//芯片使能
          CSN_HIGH;//SPI復(fù)位

          SPI_RW_Reg(WRITE_REG+CONFIG,0X0F); //使能接收模式
          SPI_Read(CONFIG);
          SPI_RW_Reg(WRITE_REG+EN_AA,0X01);//數(shù)據(jù)通道0自動應(yīng)答
          SPI_Read(EN_AA);
          SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01); //通道0允許
          SPI_RW_Reg(WRITE_REG+SETUP_AW,0X02); //設(shè)置地址寬度為4字節(jié)
          SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1A);//建立自動重發(fā),500+86us,10次重發(fā)
          SPI_RW_Reg(WRITE_REG+RF_CH,0x02);//設(shè)置工作通道頻率
          SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);//設(shè)置工作通道傳輸速率為1Mbps,發(fā)射功率為0dBm
          SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設(shè)置通道0有效數(shù)據(jù)寬度RX_PLOAD_WIDTH

          }


          void SPI(void) //SPI初始化
          {
          SPI0CFG=0x40;
          SPI0CN=0x01; //0000 0001最后一位是SPI使能位 SPI工作在三線主方式
          SPI0CKR=0x2f; //SPI時鐘頻率設(shè)置為150kHz 0x6f 0x2f
          }

          void Interrupt_int(void) //中斷設(shè)定
          {
          IE=0x40; //允許SPI中斷請求
          IP=0x00; //SPI為低優(yōu)先級
          }

          void pio(void) // 端口配置
          {
          P0MDIN=0xff; //禁止模擬輸入,0為模擬,1為數(shù)字
          P0MDOUT=0xff; //0為開漏,1為推挽(ff)
          P0SKIP=0x00;

          P1MDIN=0xff;
          P1MDOUT=0xff; //低四位用于138


          P2MDIN=0xff; //禁止模擬輸入,0為模擬,1為數(shù)字
          P2MDOUT=0xff; //0為開漏,1為推挽(ff)

          P3MDIN=0xff;
          P3MDOUT=0xff; //低四位用于138

          XBR0=0x02;
          XBR1=0x40;

          //P0=0xff;
          }

          void sysclk(void);
          void pio(void);
          void SPI(void);
          void Interrupt_int(void);
          void delay(uint i);
          void dat_int(void);

          void main(void) //主程序
          {
          PCA0MD &= ~0x40;// 關(guān)閉看門狗
          pio();
          sysclk();
          SPI(); //SPI0DAT是SPI的數(shù)據(jù)寄存器
          Interrupt_int();
          EA=0;
          dat_int();
          nRF24L01_Config(); //nRF24L01的配置函數(shù)


          while(1)
          {
          //nRF24L01_TxPacket(tx_buf);

          nRF24L01_RxPacket(rx_buf);
          sta=SPI_Read(READ_REG+FIFO_STATUS);
          P1=rx_buf[2];

          delay(10000);
          if(rx_buf[2]==0xc7)break;
          }
          while(1)
          {
          nRF24L01_TxPacket(tx_buf); //發(fā)送函數(shù)

          sta=SPI_Read(READ_REG+STATUS); //發(fā)送程序復(fù)位
          if(sta&0x20)
          {
          c=1;
          SPI_RW_Reg(WRITE_REG+STATUS,sta);

          CSN_LOW; //清除發(fā)送寄存器的值
          SPI_RW(FLUSH_TX);
          CSN_HIGH;
          }

          delay(10000);
          }
          }


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: C8051FnRF24L01PTR6000無線收

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();