NRF24L01無線模塊C語言程序_第1頁
NRF24L01無線模塊C語言程序_第2頁
NRF24L01無線模塊C語言程序_第3頁
NRF24L01無線模塊C語言程序_第4頁
NRF24L01無線模塊C語言程序_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、NRF24L01無線模塊C語言程序 24MHz晶振 #include include include #include ttinclude #include #define U8unsigned char #define U16 unsigned int ttdefine TX_ADDRJVITDH 5 /發(fā)送地址寬度設(shè)置為5個字節(jié) ttdefine RX_ADDRJVITDH 5 /接收地址寬度設(shè)置為5個字節(jié) ttdefine TX_DATA_WITDH 1發(fā)送數(shù)據(jù)寬度1個字節(jié) ttdefine RX_DATAITDH 1/接收數(shù)據(jù)寬度1個字節(jié) #define #define #define

2、 #define #define #define #define #define REREGISTER W_REGISTER R_RX_PAYLOAD W_TX_PAYLOAD FLUSH.TX FLUSH.RX REUSE_TX_PL NOP 0 x00/讀取配置寄存器 0 x20寫配置寄存器 0 x61/讀取RX有效數(shù)據(jù) OxaO/寫TX有效數(shù)據(jù) Oxel/清除TXFIFO寄存器 0 xe2/清除RXFIFO寄存器 0 xe3/重新使用上一包有效數(shù)據(jù) Oxff/空操作 #define #define #define #define #define #define #define #defi

3、ne #define #define #define #define #define #define #define #define CONFIG EN_AA EN.RXADDR SETUP_AW SETUP_RETR RF_CH RF.SETUP STATUS OBSERVE.TX CD RX_ADDR_PO RX_ADDR_P1 RX_ADDR_P2 RX_ADDR_P3 RX_ADDR_P4 RX_.ADDR.P5 0 x00/配置寄存器 0 x01/使能自動應(yīng)答 0 x02接收通道使能0-5個通道 0 x03設(shè)置數(shù)據(jù)通道地址寬度3-5 0 x04/建立自動重發(fā) 0 x05/射頻通道設(shè)置

4、 0 x06射頻寄存器 0 x07狀態(tài)寄存器 0 x08發(fā)送檢測寄存器 0 x09載波 0 x0a/數(shù)據(jù)通道0接收地址 OxOb/數(shù)據(jù)通道1接收地址 0 x0c/數(shù)據(jù)通道2接收地址 OxOd/數(shù)據(jù)通道3接收地址 OxOe/數(shù)據(jù)通道4接收地址 OxOf/數(shù)據(jù)通道5接收地址 #define #define #define #define #define #define #define #define TX_ADDR RX_PW_PO RX_PW_P1 RX_PW_P2 RX_PW_P3 RX_PW_P4 RX_PW_P5 FIFO_STATUS 0 x10/7發(fā)送地址 0X11/P0通道數(shù)據(jù)寬度設(shè)

5、置 0X12/P1通道數(shù)據(jù)寬度設(shè)置 0X13/P2通道數(shù)據(jù)寬度設(shè)置 0X14/P3通道數(shù)據(jù)寬度設(shè)置 0X15/P4通道數(shù)據(jù)寬度設(shè)置 0X16/P5通道數(shù)據(jù)寬度設(shè)置 0X17/FIF0狀態(tài)寄存器 /NRF24L01 U8 NRFACK (); U8 NRFSPI(U8 date); U8 NRFReadReg(U8 RegAddr); U8 NRFWriteReg(U8 RegAddr, U8 date); U8 NRFReadRxDate(U8 RegAddr, U8 *RxDate, U8 DateLen); U8 NRFWriteTxDate(U8 RegAddr, U8 *TxDate,

6、 U8 DateLen); U8 NRFRevDate(U8 *RevDate); void NRFSetTxMode(U8 *TxDate); void NRF24L01Int(); void NRFSetRXMode(); U8 CheckACK (); void Delay(U16 t); U8 bdata sta; /main void Delay_10ms(U16 del): bitCE二P4;/RX/TX 模式選擇端 sbit IRQ二Pll; /可屏蔽中斷端 sbit CSN二P6; /SPI 片選端就是 SS sbit Mosi=pro; /SPI主機(jī)輸出從機(jī)輸入端1 sbit

