nrf24l01無線模塊NRF24L01模塊收發(fā)c程序_第1頁
nrf24l01無線模塊NRF24L01模塊收發(fā)c程序_第2頁
nrf24l01無線模塊NRF24L01模塊收發(fā)c程序_第3頁
nrf24l01無線模塊NRF24L01模塊收發(fā)c程序_第4頁
nrf24l01無線模塊NRF24L01模塊收發(fā)c程序_第5頁
已閱讀5頁,還剩12頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、許多人都在找nrf24101無線模塊的c程序;我以前剛接觸無線 時用的就是mf24101模塊;搜索了許多程序有很多都沒法直接 用;甚至還懷疑模塊是不是被我搞壞了;拿去讓別人檢測模塊又 是好的;為避免大家走彎路;我將我的程序發(fā)出來供大家參考;這是mf24101無線模塊pcb圖;下面有Nrf24101無線模塊的收發(fā)c程序;以下程序經(jīng)本人親自測試; 絕對能用! !請注意以下幾點:1、24L01模塊的電源電壓是否為3V-3. 6V之間;2、如果您用的單片機是5V的話,請在10 口與模塊接口之間串一個1K電阻;3、檢查模塊的GND是否與單片機的GND相連接4、先用程序進行調(diào)試,如果10 口不同,請更改1

2、0 口或相關(guān)時序;5、如果是51系列單片機,晶振請選用11.0592M Hz;模塊供電最好用asmlll75v轉(zhuǎn)3.3v 穩(wěn)壓測試單片機是stc89c52 ; at89c52通用;收發(fā)一體;29.01056 (mm)3DC nkssoq NCESCOIR 6 UCCSMMMI 12345678一大截不廢話了;上程序;此程序是按鍵控制led;當按下s的 時候?qū)?yīng)接受的led會閃閃發(fā)光;很簡單的如果要實現(xiàn)其他更 先進的功能;自己發(fā)掘吧務(wù)必將硬件連接正確;否則;它不會工作的當然做什么都要嚴 謹錯一點就差大了收發(fā)一體程序#include <ieg52.h>tvpedef unsigned

3、chai uchar; tvpedef unsigned chai uint;*1F24J 01#include <intrms.h>口*sbitMISO=P1A3;sbitMOSI=P1A4;sbitSCK=P1A2;sbitCE=P1A1;sbitCSN=P3 八 2;sbitIRQ=P3 八3;*sbit KEY=P2A0;*sbit led=P2z 1;*jP24L0*/ 5 uiiits TX address width/ 5 umts RX address width/ 20 umts TX payload/ 20 umts TX payload#define TX_A

4、DR_WIDTH5#define RX_ADR_WIDTH5 #define TX_PLOAD_WIDTH 20 #define RX_PLOAD_WIDTH 20本地地址接收地址umt const TX.ADDRESSTX_ADR_WIDTH= 0x34,0x43,Ox 10,0x 10,0x01; umt const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,Ox 10,Ox 10.0x01; *pj«24L01 寄 *define READ_REG0x00/讀寄存器指令define WRITE_REG0x20/寫寄存器指令define RD_RX_PL

5、OAD0x61/讀取接收數(shù)據(jù)指令#define WR_TX_PLOADOxAO/寫待發(fā)數(shù)據(jù)指令#define FLUSH_TXOxEl/沖洗發(fā)送FIFO指令define FLUSH_RX0xE2/沖洗接收FIFO指令#define REUSE_TX_PL0xE3/定義重復(fù)裝載數(shù)據(jù)指令#define NOPOxFF/保留*Sp(nRF24L01) 寄*define CONFIGdefine EN_AAdefine EN_RXADDR#define SETUP_AWdefine SETUP_RETRdefine RF_CHdefine RF_SETUPdefine STATUSdefine OBS

