全雙工調(diào)試程序 自動(dòng)切換收發(fā)模式 可用于實(shí)現(xiàn)對(duì)講機(jī)_第1頁(yè)
全雙工調(diào)試程序 自動(dòng)切換收發(fā)模式 可用于實(shí)現(xiàn)對(duì)講機(jī)_第2頁(yè)
全雙工調(diào)試程序 自動(dòng)切換收發(fā)模式 可用于實(shí)現(xiàn)對(duì)講機(jī)_第3頁(yè)
全雙工調(diào)試程序 自動(dòng)切換收發(fā)模式 可用于實(shí)現(xiàn)對(duì)講機(jī)_第4頁(yè)
全雙工調(diào)試程序 自動(dòng)切換收發(fā)模式 可用于實(shí)現(xiàn)對(duì)講機(jī)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、/NRF24L01調(diào)試程序,全雙工雙向通信,即兩個(gè)模塊兼具收發(fā)功能,自動(dòng)高速切換收發(fā)模式。/使用本程序的前提條件是:硬件沒(méi)問(wèn)題。如果能正確運(yùn)行本程序,也能說(shuō)明你的硬件電路沒(méi)問(wèn)題。/大家根據(jù)實(shí)際情況,更改 NRF24L01 各引腳、LED 和 KEY 的宏定義。/LED燈的狀態(tài)由RxBuf0來(lái)決定,RxBuf0 = 0,LED輸出0;RxBuf0 = 1,LED輸出1;你也可以自行更改規(guī)則。/KEY可以改變TxBuf0的值,從而改變另一起模塊RxBuf0的值,進(jìn)而改變LED的狀態(tài)。/此程序未用到外部中斷,即不響應(yīng)IRQ 因此IRQ引腳可以接任意I/O口,不必接到外部中斷引腳,不過(guò)建議接到外部中斷

2、引腳。/若注釋部分為亂碼:設(shè)置keil:Edit>Configuration>Editor>Encoding 選擇chinese2312。/以下程序經(jīng)過(guò)多次復(fù)制,粘貼到keil,沒(méi)有錯(cuò)誤,如出現(xiàn)錯(cuò)誤,請(qǐng)下載文檔后再?gòu)?fù)制。/粘貼到word后排布可能會(huì)變得不整齊,請(qǐng)自行排布。#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í)函數(shù)*/void delayus(uint us)for(;us >0;us-)_nop_();/*void delayms(uint ms)/延時(shí)?個(gè) 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個(gè)字節(jié)的TX地址長(zhǎng)度#define RX_ADR_WIDTH 5 / 5個(gè)字節(jié)的RX地址長(zhǎng)度#define TX_PLOAD_WIDTH 16 / ?個(gè)字節(jié)的TX數(shù)據(jù)長(zhǎng)度#define RX_PLOAD_WIDTH 16 / ?個(gè)字節(jié)的RX

6、數(shù)據(jù)長(zhǎng)度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 / 寫(xiě)寄存器#define RD_RX_PLOAD 0x61 / 讀取接收數(shù)據(jù)#define WR_TX_PLOAD 0xA0 / 寫(xiě)待發(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校驗(yàn)?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#define EN_AA 0x01 / 自動(dòng)應(yīng)答功能設(shè)置#define EN_RXADDR 0x02 / 可用信道設(shè)置#define SETUP_AW 0x03 / 收發(fā)地址寬度設(shè)置#define SETUP_RETR 0x04 / 自動(dòng)重發(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)測(cè)功能#define CD 0x09 / 地址檢測(cè) #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ù)長(zhǎng)度#define RX_PW_P1 0x12 / 接收頻道0接收數(shù)據(jù)長(zhǎng)度#define RX_PW_P2 0x13 / 接收頻道0接收數(shù)據(jù)長(zhǎng)度#define RX_PW_P3 0x14 / 接收頻道0接收數(shù)據(jù)長(zhǎng)度#define RX_PW_P4 0x15 / 接收頻道0接收數(shù)據(jù)長(zhǎng)度#define RX_PW_P5 0x16 / 接收頻道0接收數(shù)據(jù)長(zhǎng)度#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)標(biāo)志*/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時(shí)鐘拉低SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /寫(xiě)本地地址S

12、PI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); /寫(xiě)接收端地址SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); /通道0自動(dòng)應(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ù)長(zhǎng)度SPI_RW_Reg(WRITE_RE

13、G + RF_SETUP, 0x0f); /設(shè)置發(fā)射速率為2MHZ,發(fā)射功率為最大值0dBSPI_RW_Reg(WRITE_REG + CONFIG, 0x7c); /IRQ引腳不顯示中斷 掉電模式 116CRC校驗(yàn)/*/*函數(shù):uint SPI_RW(uint uchar)/*功能:NRF24L01的SPI寫(xiě)時(shí)序/*/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時(shí)序*/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讀寫(xiě)寄存器函數(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)/*功能: 用于寫(xiě)數(shù)據(jù):為寄存器地址,pBuf:為待寫(xiě)入數(shù)據(jù)地址,uchars:寫(xiě)入數(shù)據(jù)的個(gè)數(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 地址不釋放/*進(jìn)入發(fā)射模式*if(mod_nrf = 't')if(mod_nrf_b != 't')mod_nrf_b = 't'CE = 0; SPI_RW_Reg(WRITE_REG+STATUS,0xff); /清除中斷標(biāo)志SPI_RW_Reg(FLUSH_TX,0x00);/清除TX_FIFO寄存器 SPI_RW_Reg(WRITE_REG + CONFIG,0x7e)

20、;/IRQ引腳不顯示中斷 上電 發(fā)射模式 116CRC校驗(yàn)CE = 1;delayus(130);/從CE = 0 到 CE = 1;即待機(jī)模式到收發(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;即待機(jī)模式到收發(fā)

21、模式,需要最大130usdelayus(100); /給發(fā)送數(shù)據(jù)一點(diǎn)時(shí)間 比發(fā)送速度較快 延時(shí)可以比接收少sta = SPI_Read(STATUS);/讀取狀態(tài)寄存器的值SPI_RW_Reg(WRITE_REG+STATUS,sta);/清除對(duì)應(yīng)的中斷if(TX_DS = 1)/發(fā)送成功再清除tx fifo寄存器CE = 0;SPI_RW_Reg(FLUSH_TX,0x00); /清除tx fifo寄存器/*重要*CE = 1; /*進(jìn)入接收模式*else if(mod_nrf = 'r')/接收模式if(mod_nrf_b != 'r')mod_nrf_b = 'r'CE = 0; SPI_RW_Reg(WRITE_REG+STATUS,0xff);/清除中斷標(biāo)志SPI_RW_Reg(FLUSH_RX,0x00); /清除RX_FIFO寄存器SPI_RW_Reg(WRITE_REG + CONFIG, 0x7f);/IRQ引腳不顯示中斷 上電 接收模式 116CRC校驗(yàn) CE = 1; delayus(130);/從CE = 0 到 CE = 1;即待機(jī)模式到收發(fā)模式,需要最大130usd

溫馨提示

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

評(píng)論

0/150

提交評(píng)論