




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、/NRF24L01調(diào)試程序,全雙工雙向通信,即兩個模塊兼具收發(fā)功能,自動高速切換收發(fā)模式。/使用本程序的前提條件是:硬件沒問題。如果能正確運行本程序,也能說明你的硬件電路沒問題。/大家根據(jù)實際情況,更改 NRF24L01 各引腳、LED 和 KEY 的宏定義。/LED燈的狀態(tài)由RxBuf0來決定,RxBuf0 = 0,LED輸出0;RxBuf0 = 1,LED輸出1;你也可以自行更改規(guī)則。/KEY可以改變TxBuf0的值,從而改變另一起模塊RxBuf0的值,進而改變LED的狀態(tài)。/此程序未用到外部中斷,即不響應(yīng)IRQ 因此IRQ引腳可以接任意I/O口,不必接到外部中斷引腳,不過建議接到外部中斷
2、引腳。/若注釋部分為亂碼:設(shè)置keil:Edit>Configuration>Editor>Encoding 選擇chinese2312。/以下程序經(jīng)過多次復(fù)制,粘貼到keil,沒有錯誤,如出現(xiàn)錯誤,請下載文檔后再復(fù)制。/粘貼到word后排布可能會變得不整齊,請自行排布。#include<reg52.h>#include<intrins.h>#define uchar unsigned char #define uint unsigned intsbit P00 = P00;sbit P01 = P01;sbit P02 = P02;sbit P03
3、= P03;sbit P04 = P04;sbit P05 = P05;sbit P06 = P06;sbit P07 = P07;sbit P10 = P10;sbit P11 = P11;sbit P12 = P12;sbit P13 = P13;sbit P14 = P14;sbit P15 = P15;sbit P16 = P16;sbit P17 = P17;sbit P20 = P20;sbit P21 = P21;sbit P22 = P22;sbit P23 = P23;sbit P24 = P24;sbit P25 = P25;sbit P26 = P26;sbit P27
4、= P27;sbit P30 = P30;sbit P31 = P31;sbit P32 = P32;sbit P33 = P33;sbit P34 = P34;sbit P35 = P35;sbit P36 = P36;sbit P37 = P37;#define LEDP36#define KEY P20/*延時函數(shù)*/void delayus(uint us)for(;us >0;us-)_nop_();/*void delayms(uint ms)/延時?個 ms uchar a,b,c;while(ms-) for(c=1;c>0;c-) for(b=142;b>0
5、;b-) for(a=2;a>0;a-);*/*NRF24L01 IO端口定義*/#define CE P10#define SCK P11#defineMISO P12#define CSN P16#define MOSI P17#define IRQ P32/*NRF24L01的接收和發(fā)送地址*/#define TX_ADR_WIDTH 5 / 5個字節(jié)的TX地址長度#define RX_ADR_WIDTH 5 / 5個字節(jié)的RX地址長度#define TX_PLOAD_WIDTH 16 / ?個字節(jié)的TX數(shù)據(jù)長度#define RX_PLOAD_WIDTH 16 / ?個字節(jié)的RX
6、數(shù)據(jù)長度uchar const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01;/本地地址uchar const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01;/接收地址/*NRF24L01寄存器指令*/#define READ_REG 0x00 / 讀寄存器#define WRITE_REG 0x20 / 寫寄存器#define RD_RX_PLOAD 0x61 / 讀取接收數(shù)據(jù)#define WR_TX_PLOAD 0xA0 / 寫待發(fā)數(shù)據(jù)#define FLUSH_TX 0xE1 / 沖
7、洗發(fā)送 FIFO#define FLUSH_RX 0xE2 / 沖洗接收 FIFO#define REUSE_TX_PL 0xE3 / 定義重復(fù)裝載數(shù)據(jù)#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址*/#define CONFIG 0x00 / 配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#define EN_AA 0x01 / 自動應(yīng)答功能設(shè)置#define EN_RXADDR 0x02 / 可用信道設(shè)置#define SETUP_AW 0x03 / 收發(fā)地址寬度設(shè)置#define SETUP_RETR 0x04 / 自動重發(fā)功能設(shè)置#define R
8、F_CH 0x05 / 工作頻率設(shè)置#define RF_SETUP 0x06 / 發(fā)射速率、功耗功能設(shè)置#define STATUS 0x07 / 狀態(tài)寄存器#define OBSERVE_TX 0x08 / 發(fā)送監(jiān)測功能#define CD 0x09 / 地址檢測 #define RX_ADDR_P0 0x0A / 頻道0接收數(shù)據(jù)地址#define RX_ADDR_P1 0x0B / 頻道1接收數(shù)據(jù)地址#define RX_ADDR_P2 0x0C / 頻道2接收數(shù)據(jù)地址#define RX_ADDR_P3 0x0D / 頻道3接收數(shù)據(jù)地址#define RX_ADDR_P4 0x0E /
9、 頻道4接收數(shù)據(jù)地址#define RX_ADDR_P5 0x0F / 頻道5接收數(shù)據(jù)地址#define TX_ADDR 0x10 / 發(fā)送地址寄存器#define RX_PW_P0 0x11 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P1 0x12 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P2 0x13 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P3 0x14 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P4 0x15 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P5 0x16 / 接收頻道0接收數(shù)據(jù)長度#define FIFO_ST
10、ATUS 0x17 / FIFO棧入棧出狀態(tài)寄存器設(shè)置void init_NRF24L01();uchar SPI_RW(uchar num);uchar SPI_Read(uchar reg);void SetRX_Mode();void SetTx_Mode();uchar SPI_RW_Reg(uchar reg, uchar value);uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars);uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars);void nRF24
11、L01_RxPacket(uchar *rx_buf);void nRF24L01_TxPacket(uchar *tx_buf);/*狀態(tài)標志*/uchar bdata sta;sbitRX_DR=sta6;sbitTX_DS=sta5;sbitMAX_RT=sta4; /*NRF24L01初始化*/void init_NRF24L01() delayus(100); CE=0; / 片選使能 CSN=1; / SPI使能 SCK=0; / SPI時鐘拉低SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /寫本地地址S
12、PI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); /寫接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); /通道0自動應(yīng)答 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); /允許接收地址頻道0 SPI_RW_Reg(WRITE_REG + RF_CH, 0x32); /設(shè)置信道工作頻率,收發(fā)必須一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度SPI_RW_Reg(WRITE_RE
13、G + RF_SETUP, 0x0f); /設(shè)置發(fā)射速率為2MHZ,發(fā)射功率為最大值0dBSPI_RW_Reg(WRITE_REG + CONFIG, 0x7c); /IRQ引腳不顯示中斷 掉電模式 116CRC校驗/*/*函數(shù):uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI寫時序/*/uchar SPI_RW(uchar num)uchar bit_ctr; for(bit_ctr=0;bit_ctr<8;bit_ctr+) / output 8-bit MOSI = (num & 0x80); / output 'uchar'
14、, MSB to MOSInum = (num << 1); / shift next bit into MSB.SCK = 1; / Set SCK high.num |= MISO; / capture current MISO bitSCK = 0; / .then set SCK low again return(num); / return read uchar/*函數(shù):uchar SPI_Read(uchar reg)功能:NRF24L01的SPI時序*/uchar SPI_Read(uchar reg)uchar reg_val;CSN = 0; / CSN low,
15、 initialize SPI communication.SPI_RW(reg); / Select register to read from.reg_val = SPI_RW(0); / .then read registervalueCSN = 1; / CSN high, terminate SPI communicationreturn(reg_val); / return register value/*/*功能:NRF24L01讀寫寄存器函數(shù)/*/uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;CSN = 0; / CS
16、N low, init SPI transactionstatus = SPI_RW(reg); / select registerSPI_RW(value); / .and write value to it.CSN = 1; / CSN high againreturn(status); / return nRF24L01 status uchar/*/uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status,byte_ctr;CSN = 0; / Set CSN low, init SPI tranaction
17、status = SPI_RW(reg); / Select register to write to and read status bytefor(byte_ctr=0;byte_ctr<bytes;byte_ctr+)pBufbyte_ctr = SPI_RW(0); / Perform SPI_RW to read byte from nRF24L01CSN = 1; / Set CSN high againreturn(status); / return nRF24L01 status byte/*/*函數(shù):uint SPI_Write_Buf(uchar reg, uchar
18、 *pBuf, uchar uchars)/*功能: 用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/*/uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)uchar status,uchar_ctr;CSN = 0; /SPI使能 status = SPI_RW(reg); for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr+) /SPI_RW(*pBuf+);CSN = 1; /關(guān)閉SPIreturn(status); / /* nrf收發(fā)程序 *
19、void nrf_RxTx(uchar mod_nrf,uchar *buff) /NRF24L01收發(fā)程序static uchar mod_nrf_b;/static 地址不釋放/*進入發(fā)射模式*if(mod_nrf = 't')if(mod_nrf_b != 't')mod_nrf_b = 't'CE = 0; SPI_RW_Reg(WRITE_REG+STATUS,0xff); /清除中斷標志SPI_RW_Reg(FLUSH_TX,0x00);/清除TX_FIFO寄存器 SPI_RW_Reg(WRITE_REG + CONFIG,0x7e)
20、;/IRQ引腳不顯示中斷 上電 發(fā)射模式 116CRC校驗CE = 1;delayus(130);/從CE = 0 到 CE = 1;即待機模式到收發(fā)模式,需要最大130us /*發(fā)送數(shù)據(jù)*CE = 0;/StandBy I模式SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / 裝載接收端地址SPI_Write_Buf(WR_TX_PLOAD,buff,TX_PLOAD_WIDTH); / 裝載數(shù)據(jù)CE = 1; /置高CE激發(fā)數(shù)據(jù)發(fā)送delayus(130);/從CE = 0 到 CE = 1;即待機模式到收發(fā)
21、模式,需要最大130usdelayus(100); /給發(fā)送數(shù)據(jù)一點時間 比發(fā)送速度較快 延時可以比接收少sta = SPI_Read(STATUS);/讀取狀態(tài)寄存器的值SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除對應(yīng)的中斷if(TX_DS = 1)/發(fā)送成功再清除tx fifo寄存器CE = 0;SPI_RW_Reg(FLUSH_TX,0x00); /清除tx fifo寄存器/*重要*CE = 1; /*進入接收模式*else if(mod_nrf = 'r')/接收模式if(mod_nrf_b != 'r')mod_nrf_b = 'r'CE = 0; SPI_RW_Reg(WRITE_REG+STATUS,0xff);/清除中斷標志SPI_RW_Reg(FLUSH_RX,0x00); /清除RX_FIFO寄存器SPI_RW_Reg(WRITE_REG + CONFIG, 0x7f);/IRQ引腳不顯示中斷 上電 接收模式 116CRC校驗 CE = 1; delayus(130);/從CE = 0 到 CE = 1;即待機模式到收發(fā)模式,需要最大130usd
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 血管外科急危重癥診療要點
- 痔瘡嵌頓的護理
- 培訓(xùn)闖關(guān)游戲課件
- 中學(xué)行政培訓(xùn):提升管理智慧共筑教育合力
- 冬天保暖知識教育
- 康復(fù)科護理查房
- QC外出培訓(xùn)總結(jié)
- 全國教師教育發(fā)展大會實施綱要
- 養(yǎng)老機構(gòu)如何借助醫(yī)養(yǎng)結(jié)合模式實現(xiàn)2025年高質(zhì)量發(fā)展報告
- 航空貨運行業(yè)2025年市場競爭態(tài)勢與發(fā)展戰(zhàn)略規(guī)劃報告001
- 初中數(shù)學(xué)北師大八年級下冊(2023年修訂) 因式分解岷陽王冬雪提公因式法教學(xué)設(shè)計
- 金屬非金屬礦山安全規(guī)程
- 生活飲用水游離余氯方法驗證報告
- DB32∕T 186-2015 建筑消防設(shè)施檢測技術(shù)規(guī)程
- C-TPAT反恐知識培訓(xùn)ppt課件
- 巡檢培訓(xùn)課件.ppt
- 二代征信系統(tǒng)數(shù)據(jù)采集規(guī)范釋義
- 軸承基礎(chǔ)知識PPT通用課件
- 蘇教版二年級(下冊)科學(xué)全冊單元測試卷含期中期末(有答案)
- 河南華泰特種電纜項目可行性分析報告
- 公司員工合理化建議獎勵辦法
評論
0/150
提交評論