6、ERVE.TXdefine CDdefine RX_ADDR_P0define RX_ADDR_P10x00 配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式0x01 /自動應(yīng)答功能設(shè)置0x02 /可用信道設(shè)置0x03 /收發(fā)地址寬度設(shè)置0x04 /自動重發(fā)功能設(shè)置0x05 /工作頻率設(shè)置0x06 /發(fā)射速率、功耗功能設(shè)置0x07 /狀態(tài)寄存器0x08 /發(fā)送監(jiān)測功能0x09 /地址檢測0x0A /頻道0接收數(shù)據(jù)地址0x0B /頻道1接收數(shù)據(jù)地址#define RX_ADDR_P2 #define RX_ADDR_P3 #define RX_ADDR_P4 #define RX_ADDR_P5

7、 #define TX_ADDR #define RX_PW_P0 #define RX_PW.P1 #define RX_PW_P2 #define RX_PW_P3 #define RX_PW_P4 #define RX_PW_P5 define FIFO.STATUSOxOC /頻道2接收數(shù)據(jù)地址OxOD /頻道3接收數(shù)據(jù)地址OxOE /頻道4接收數(shù)據(jù)地址OxOF /頻道5接收數(shù)據(jù)地址0x10 /發(fā)送地址寄存器0x11 接收頻道0接收數(shù)據(jù)長度0x12 接收頻道0接收數(shù)據(jù)長度0x13 接收頻道0接收數(shù)據(jù)長度0x14 接收頻道0接收數(shù)據(jù)長度0x15 接收頻道0接收數(shù)據(jù)長度0x16 接收頻道0

8、接收數(shù)據(jù)長度0x17 /FIFO棧入棧岀狀態(tài)寄存器設(shè)置*void Delay(unsigned mt s);void inerDelay_us(unsigned chai n);void init_NRF24L01 (void);umt SPI_RW(umt uchai);uchai SPI_Read(uchar reg);void SetRX_Mode(void);umt SPI_RW_Reg(uchaT eg、uchai value);umt SPI_Read_Buf(uchar reg, uchar *pBuf. uchai uchars); umt SPI_Wiite_Buf(ucha

9、r reg, uchar *pBuf, ucliai uchai s); unsigned char nRF24L01_RxPacket(unsigned char* rx_buf);void 11RF24L0 l_TxPacket(unsigned char * tx_buf);*void Delay(unsigned mt s) unsigned int i; for(i=0; i<s; i+); for(i=0; i<s; i+);*umt bdata sta; 狀態(tài)標志 sbit RX_DR =staA6;sbit TX_DS =staA5;sbit MAX_RT =sta

10、A4;嚴*嚴延時函數(shù)嚴 *:*/void inerDelay_us(unsigned chai n) fbr(;n>0;n)_nop_();*嚴NRF24L01初始化*/void init_NRF24L01 (void)merDelay_us( 100);CE=0;/ cliip enableCSN=1; / Spi disableSCK=0; /SPI_Wnte_Ei】f(WRITE_REG + TX_ADDR, TX_ADDRESS,TX_ADR_WIDTH); / 寫本地地址SPI_Wnte_Ei】f(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_A

11、DR_WIDTH); 寫接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);/ 頻道 0 自動 ACK 應(yīng) 答允許SPI_RW_Reg(WRITE_REG + EN.RXADDR. 0x01); / 允許接收地址只有頻道 0,如 果需要多頻道可以參考Page21SPI_RW_Reg(WRITE_REG + RF_CH, 0);/ 設(shè)置信道工作為 2.4GHZ, i|攵發(fā)必須一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); 設(shè)置接收數(shù)據(jù)長度, 本次設(shè)置為32字節(jié)SPI_RW_Reg(WRITE_REG + RF_

12、SETUR 0x07);設(shè)置發(fā)射速率為 1MH乙 發(fā)射功率為最大值OdB嚴*/* 函數(shù):umt SPI_RW(umt uchar) 嚴功能:NRF24L01的SPI寫時序嚴*/umt SPI_RW(umt uchai)uiiit bit_ctr;fbr(bit_ctr=0;bit_ctr<8;bit_cti+) / output 8-bitMOSI = (uchar & 0x80); uchar = (uchai« 1);/ output chaf, MSB to MOSI/ shift next bit into MSB.SCK= 1; uchar |= MISO;S

