nRF24L01無線模塊6個接收通道 接收_第1頁
nRF24L01無線模塊6個接收通道 接收_第2頁
nRF24L01無線模塊6個接收通道 接收_第3頁
nRF24L01無線模塊6個接收通道 接收_第4頁
nRF24L01無線模塊6個接收通道 接收_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、一共三個文件Main.c文件#include nRF24L01.h3/*函數(shù):main()描述:主函數(shù)2$&力“$,/*/void main(void)EX0=1;IT0=1;EA=1;init_io();StartUART();Init_24L01();R_S_Byte (2);TX_Mode(TX_BUF);Check_ACK(1);delay_ms(250);delay_ms(250);RX_Mode();/初始化IO/把nRF24L01設(shè)置為發(fā)送模式并發(fā)送數(shù)據(jù)/等待發(fā)送完畢,清除TX FIFO/設(shè)置為接收模式while(1)CheckButtons();/ 按鍵掃描nRF24L01.c

2、 文件#includenRF24L01.hucharcodeTX_ADDRESSTX_ADR_WIDTH=0 xb1,0 xb2,0 xb3,0 xb4,0 x01;/0 x34,0 x43,0 x10,0 x10,0 x01; / 路由節(jié)點地址 uchar code RX_ADDRESS1TX_ADR_WIDTH = 0 xb0,0 xb2,0 xb3,0 xb4,0 x01;/ 寫地址寄存器是 先寫低字節(jié),因此后面幾個字節(jié)相同 uchar code RX_ADDRESS21 = 0 xb1;uchar code RX_ADDRESS31 = 0 xb2;uchar code RX_ADDR

3、ESS41 = 0 xb3;uchar code RX_ADDRESS51 = 0 xb4;uchar RX_BUFTX_PLOAD_WIDTH;uchar TX_BUFTX_PLOAD_WIDTH=0 x01,0 x02,0 x03,0 x4,0 x05,0 x06,0 x07,0 x08,0 x09,0 x10,0 x11,0 x12,0 x13,0 x14,0 x15,0 x16,0 x17,0 x18,0 x19,0 x20,0 x21,0 x22,0 x23,0 x24,0 x25,0 x26,0 x27,0 x28,0 x29,0 x30,0 x31,0 x32,;uchar fl

4、ag,status;uchar DATA = 0 x01;uchar bdata sta;sbit RX_DR = staA6;sbit TX_DS = staA5;sbit MAX_RT = staA4;2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + +

5、+ + + + + + + + + + + + + + + & /*函數(shù):init_io() 描述:初始化IO 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /*/ void init_io(void)CE = 0;/ 待機CSN = 1;/ SPI 禁止SCK = 0;/ SPI時鐘置低IRQ = 1;/中斷復(fù)位LED = 0 x00;/關(guān)閉指示燈2 + + + + + + + + + + + + + + + + + + + + + + +

6、 + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & /*函數(shù):delay_ms() 描述:延遲x毫秒 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

7、 + + + /*/ void delay_ms(uchar x) uchar i, j;= 0;for(i=0; i0;n-)_nop_();3力力力力力力力力力力力力力力力e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & e kl. kp/*函數(shù):SPI_RW()描述:根據(jù)SPI協(xié)議,寫一字節(jié)數(shù)據(jù)到nRF24L01,同時從nRF24L01讀出一字節(jié)2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

8、+ + + + + + + / /*/uchar SPI_RW(uchar byte)uchar i;for(i=0; i8; i+)MOSI = (byte & 0 x80);byte = 1;SCK = 1;MISO輸出1位數(shù)據(jù)byte |= MISO;SCK = 0;return(byte);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/循環(huán)8次/ byte最高位輸出到MOSI/低一位移位到最高位/拉高SCK, nRF24L0