7、 MISO二P2; /SPI主機(jī)輸入從機(jī)輸出端 sbit SCLK二P3; /SPI 時鐘端 U8 code TxAddr = 0 x34, 0 x43, 0 x10, 0 x10, 0 x01 ;/發(fā)送地址 U8 bdata sta;/狀態(tài)標(biāo)志 sbit RX_DR二sta6; sbit TX_DS=stao; sbit MAX_RT二st4; void Delay(U16 t) U16 x, y; for(x二t;x0;x-) for (y=110;y0;y); U8 NRFSPI(U8 date) U8 i; for(i=0;i8;i+) if (date date=l; / byte最

8、高位輸出到MOS I /低一位移位到最高位 MOSE; 辻(MISO) / 拉高 SCK, nRF24L01 從 MOSI 讀入 1位數(shù)據(jù), 同時從MISO輸出1位數(shù)據(jù) SCLK二1; date 1=0 x01; /讀MISO到byte最低位 / SCK置低 SCLK二0; return(date); /返回讀出的一字節(jié) void NRF24L01Int() Delay (2);/讓系統(tǒng)什么都不干 CE二0; 待機(jī)模式1 CSN二1; SCLK=O; IRQ二1; U8 NRFReadReg(U8 RegAddr) U8 BackDate; CSN二0;/啟動時序 NRFSPI (RegAdd

9、r);/寫寄存器地址 BackDate二NRFSPI (0 x00); 寫入讀寄存器指令 CSN二1; return (BackDate) ; /返回狀態(tài) U8 NRFWriteReg(U8 RegAddr, U8 date) U8 BackDate; CSN二0;/啟動時序 BackDate=NRFSPI (RegAddr); 寫入地址 NRFSPI (date) ;/寫入值 CSN二1; return(BackDate); U8 NRFReadRxDate(U8 RegAddr, U8 *RxDate, U8 DateLen) 寄存器地址讀取數(shù)據(jù)存放變量/讀取數(shù)據(jù)長度用于接收 U8 Bac

10、kDate, i; CSN二0;/啟動時序 BackDate二NRFSPI (RegAddr) ;/寫入要讀取的寄存器地址 for(i=0;i RxDatei=NRFSPI(O); CSN二1; return(BackDate); U8 NRFWriteTxDate(U8 RegAddr, U8 *TxDate, U8 DateLen) 寄存器地址寫入數(shù)據(jù)存放變量/讀取數(shù)據(jù)長度用于發(fā)送 U8 BackDate, i; CSN二0; BackDate二NRFSPI (RegAddr); 寫入要寫入寄存器的地址 for(i=0;i NRFSPI(*TxDate+); CSN二1; return(B

11、ackDate); void NRFSetTxMode(U8 *TxDate) 發(fā)送模式 CE二 0; NRFWriteTxDate (W_REGISTER+TX_ADDR, TxAddr, TX_ADDR_WITDH);/寫寄 存器指令+接收地址使能指令+接收地址+地址寬度 NRFWriteTxDate (W_REGISTER+RX_ADDR_PO, TxAddr, TX_ADDR_WITDH) ; /為了應(yīng) 答接收設(shè)備,接收通道0地址和發(fā)送地任相同 NRFWriteTxDate (W_TX_PAYLOAD, TxDate, TX_DATA_WITDH) ;/寫入數(shù)據(jù) NRFWriteReg

12、(W_REGISTER+EN_AA, 0 x01) :/ 使能接收通道 0自動應(yīng)答 NRFWriteReg (W_REGISTER+EN_RXADDR, 0 x01) ;/ 使能接收通道 0 NRFWriteReg (W_REGISTER+SETUP_RETR, 0 x0a) ;/ 自動重發(fā)延時等待 250us+86us,自動重發(fā)10次 NRFWriteReg (W_REGISTER+RF_CH, 0 x40);選擇射頻 通道0 x40 NRFWriteReg(W_REGISTER+RF_SETUP, 0 x07):/ 數(shù)據(jù)傳輸率 1Mbps,發(fā)射功率OdBm,低噪聲放大器增益 NRFWrit

13、eReg (W_REGISTER+CONFIG, OxOe) ;/ CRC 使能,16 位 CRC 校驗,上電 CE二 1; Delay (5) ;/保持10us秒以上 /主要接收模式 void NRFSetRXMode() CE=O; NRFWriteTxDate(W_REGISTER+RX_ADDR_PO, TxAddr, TX_ADDR_WITDH);/ 接收設(shè)備接收通道0使用和發(fā)送設(shè)備袖同的反送地址 NRFWr辻eReg(W_REGISTER+EN_AA, 0 x01); /使能接收通道0自務(wù)應(yīng)答 NRFWriteReg(W_REGISTER+EN_RXADDR, 0 x01);/ 使

14、能接收通道0 NRFWriteReg(W_REGISTER+RF_CH, 0 x40); /選擇射頻通道0 x40 NRFWriteReg(W_REGISTER+RX_PW_PO, TX_DATA_WITDH) ;/ 接收通道 0 選擇和發(fā)送通道相同看效數(shù)據(jù)寬度 NRFWriteReg(W_REGISTER+RF_SETUP, 0 x07);/ 數(shù)據(jù)傳輸率1Mbps,疵射功率OdBm,低噪聲放大器增益*/ NRFWriteReg(W_REGISTER+CONFIG, OxOf);/ / CRC使能,16位CRC校驗,上電,接收模式 CE = 1; Delay (5) ;/保持10us秒以上 U

15、8 CheckACK () 用于發(fā)射 sta=NRFReadReg(R_REGISTER+STATUS); /返回狀態(tài)奮存器 if (TX_DS! ;MAX_RT) /發(fā)送完畢中斷 NRFWriteReg(W_REGISTER+STATUS, Oxff) :/ 清除 TX_DS 或 MAX_RT 中斷標(biāo)志 CSN二0; NRFSPI(FLUSH_TX);用于清空FIFO ! !關(guān)鍵! !不然會出現(xiàn)意想不到 的后果! ! !大家記??! CSN二1; return(0); else return (1); /用于接收模式 U8 NRFRevDate(U8 *RevDate) U8 RevFlags

16、=0; sta=NRFReadReg (R_REGISTER+STATUS) ; /發(fā)送數(shù)據(jù)后讀取狀態(tài)寄存器 if(RX_DR)/判斷是否接收到數(shù)據(jù) CE二0;/SPI 使能 NRFReadRxDate (R_RX_PAYLOAD, RevDate, RX_DATAITDH) ;/ 從 RXFIFO 讀 取數(shù)據(jù) RevFlags=l;/讀取數(shù)據(jù)完成標(biāo)志 NRFWriteReg(W_REGISTER+STATUS, Oxff);/ 接 收 到 數(shù)據(jù)后 RX_DR, TX_DS, MAX_PT都置高為1,通過寫1來清楚中斷標(biāo) return(RevFlags); void Delay_10ms(U16 del) U16 i, j; for (iO; idel; i+) for(j=0; j1827; j+)這個是通過軟件仿真得出的數(shù) /做發(fā)射 main() U8 TxDatel=0; NRF24L01Int(); Delay(6000); while (1) if(KEY=O) if(KEY=O) Delay_10ms(2); TxDate 0 =0 x08; 發(fā)射按鍵標(biāo)識值 NRFSetTxMode(TxDate); while

溫馨提示

  • 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

提交評論