13、CK = 0;retuin(uchar);/Set SCKlugh./ capture current MISO bit/ .tlien set SCK low again/ leturn read uchar嚴*/* 函數(shù):uchai SPI_Read(uchai reg) 嚴功能:NRF24L01的SPI時序嚴*/uchar SPI_R亡ad(uchar reg) uchar reg_val;CSN = 0; SPI_RW(reg);H CSN low, iiutialize SPI communication Select register to read from.ieg_val =

14、SPI_RW(0);CSN= 1;/ .then read registenTalue CSN high, terminate SPI communication/ leturn register valueietuin(ieg_val);嚴*/*功能:NRF24L01讀寫寄存器函數(shù)嚴*/umt SPI_RW_Reg(uchai uchai value) uiiit status;CSN = 0;status = SPI.RW(reg); SPI_RW(value);CSN= 1;/ CSN low, uiit SPI transaction / select register/ .and w

15、rite value to it./ CSN high againretum(status);/ return 11RF24L01 status uchar嚴*/* 函數(shù):umt SPI_Read_Buf(uchar reg, uchar *pBuf. uchai uchais)/*功能:用于讀數(shù)據(jù),reg:為寄存器地址,pBuf:為待讀出數(shù)據(jù)地址,uchais:讀出數(shù)據(jù)的 個數(shù)嚴*/umt SPI_Read_Buf(uchar reg, uchar *pBuf uchai uchars) umt status,uchar_ctr;CSN = 0; status = SPI_RW(reg);/

16、 Set CSN low, init SPI trailaction/ Select register to write to and read status uchaifbr(uchai_cti-O;uchai_cti<uchais;uchai_cti+)pBuflucliai.ctr = SPI_RW(0); /CSN= 1;return(status);/ retuni 11RF24L01 status uchar嚴*/* 函數(shù):umt SPI_Write_Buf(uchar reg, uchar *pBuf. uchar uchars)嚴功能:用于寫數(shù)據(jù):為寄存器地址,pBuf:

17、為待寫入數(shù)據(jù)地址,uchais:寫入數(shù)據(jù)的個數(shù)嚴*/umt SPI_Wiite_Buf(uchar reg, uchar *pEuf, ucliar uchais) umt status,uchar_ctr;CSN = 0;/SPI 使能status = SPI_RW(ieg);fbr(uchai_cti-O; uchai_cti<uchars; uchar_ctr+) / SPI_RW(*pBufW);CSN= 1;關(guān)閉 SPIretuin(status); /嚴*/* 函數(shù):void SetRX_Mode(void) 嚴功能:數(shù)據(jù)接收配置嚴*/void SetRX_Mode(void

18、)CE=0;SPI_RW_Reg(WRITE_REG + CONFIG. OxOf); 位CRC ,主接收/ IRQ收發(fā)完成中斷響應(yīng),16CE= 1; inerDelay_us(l 30);嚴* *,/* 函數(shù):unsigMd char 11RF24L0l_RxPacket(unsigned char* rx_buf) 嚴功能:數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中嚴* *,unsigned char 11RF24L0l_RxPacket(unsigned char* rx_buf)unsigned char revale=0;sta=SPI_Read(STATUS); /讀取狀態(tài)寄存其來判斷

19、數(shù)據(jù)接收狀況 if(RX_DR)/判斷是否接收到數(shù)據(jù)CE = 0;SPI 使能SPI_Read_Euf(RD_RX_PLOADjx_biifTX_PLOAD_WIDTH);/ read receive payload from RX_FIFO bufferrevale =1;讀取數(shù)據(jù)完成標志SPI_RW_Reg(WRITE_REG+STArUS、sta);/接收到數(shù)據(jù)后 RX_DR、TX_DS.MAX_PT都置高為1,通過寫1來清楚中斷標志retuin revale;嚴*/* 函數(shù):void 11RF24L0 l_TxPacket(unsigned char * tx_buf) 嚴功能:發(fā)送tx_buf中數(shù)據(jù)嚴*/void 11RF24L0 l_TxPacket(unsigned char * tx_buf)CE=0;/StandBy I 模式SPI_Wnte_Euf(WRITE_

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論