9、1從MOSI讀入1位數(shù)據(jù),同時從讀MISO到byte最低位/ SCK置低/返回讀出的一字節(jié)3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & /*函數(shù):SPI_RW_Reg() 描述:寫數(shù)據(jù)value到reg寄存器+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

10、 + /*/uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;/ CSN置低,開始傳輸數(shù)據(jù)/ 選擇寄存器,同時返回狀態(tài)字/然后寫數(shù)據(jù)到該寄存器/ CSN拉高,結(jié)束數(shù)據(jù)傳輸/ 返回狀態(tài)寄存器CSN = 0;status = SPI_RW(reg);SPI_RW(value);CSN = 1;return(status);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /*/3 kL. kL.

11、 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & /*函數(shù):SPI_Read() 描述:從reg寄存器讀一字節(jié)2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/uchar SPI_Read(uchar reg)/ CSN置低,開始傳輸數(shù)據(jù)/ 選擇寄存器/然后從

12、該寄存器讀數(shù)據(jù)/ CSN拉高,結(jié)束數(shù)據(jù)傳輸/ 返回寄存器數(shù)據(jù)uchar reg_val;CSN = 0;SPI_RW(reg);reg_val = SPI_RW(0);CSN = 1;return(reg_val);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + +

13、 + + + + + + + + + + + + + + + + + & /*函數(shù):SPI_Read_Buf() 描述:從reg寄存器讀出bytes個字節(jié),通常用來讀取接收通道 數(shù)據(jù)或接收/發(fā)送地址2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/uchar SPI_Read_Buf(uchar reg, uchar * pBuf, uchar bytes)/ CSN置低,開始傳輸數(shù)據(jù)/選擇寄存器,同時返回狀態(tài)字uchar status

14、, i;CSN = 0;status = SPI_RW(reg);/逐個字節(jié)從nRF24L01讀出/ CSN拉高,結(jié)束數(shù)據(jù)傳輸/ 返回狀態(tài)寄存器for(i=0; ibytes; i+)pBufi = SPI_RW(0);CSN = 1;return(status);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL.

15、e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & e 力 /*函數(shù):SPI_Write_Buf() 描述:把pBuf緩存中的數(shù)據(jù)寫入到nRF24L01,通常用來寫入發(fā) 射通道數(shù)據(jù)或接收/發(fā)送地址2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/uchar SPI_Write_Buf(uchar reg, uchar * pBuf, uchar bytes)ucha

16、r status, i;/ CSN置低,開始傳輸數(shù)據(jù)/選擇寄存器,同時返回狀態(tài)字CSN = 0;status = SPI_RW(reg);/逐個字節(jié)寫入nRF24L01/ CSN拉高,結(jié)束數(shù)據(jù)傳輸/ 返回狀態(tài)寄存器for(i=0; ibytes; i+)SPI_RW(pBufi);CSN = 1;return(status);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. k

17、L. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & e 力 /*函數(shù):RX_Mode() 描述:這個函數(shù)設(shè)置nRF24L01為接收模式,等待接收發(fā)送設(shè)備的數(shù)據(jù)包2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/void RX_Mode(void)/ CRC使能,16位CRC校驗,CE = 0;SPI_RW

18、_Reg(WRITE_REG + CONFIG 0 x0f);/拉高CE啟動接收設(shè)備上電,接收模式CE = 1;inerDelay_us(130);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

19、 & e 力 /*函數(shù):TX_Mode() 描述:這個函數(shù)設(shè)置nRF24L01為發(fā)送模式,(CE= 1持續(xù)至少10us),130us后啟動發(fā)射,數(shù)據(jù)發(fā)送結(jié)束后,發(fā)送模塊自動轉(zhuǎn)入接收 模式等待應(yīng)答信號。2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /*/ void TX_Mode(uchar * BUF)CE = 0;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /

20、寫 入發(fā)送地址SPI_Write_Buf(WR_TX_PLOAD, BUF, TX_PLOAD_WIDTH);/ 寫數(shù)據(jù)包到TX FIFOCE = 1;inerDelay_us(10);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + +

21、+ + + + + + + + + + & e 力 /*函數(shù):Check_ACK() 描述:檢查接收設(shè)備有無接收到數(shù)據(jù)包,設(shè)定沒有收到應(yīng)答信號是否重發(fā) 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/ uchar Check_ACK(bit clear)while(IRQ);sta = SPI_RW(NOP);/返回狀態(tài)寄存器if(MAX_RT)if(clear)/是否清除TX FIFO,沒有清除在復(fù)位MAX_RT中斷標(biāo)志后重發(fā)SPI

22、_RW(FLUSH_TX);SPI_RW_Reg(WRITE_REG + STATUS, sta); / 清除 TX_DS 或 MAX_RT 中斷標(biāo)志IRQ = 1;if(TX_DS)return(0 x00);elsereturn(0 xff);2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / /*/3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + +

23、 + + + + + + + + + + + + + + + + + + + + + + + + + & e 力 /*函數(shù):CheckButtons() 描述:檢查按鍵是否按下,按下則發(fā)送一字節(jié)數(shù)據(jù)void CheckButtons()uchar i=0;if(flag)/接受完成flag = 0;/清標(biāo)志R_S_Byte(N);R_S_Byte(status);for(i=0;i=1;SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); / 從 RX FIFO 讀出 數(shù)據(jù)flag = 1;SPI_RW_Reg(WRITE_REG + STATU

24、S, sta); / 清除 RX_DS 中斷標(biāo)志3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + & e 力 i/*/ / nRF24L01 初始化3 kL. kL. kL. kL. kL. kL. kL. kL. kL. kL. e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

