<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ò) 收藏



          /************************發(fā)送部分*********************/

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

          #include
          #include
          #include
          #include
          #include

          #define uint unsigned int
          #define uchar unsigned char

          //nRF24L01的數(shù)據(jù)寬度,地址寬度,以及數(shù)據(jù)定義
          #define TX_ADR_WIDTH 4 //地址數(shù)據(jù)
          #define RX_PLOAD_WIDTH 4 //接收的有效數(shù)據(jù)寬度
          #define TX_PLOAD_WIDTH 4 //發(fā)送的有效數(shù)據(jù)寬度
          #define BUSY SPI0CFG&0x80


          uchar TX_ADDRESS[]={0xe7,0xe7,0xe7,0xe7}; //傳送接收端地址
          uchar shuzu[4]={0x99,0x99,0xc7,0x99}; //要發(fā)送的有效數(shù)據(jù)
          uchar rx_buf[4]={0x00,0x00,0x00,0x00}; //接收的數(shù)據(jù)緩存
          uchar a,b,i;
          ucharsta;

          //引腳定義2274
          #define CSN_HIGH CSN=1
          #define CSN_LOW CSN=0
          #define CE_HIGH CE=1
          #define CE_LOW CE=0

          sbit CE=P0^5;
          sbit CSN=P0^6;
          sbit IRQ=P0^4;
          sbit c=P0^7;

          //24L01寄存器地址
          #define CONFIG 0X00//配置寄存器地址
          #define EN_AA 0X01//自動應(yīng)答寄存器地址
          #define EN_RXADDR 0X02//接收地址使能
          #define SETUP_AW 0X03//設(shè)置地址寬度
          #define SETUP_RETR 0X04//建立自動重發(fā)
          #define RF_CH 0X05//射頻通道
          #define RF_SETUP 0X06//射頻寄存器
          #define STATUS 0X07//狀態(tài)寄存器
          #define OBSERVE_TX 0X08//發(fā)送檢測寄存器
          #define CD 0X09//載波檢測
          #define RX_ADDR_P0 0X0A//數(shù)據(jù)通道0接收地址
          #define RX_ADDR_P1 0X0B
          #define RX_ADDR_P2 0X0C
          #define RX_ADDR_P3 0X0D
          #define RX_ADDR_P4 0X0E
          #define RX_ADDR_P5 0X0F
          #define TX_ADDR 0X10//發(fā)送地址寄存器地址
          #define RX_PW_P0 0X11//接收地址通道0有效數(shù)據(jù)寬度
          #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//FIFO狀態(tài)寄存器
          //SPI命令字
          #define READ_REG 0X00//讀寄存器命令
          #define WRITE_REG 0X20//寫寄存器命令
          #define RD_RX_PLOAD 0X61//讀有效數(shù)據(jù)命令
          #define WR_TX_PLOAD 0XA0//寫有效數(shù)據(jù)命令
          #define FLUSH_TX 0XE1//清除TX_FIFO應(yīng)用于發(fā)射模式
          #define FLUSH_RX 0XE2//清除RX_FIFO應(yīng)用于接收模式
          #define REUSE_TX_PL 0XE3//重新使用上一包有效數(shù)據(jù)
          #define NOP 0XFF//空操作指令

          void dat_int(void)
          {
          CSN_HIGH;
          CE_LOW;
          a=0;
          c=0;
          }


          void sysclk(void) //內(nèi)部晶振
          {
          OSCICL=0xb3; // 0x83
          OSCICN=0xc2; //二分頻
          CLKSEL=0x00;
          }

          //延時子函數(shù)us
          void delay(uint i)
          {
          while(i--)
          ;
          }

          uchar SPI_RW(uchar byte) //用SPI讀寫一字節(jié)的數(shù)據(jù)
          {
          uchar rbyte;

          SPI0DAT=byte;
          while(!SPIF);
          rbyte=SPI0DAT;
          SPIF=0;
          delay(15);
          return rbyte;
          }


          uchar SPI_RW_Reg(uchar reg,uchar value) //向寄存器寫一字節(jié)的數(shù)據(jù),同時返回狀態(tài)字
          {
          uchar status;
          CSN_LOW;
          SPI0DAT=reg;
          while(!SPIF);
          delay(20);
          status=SPI0DAT;
          SPIF=0;
          SPI0DAT=value;
          while(!SPIF);
          SPIF=0;
          CSN_HIGH;
          return(status);
          }


          uchar SPI_Read(uchar reg) //從寄存器讀出一字節(jié)的數(shù)據(jù)
          {
          uchar byte;
          CSN_LOW;
          SPI0DAT=reg;
          while(!SPIF);
          delay(20);
          SPI0DAT=0x00;
          SPIF=0;
          while(!SPIF);
          byte=SPI0DAT;
          SPIF=0;
          CSN_HIGH;
          return byte;
          }


          uchar SPI_Read_Buf(uchar reg,uchar *pBuf,uchar bytes) //從reg讀出bytes字節(jié)的數(shù)據(jù)
          {
          uchar status,byte_ctr;
          CSN_LOW;

          status=SPI_RW(reg);
          for(byte_ctr=0;byte_ctr pBuf[byte_ctr]=SPI_RW(0);

          CSN_HIGH;
          return status;
          }


          uchar SPI_RW_Buf(uchar reg,uchar *pBuf,uchar bytes) //向reg寫入bytes字節(jié)的數(shù)據(jù)
          {
          uchar status,byte_ctr;
          CSN_LOW;

          status=SPI_RW(reg);
          for(byte_ctr=0;byte_ctr SPI_RW(pBuf[byte_ctr]);

          CSN_HIGH;
          returnstatus;
          }

          //接收函數(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);//定義接收通道號

          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位校驗(yàn),發(fā)送模式

          CE_HIGH;
          delay(100);
          CE_LOW;

          }


          上一頁 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); })();