25、 + + + + + + + + & e 力 i/*/ void Init_24L01()CE=0;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);/ 寫接收通道0的接收地址,與發(fā)送地址相同SPI_Write_Buf(WRITE_REG + RX_ADDR_P1, RX_ADDRESS1, TX_ADR_WIDTH); / 寫接收通道1的接收地址SPI_Write_Buf(WRITE_REG + RX_ADDR_P2, RX_ADDRESS2, 1);/寫接收通道 2 的接收地 址SPI_Write_Buf(WRI

26、TE_REG + RX_ADDR_P3, RX_ADDRESS3, 1);/寫接收通道 3 的接收地 址SPI_Write_Buf(WRITE_REG + RX_ADDR_P4, RX_ADDRESS4, 1);/寫接收通道 4 的接收地 址SPI_Write_Buf(WRITE_REG + RX_ADDR_P5, RX_ADDRESS5, 1);/寫接收通道 5 的接收地 址SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); / 接收通道 0 選擇和發(fā)送通道相同有效數(shù)據(jù)寬度,32字節(jié)長度SPI_RW_Reg(WRITE_REG + RX_PW_

27、P1, TX_PLOAD_WIDTH);/32 字節(jié)長度SPI_RW_Reg(WRITE_REG + RX_PW_P2, TX_PLOAD_WIDTH);/32 字節(jié)長度SPI_RW_Reg(WRITE_REG + RX_PW_P3, TX_PLOAD_WIDTH);/32 字節(jié)長度SPI_RW_Reg(WRITE_REG + RX_PW_P4, TX_PLOAD_WIDTH);/3 2 字節(jié)長度SPI_RW_Reg(WRITE_REG + RX_PW_P5, TX_PLOAD_WIDTH);/32 字節(jié)長度SPI_RW_Reg(WRITE_REG + EN_AA, 0 x3f);/使能所有接

28、收通道自動應(yīng)答SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0 x3f); / 使能所有接收通道SPI_RW_Reg(WRITE_REG + RF_CH, 40);/ 選擇射頻通道 0 x40SPI_RW_Reg(WRITE_REG + RF_SETUP, 0 x07);/ 數(shù)據(jù)傳輸率 1Mbps,發(fā)射功率0dBm,低噪聲放大器增益SPI_RW_Reg(WRITE_REG + CONFIG 0 x0e);/ CRC 使能,16 位 CRC 校驗,上電SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0 x0a); / 自動重發(fā)延時等待 250us+86

29、us,自動重發(fā)10次CE=1;nRF24L01.h 文件 #ifndef _API_DEF_ #define _API_DEF #include #include #define uchar unsigned char2 “ “e “ $ $ $ $ $ $ $ $ $ 力、mi,& “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ “ , /*/#define TX_ADR_WIDTH 5 / 5字節(jié)寬度的發(fā)送/接收地址#define TX_PLOAD_WIDTH 32 /數(shù)據(jù)通道有效數(shù)據(jù)寬度#define LED P1/ Chip Enable pin signal (o

30、utput)/ Slave Select pin, (output to CSN, nRF24L01)/ Interrupt signal, from nRF24L01 (input)/ Master In, Slave Out pin (input)/ Serial Clock pin, (output)/ Master Out, Slave In pin (output)extern uchar RX_BUFTX_PLOAD_WIDTH; extern uchar TX_BUFTX_PLOAD_WIDTH; /*/ / Define SPI pins sbit CE= P2A0;sbit

31、CSN = P2A1; sbit IRQ = P3A2; sbit MISO = P2A4; sbit MOSI = P2A5;sbit SCK = P2A7;/ SPI(nRF24L01) commands#define READ_REG 0 x00 / Define read command to register#define WRITE_REG 0 x20 / Define write command to register#define RD_RX_PLOAD 0 x61 / Define RX payload register address#define WR_TX_PLOAD

32、0 xA0 / Define TX payload register address#define FLUSH_TX0 xE1 / Define flush TX register command#define FLUSH_RX0 xE2 / Define flush RX register command#define REUSE_TX_PL 0 xE3 / Define reuse TX payload register command/ SPI(nRF24L01) registers(addresses)#define CONFIG#define EN_AA#define EN_RXAD

33、DR#define SETUP_AW#define SETUP_RETR#define RF_CH#define RF_SETUP#define NOP0 xFF / Define No Operation, might be used to read status register0 x00 / Config register address0 x01 / Enable Auto Acknowledgment register address/ Enabled RX addresses register address/ Setup address width register addres

34、s/ Setup Auto. Retrans register address/ RF channel register address/ RF setup register address0 x020 x030 x040 x050 x06#define STATUS 0 x07 / Status register address#define OBSERVE_TX 0 x08 / Observe TX register address#define CD#define RX_ADDR_P0#define RX_ADDR_P1#define RX_ADDR_P2#define RX_ADDR_P3#define RX_ADDR_P4#define RX_ADDR_P5#define TX_ADDR#define RX_PW_P0#define RX_PW_P1#define RX_PW_P2#define RX_PW_P3#define RX_PW_P40 x09 / Carrier Detect registe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論