無線收發(fā)系統(tǒng)設計教材_第1頁
無線收發(fā)系統(tǒng)設計教材_第2頁
無線收發(fā)系統(tǒng)設計教材_第3頁
無線收發(fā)系統(tǒng)設計教材_第4頁
無線收發(fā)系統(tǒng)設計教材_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、nRF2401無線收發(fā)系統(tǒng)設計一 實驗目的培養(yǎng)基本實驗能力和工程實踐能力,通過實驗鍛煉基本實驗技能,使同學們掌握單片機的基本工作原理和單片機系統(tǒng)應用設計的技能,掌握單片機的簡單編程方法以及調試方法,并能應用于電子系統(tǒng)設計中,提高同學們對綜合電子系統(tǒng)的設計能力,加深對無線通信系統(tǒng)理論知識的理解,增強工程實踐能力,培養(yǎng)創(chuàng)新意識,提高分析問題和解決問題的能力。二 實驗基本要求(1)正確使用電子儀器;(2)根據(jù)項目設計要求能夠進行單片機系統(tǒng)硬件電路設計和軟件編程;(3)學會查閱接口電路手冊和相關技術資料;(4)具有初步的單片機電路硬件和軟件分析、尋找和排除常見故障的能力;(5)正確地記錄實驗數(shù)據(jù)和寫實

2、驗報告。三 實驗器材萬能板、單片機、nRF2401無線收發(fā)模塊、液晶屏、晶振、按鍵、發(fā)光二級管、開關、電容、電阻、5V電源適配器、導線、萬用表、電烙鐵、焊錫。四 GFSK調制解調原理4.1 調制 頻移鍵控方式,幅度恒定不變的載波信號頻率隨著調制信號的信息狀態(tài)而切換,通常采用的是二進制頻移鍵控,即載波信號頻率隨著數(shù)據(jù)信息碼的“0”、“1”變化進行切換。根據(jù)頻率變化影響發(fā)射波形的方式,F(xiàn)SK信號在相鄰的比特之間,呈現(xiàn)連續(xù)的相位或不連續(xù)的相位。一種常見的二進制FSK信號產(chǎn)生方法是根據(jù)數(shù)據(jù)比特碼是“0”還是“1”,在兩個振蕩頻率分別為和的振蕩器間切換,這種FSK信號的表達式為: (二進制1) (二進制

3、0)和分別代表載波信號頻率和恒定頻率偏移,而和分別表示單比特能量和比特周期。這種方法產(chǎn)生的波形在比特碼“0”,“1”切換時刻是不連續(xù)的,這種不連續(xù)的相位會造成諸如頻譜擴展和傳輸差錯等問題,信號的功率譜密度函數(shù)按照頻率偏移的負二次冪衰落,在無線系統(tǒng)中一般不采用這種FSK信號,而是使用信號波形對單一載波振蕩器進行調制,這樣FSK信號可以表示如下:上式中,是頻率調制系數(shù),定義為,為比特率,盡管調制波形在“0”和“1”比特間轉換時不連續(xù),但是相位函數(shù)是與的積分成比例,所以是連續(xù)的,大部分信號能量集中在以載波頻率為中心的主瓣范圍,功率譜密度函數(shù)按照頻率偏移的負四次冪衰減。為了進一步減小信號的頻譜旁瓣,可

4、以在前加入一級高斯濾波器,高斯濾波器的傳遞函數(shù)為:,其中:通過高斯濾波,平緩了輸入信號的相位變化,大大壓縮了信號頻譜的旁瓣。圖1 典型的GFSK調制輸入信號是隨機二進制信號形成的雙極性方波,方波經(jīng)高斯濾波器后是:式中號表示線性卷積運算,矩形脈沖定義為:通過數(shù)學推導,得到的表達式可表示為:式中Q定義為:連續(xù)相位通過頻率調制產(chǎn)生為:式中h是調制指數(shù);是對離散時間采樣。4.2 解調盡管高斯濾波器減小了發(fā)送GFSK信號對帶寬的需求,但是以接收端得到符號間干擾為代價的。GFSK是頻率調制信號,所以采用鑒相和鑒頻的方法來解調。令:是引入碼間干擾的,基帶同相和正交成分分別表示為:基帶信號的相位可以通過:計算

5、。在輸出端可以通過:獲得數(shù)字信號。圖2 典型的GFSK解調五 主要器件介紹5.1 51單片機引腳功能: MCS-51是標準的40引腳雙列直插式集成電路芯片,引腳分布請參照單片機引腳圖: P0.0P0.7 P0口8位雙向口線(在引腳的3932號端子)。 P1.0P1.7 P1口8位雙向口線(在引腳的18號端子)。 P2.0P2.7 P2口8位雙向口線(在引腳的2128號端子)。 P3.0P3.7 P3口8位雙向口線(在引腳的1017號端子)。 P0口有三個功能: 1、外部擴展存儲器時,當作數(shù)據(jù)總線(如圖1中的D0D7為數(shù)據(jù)總線接口)2、外部擴展存儲器時,當作地址總線(如圖1中的A0A7為地址總線

6、接口)3、不擴展時,可做一般的I/O使用,但內(nèi)部無上拉電阻,作為輸入或輸出時應在外部接上拉電阻。 P1口只做I/O口使用,其內(nèi)部有上拉電阻。P2口有兩個功能: 1、擴展外部存儲器時,當作地址總線使用2、做一般I/O口使用,其內(nèi)部有上拉電阻; P3口有兩個功能: 除了作為I/O使用外(其內(nèi)部有上拉電阻),還有一些特殊功能,由特殊寄存器來設置。有內(nèi)部EPROM的單片機芯片(例如8751),為寫入程序需提供專門的編程脈沖和編程電源,這些信號也是由信號引腳的形式提供的。即:編程脈沖:30腳(ALE/PROG) 編程電壓(25V):31腳(EA/Vpp) ALE/PROG地址鎖存控制信號:在系統(tǒng)擴展時,

7、ALE用于控制把P0口的輸出低8位地址送鎖存器鎖存起來,以實現(xiàn)低位地址和數(shù)據(jù)的隔離。當CPU對外部進行存取時,用以鎖住地址的低位地址,即P0口輸出。ALE有可能是高電平也有可能是低電平,當ALE是高電平時,允許地址鎖存信號,當訪問外部存儲器時,ALE信號負跳變(即由正變負)將P0口上低8位地址信號送入鎖存器。當ALE是低電平時,P0口上的內(nèi)容和鎖存器輸出一致。關于鎖存器的內(nèi)容,我們稍后也會介紹。在8051單片機內(nèi)部有一個4KB或8KB的程序存儲器(ROM),ROM的作用就是用來存放用戶需要執(zhí)行的程序的,那么我們是怎樣把編寫好的程序存入進這個ROM中的呢?實際上是通過編程脈沖輸入才能寫進去的,這

8、個脈沖的輸入端口就是PROG。PSEN外部程序存儲器讀選通信號:在讀外部ROM時PSEN低電平有效,以實現(xiàn)外部ROM單元的讀操作。 1、內(nèi)部ROM讀取時,PSEN不動作; 2、外部ROM讀取時,在每個機器周期會動作兩次; 3、外部RAM讀取時,兩個PSEN脈沖被跳過不會輸出; 4、外接ROM時,與ROM的OE腳相接。 EA/VPP訪問和序存儲器控制信號:1、接高電平時: CPU讀取內(nèi)部程序存儲器(ROM) 擴展外部ROM:當讀取內(nèi)部程序存儲器超過0FFFH(8051)1FFFH(8052)時自動讀取外部ROM。 2、接低電平時:CPU讀取外部程序存儲器(ROM)。 在前面的學習中我們已知道,8

9、031單片機內(nèi)部是沒有ROM的,那么在應用8031單片機時,這個腳是一直接低電平的。RST復位信號:當輸入的信號連續(xù)2個機器周期以上高電平時即為有效,用以完成單片機的復位初始化操作,當復位后程序計數(shù)器PC=0000H,即復位后將從程序存儲器的0000H單元讀取第一條指令碼。 XTAL1和XTAL2:外接晶振引腳。當使用芯片內(nèi)部時鐘時,此二引腳用于外接石英晶體和微調電容;當使用外部時鐘時,用于接外部時鐘脈沖信號。5.2 無線通信模塊nRF24L01+nRF24L01+是一款工作在2.42.5GHz世界通用ISM頻段的單片無線收發(fā)器芯片。無線收發(fā)器包括:頻率發(fā)生器、增強型SchockBurst模式

10、控制器、功率放大器、晶體管振蕩器調制器、解調器。輸出功率頻道選擇和協(xié)議的設置可以通過SPI接口進行設置。極低的電流消耗,當工作在發(fā)射模式下發(fā)射功率為0dBm時電流消耗為11.3mA,接收模式為13.5mA,掉電模式和待機模式下電流消耗更低。nRF24L01+適用于多種無線通信的場合,如無線數(shù)據(jù)傳輸系統(tǒng)、無線鼠標、遙控開鎖、遙控玩具等。模塊特點(1)2.42.5GHz全球免申請ISM工作頻段。(2)125個通訊頻道,滿足多點通訊、分組、跳頻等應用需求。(3)發(fā)射功率可設置為:0dBm、-6dBm、-12dBm和-18dBm。(4)實際發(fā)射功率0dBm(設置為0dBm時測試得出)。(5)SMA接口

11、,可方便連接同軸電纜或外置天線。SMA接口:微波高頻連接器,最高頻率為18GHz。(6)通過SPI(行外設接口)接口與MCU連接,速率08Mbps。(7)支持2Mbps、1Mbps和250kbps傳輸速率。(8)增強型ShockBurstTM傳輸模式,完全兼容nRF2401A、nRF24L01等芯片。(9)支持自動應答及自動重發(fā),內(nèi)置地址及CRC數(shù)據(jù)校驗功能。(10)工作電壓范圍:1.9V3.6V,待機模式下電流低于1A。(11)工作溫度范圍:-40+85CE:使能發(fā)射或接收;CSN、SCK、MOSI、MISO:SPI引腳端,微處理器可通過此腳配置nRF24L01;IRQ:中斷標志位;VDD:

12、電源輸入端;VSS:地;XC2、XC1:晶體振蕩器引腳;VDD_PA:為功率放大器供電,輸出為1.8V;ANT1、ANT2:天線接口;IREF:參考電流輸入。模塊上的引腳定義,與外部連接信號只有8個。引腳abcdefgh名稱VCCCECSNCLKMOSIMISOIRQGND5.2.1 天線鞭狀天線是一種可彎曲的垂直桿狀天線,其長度一般為1/4或1/2波長??捎糜谛⌒屯ㄐ艡C、步談機、汽車收音機等,軍用電臺等。該實驗僅用到了通道1,因為通道1的DATA引腳是雙向的數(shù)字I/O口,已經(jīng)滿足要求,通道2的DOUT只能在接收模式中使用,為單向數(shù)字輸出口。其中PWR_UP、CE、CS三個引腳控制著nRF24

13、01的四種工作模式:收發(fā)模式、配置模式、空閑模式、關斷模式。工作模式PWR_UPCECS收發(fā)模式110配置模式101空閑模式100關斷模式0*5.2.2 狀態(tài)字設置位置個數(shù)名稱功能143-12024TEXT測試保留119-1128DATA2_W通道2數(shù)據(jù)段長度111-1048DATA1_W通道1數(shù)據(jù)段長度103-6440ADDR2通道2硬件地址63-2440ADDR1通道1硬件地址23-186ADDR_W地址段長度171CRC_L檢驗段長度,值為1時16bit,0時8bit161CRC_EN檢驗使能,值為1時檢驗有效,0時無效151RX2_EN啟用通道數(shù),值為1時兩通道,0時單通道141CM通

14、信模式,值為1時突發(fā)模式,0時直接傳遞模式131RFDR_SB通信速率,值為1時1kbit/s,0時250kbit/s12-103XO_F晶振頻率,值為011時16MHz9-82RF_PWR輸出功率,值為117-17RF_CH#工作頻率01RXEN工作狀態(tài),值為1時表示接收,1為發(fā)送5.3 顯示屏引腳名稱方向功能1VSSI電源地2VDDI電源電壓5V3VOOLCD驅動電壓(可調,一般0.8V)4RSIRS=0,選擇指令寄存器;RS=1,數(shù)據(jù)寄存器5R/WIR/W=0,寫操作;R/W=1,讀操作;6EI寫操作時,信號下降沿有效;讀操作高電平有效7DB0I/O數(shù)據(jù)口08DB1I/O數(shù)據(jù)口19DB2

15、I/O數(shù)據(jù)口210DB3I/O數(shù)據(jù)口311DB4I/O數(shù)據(jù)口412DB5I/O數(shù)據(jù)口513DB6I/O數(shù)據(jù)口614DB7I/O數(shù)據(jù)口715LED+I背光電源正16LED-I背光電源地狀態(tài)字由RS、R/W、DB7DB0寫入,包括清屏、光標歸位、設置輸入模式、顯示開/關控制、光標或顯示移位、功能設置、地址設置、寫數(shù)據(jù)、讀數(shù)據(jù)。具體參照文檔。六 工作過程(1)單片機對自身、nRF24L01+、顯示屏進行初始化配置設置CS高、CE低,使nRF24L01+進入編程模式,nRF24L01+的DATA引腳為輸入狀態(tài),配置數(shù)據(jù)寫入。(2)單片機向nRF24L01+發(fā)送數(shù)據(jù)設置CE高,使nRF24L01+進入T

16、X模式,nRF24L01+的DATA為輸入狀態(tài),并通過它輸出數(shù)據(jù)到TX FIFO,之后設置CE低,開始傳輸。(3)單片機通過nRF24L01+讀取數(shù)據(jù)七 程序#include "STC89.H"/ STC89系列單片機頭文件#include "Type.h"/ 數(shù)據(jù)類型聲明頭文件#include "LCD1602.h"/ 字符型液晶屏頭文件#include "Board.h"/ LED、按鍵和蜂鳴器引腳定義頭文件#include "nRF24L01P.h"/ nRF24L01+無線數(shù)傳模塊驅動頭

17、文件uint8 key_down=0;/ 按鍵按下標志.為0時代表沒有按鍵按下,為1時代表已有按鍵按下.uint8 key_code=0;/ 按鍵編號,為0時無按鍵按下.void Key_Send(void)key_code=0;if(KEY1=KEY_DOWN)key_code+=1;/ 根據(jù)按鍵狀態(tài)設置按鍵編號標志if(KEY2=KEY_DOWN)key_code+=2;if(KEY3=KEY_DOWN)key_code+=3;if(KEY4=KEY_DOWN)key_code+=4;if(key_code=0)/ key_code=0,說明未有按鍵按下if(key_down=1)key_

18、down=0;else/ key_code!=0,說明已有按鍵按下if(key_down=0)/ key_down=0,之前沒有按鍵按下key_down=1;/ 設置按鍵狀態(tài)標志n1P_TX_Buff3 = key_code + '0'/ 將按鍵代碼轉換為ASCII字符后存入TX緩存數(shù)組n1P_TX_Buff4 = '0'/ 設置標志為"發(fā)送按鍵信息"LCD_Print_String(0,1," Key - Send Err ");/ 提前顯示按鍵信息發(fā)送失敗信息LCD_Print_Char(5,1,n1P_TX_Buff

19、3);/ 顯示本機按鍵代碼 LED3 = LED_ON;n1P_Turn_TX(n1P_TX_Buff);/ 發(fā)送按鍵代碼信息LED3 = LED_OFF;void Key_Rece(void)if(n1P_RX_Buff4 = '0')/ 接收到的數(shù)據(jù)為對方設備發(fā)送的按鍵信息LCD_Print_String(0,1," Key - Received ");/ 顯示從對方設備接收到的按鍵信息LCD_Print_Char(5,1,n1P_RX_Buff3);/ 顯示從對方設備接收到的按鍵代碼n1P_TX_Buff3 = n1P_RX_Buff3;n1P_TX_

20、Buff4 = '1'/ 設置標志為"接收按鍵信息成功"LED3 = LED_ON;n1P_Turn_TX(n1P_TX_Buff);/ 切換nRF24L01(+)為發(fā)送模式,并發(fā)送"接收成功"信息,發(fā)送結束后返回接收模式LED3 = LED_OFF;else/ 接收到的數(shù)據(jù)為對方設備返回的接收正確信息LCD_Print_String(0,1," Key - Send OK! ");/ 顯示對方接收按鍵信息成功信息LCD_Print_Char(5,1,n1P_RX_Buff3);/ 顯示對方接收到的按鍵代碼void m

21、ain(void)LCD_Init_Dev();/ 初始化LCD.清屏、設置工作方式等。LCD_Cls();/ 清屏LCD_Print_String(0,0,"NOVATE nRF24L01+");/ 顯示字符LCD_Print_String(0,1," Press Any Key ");/ 顯示字符LED1=LED_OFF; LED2=LED_OFF; LED3=LED_OFF;/ 熄滅全部指示燈,完成上電程序部分n1P_Init_IO();/ 初始化nRF24L01(+)模塊IOn1P_Turn_RX();/ 初始化nRF24L01(+),并將其設置

22、為接收模式while(1)if(n1P_Check_IRQ(n1P_RX_Buff)/ 檢查IRQ引腳狀態(tài)Key_Rece();/ 接收處理Key_Send();/ 檢測按鍵#include "STC89.H"#include "Type.h"#include "LCD1602.h"#define LCD_Dly_Dat6/ 等待數(shù)據(jù)建立時間,實測STC89C52RC外部晶振11.0592MHz時需>=4./ 函數(shù): LCD_Soft_Dly()/ 描述: 軟件延時/ 參數(shù): dly 延時時間void LCD_Soft_Dly(

23、uint16 dly) uint16 i;for(; dly>0; dly-) for(i=0; i<10; i+);/ 函數(shù): LCD_Init_IO()/ 描述: 初始化IO/ 參數(shù): 無void LCD_Init_IO(void)LPin_E = 0;/ E 置低,設備禁用LPin_RS = 0;/ RS置低,切換到命令字操作模式LPin_RW = 0;/ RW置低,切換到寫入模式LPin_BLED = 0;/ 關閉背光/ 函數(shù): LCD_Wait_Busy()/ 描述: 等待LCD空閑,只有在空閑狀態(tài)下方可對LCD進行操作/ 參數(shù): 無void LCD_Wait_Busy(

24、void)uint8 isbusy=0, dly=0;for(dly=250; dly>0; dly-)/ 指定最大超時時間,防止死循環(huán)LPin_RS = 0;/ RS置低,切換到命令字操作模式LPin_RW = 1;/ RW置高,切換到讀取模式LPin_E = 1;/ E 置高,開始操作(讀取操作時為高電平有效)LCD_Soft_Dly(LCD_Dly_Dat);/ 等待數(shù)據(jù)建立isbusy = LPin_DB;/ 讀取忙標志(bit7=Busy)和當前指針(bit6:0=AC)LPin_E = 0;/ E 置低,結束操作if(isbusy < 0x80) break;/ bit

25、7=0=空閑,退出等待/ 函數(shù): LCD_W_Reg()/ 描述: 寫LCD寄存器/ 參數(shù): dat待寫入的數(shù)據(jù)void LCD_W_Reg(uint8 dat)LCD_Wait_Busy();/ 等待空閑LPin_RS = 0;/ RS置低,切換到命令字操作模式 LPin_RW = 0;/ RW置低,切換到寫入模式LPin_E = 1;/ E 置高,開始操作LPin_DB= dat;/ 將數(shù)據(jù)輸出到數(shù)據(jù)線上LCD_Soft_Dly(LCD_Dly_Dat);/ 等待數(shù)據(jù)建立LPin_E = 0;/ E 置低,完成操作(寫入操作時為下降沿有效)/ 函數(shù): LCD_W_Byte()/ 描述: 向

26、LCD寫入1byte數(shù)據(jù)/ 參數(shù): dat待寫入的數(shù)據(jù)void LCD_W_Byte(uint8 dat)LCD_Wait_Busy();/ 等待空閑LPin_RS = 1;/ RS置高,切換到數(shù)據(jù)操作模式 LPin_RW = 0;/ RW置低,切換到寫入模式LPin_E = 1;/ E 置高,開始操作LPin_DB= dat;/ 將數(shù)據(jù)輸出到數(shù)據(jù)線上LCD_Soft_Dly(LCD_Dly_Dat);/ 等待數(shù)據(jù)建立LPin_E = 0;/ E 置低,完成操作(寫入操作時為下降沿有效)/ 函數(shù): LCD_Init_Dev()/ 描述: LCD復位,注意該操作有固定順序/ 參數(shù): 無void

27、LCD_Init_Dev(void)LCD_Init_IO();LCD_W_Reg(0x38);LCD_Soft_Dly(500);/ 等待約5msLCD_W_Reg(0x38);LCD_Soft_Dly(500);LCD_W_Reg(0x30);LCD_Soft_Dly(500);LCD_W_Reg(0x38);/ 8位數(shù)據(jù)總線寬度,兩行字符,5x7點陣LCD_W_Reg(0x08);/ 顯示關,光標不顯示,光標不閃爍LCD_W_Reg(0x01);/ 清屏LCD_W_Reg(0x06);/ 顯示光標右移,畫面不滾動LCD_W_Reg(0x0C);/ 顯示開,光標不顯示,光標不閃爍/ 函數(shù):

28、 LCD_Cls()/ 描述: 顯示清屏/ 參數(shù): 無void LCD_Cls(void)LCD_W_Reg(0x01);/ 清屏/ 函數(shù): LCD_Set_Coor()/ 描述: 指定顯示坐標/ 參數(shù): x列坐標(1602為0至15)/ y 行坐標(1602為0至1)void LCD_Set_Coor(uint8 x, uint8 y)if(y)x+=0x40;/ 在第二行的顯示數(shù)據(jù)時,地址偏移0x40x+=0x80;/ 計算DDRAM地址(Display Data RAM)LCD_W_Reg(x);/ 寫AC(Address Counter)到DDRAM地址/ 函數(shù): LCD_Print_

29、Char()/ 描述: 在指定位置顯示一個字符/ 參數(shù): x 列坐標(1602為0至15)/ y 行坐標(1602為0至1)/ dat 數(shù)據(jù)void LCD_Print_Char(uint8 x, uint8 y, uint8 dat)LCD_Set_Coor(x,y);/ 指定顯示坐標LCD_W_Byte(dat);/ 寫入數(shù)據(jù)/ 函數(shù): LCD_Print_Char()/ 描述: 在指定位置顯示一個字符串/ 參數(shù): x 列坐標(1602為0至15)/ y 行坐標(1602為0至1)/ *s 字符串首指針void LCD_Print_String(uint8 x, uint8 y, uint

30、8 *s)LCD_Set_Coor(x,y);/ 指定顯示坐標while(*s != '0') LCD_W_Byte(*s); s+;/ 寫入數(shù)據(jù) #include "STC89.H"#include "Type.h"#include "nRF24L01P.h"#define RF_CH0/ RF射頻通道 0125#defineRF_ADDR_WIDTH5/ RF地址寬度 15byte#define RF_DATA_WIDTH5/ RF數(shù)據(jù)寬度 132byteuint8 code n1P_RF_Addr5=0xBE,0

31、xBD,0xBC,0xBB,0xBA;/ TX,RX地址,可自行更改uint8 n1P_RX_BuffRF_DATA_WIDTH=0,0,0,0,0;/ 接收數(shù)據(jù)緩沖區(qū)uint8 n1P_TX_BuffRF_DATA_WIDTH='K','E','Y','-','-'/ 發(fā)送數(shù)據(jù)緩沖區(qū)/ 函數(shù): n1P_Init_IO()/ 描述: 初始化IO/ 參數(shù): 無void n1P_Init_IO(void)nPin_CE = 0; / 進入待機模式nPin_CSN = 1; / SPI禁止nPin_SCK = 0; /

32、SPI時鐘置低/ 函數(shù): n1P_SPI_WR_Byte()/ 描述: 通過SPI寫一個byte到nRF24L01+,同時從nRF24L01+讀取一個byte/ 參數(shù): byte 待寫入字節(jié)數(shù)據(jù)/ return 讀取到的字節(jié)數(shù)據(jù)uint8 n1P_SPI_WR_Byte(uint8 byte)uint8 i; for(i=0; i<8; i+) / 循環(huán)8次 nPin_MOSI = (byte & 0x80); / 將byte最高位輸出到MOSI byte <<= 1; / 低一位移位到最高位 nPin_SCK = 1; / 拉高SCK,nRF24L01從MOSI讀入

33、1位數(shù)據(jù),同時從MISO輸出1位數(shù)據(jù) byte |= nPin_MISO; / 讀MISO到byte最低位 nPin_SCK = 0; / SCK置低 return(byte); / 返回讀出的一字節(jié)/ 函數(shù): n1P_SPI_W_Reg_Byte()/ 描述: 將val寫入addr對應的寄存器地址,同時返回status字節(jié)/ 參數(shù): addr 寄存器地址/ val 待寫入寄存器的數(shù)值/ return 返回status狀態(tài)uint8 n1P_SPI_W_Reg_Byte(uint8 addr, uint8 val)uint8 status; nPin_CSN = 0; / CSN置低,開始傳輸

34、數(shù)據(jù) status = n1P_SPI_WR_Byte(addr);/ 寫入寄存器地址,同時返回狀態(tài)字 n1P_SPI_WR_Byte(val); / 然后寫數(shù)據(jù)到該寄存器 nPin_CSN = 1; / CSN拉高,結束數(shù)據(jù)傳輸 return(status); / 返回狀態(tài)寄存器/ 函數(shù): n1P_SPI_W_Reg_Byte()/ 描述: 讀取addr所對應的寄存器地址/ 參數(shù): addr 寄存器地址/ return返回寄存器內(nèi)的數(shù)值uint8 n1P_SPI_R_Reg_Byte(uint8 addr)uint8 val; nPin_CSN = 0; / CSN置低,開始傳輸數(shù)據(jù) n1P

35、_SPI_WR_Byte(addr);/ 寫入寄存器地址 val = n1P_SPI_WR_Byte(0); / 然后從該寄存器讀數(shù)據(jù) nPin_CSN = 1; / CSN拉高,結束數(shù)據(jù)傳輸 return(val); / 返回寄存器數(shù)據(jù)/ 函數(shù): n1P_SPI_W_Reg_Buff()/ 描述: 連續(xù)寫入len個字節(jié)到addr指定的寄存器中,同時返回status狀態(tài)字/ 參數(shù): cmd 命令字/ *p待寫入數(shù)據(jù)指針/ len待寫入數(shù)據(jù)長度/ return 返回status狀態(tài)uint8 n1P_SPI_W_Reg_Buff(uint8 cmd, uint8 *p, uint8 len)ui

36、nt8 status, i; nPin_CSN = 0; / CSN置低,開始傳輸數(shù)據(jù) status = n1P_SPI_WR_Byte(cmd);/ 選擇寄存器,同時返回狀態(tài)字 for(i=0; i<len; i+) n1P_SPI_WR_Byte(pi); / 逐個字節(jié)寫入nRF24L01+ nPin_CSN = 1; / CSN拉高,結束數(shù)據(jù)傳輸 return(status); / 返回狀態(tài)寄存器/ 函數(shù): n1P_SPI_W_Reg_Buff()/ 描述: 連續(xù)寫入len個字節(jié)到addr指定的寄存器中,同時返回status狀態(tài)字/ 參數(shù): cmd 命令字/ *p待讀取數(shù)據(jù)指針/

37、len待讀取數(shù)據(jù)長度/ return 返回status狀態(tài)uint8 n1P_SPI_R_Reg_Buff(uint8 cmd, uint8 *p, uint8 len)uint8 status, i; nPin_CSN = 0; / CSN置低,開始傳輸數(shù)據(jù) status = n1P_SPI_WR_Byte(cmd);/ 選擇寄存器,同時返回狀態(tài)字 for(i=0; i<len; i+) pi = n1P_SPI_WR_Byte(0);/ 逐個字節(jié)從nRF24L01+讀出 nPin_CSN = 1; / CSN拉高,結束數(shù)據(jù)傳輸 return(status); / 返回狀態(tài)寄存器/ 函

38、數(shù): n1P_Turn_RX()/ 描述: 初始化nRF24L01+,并將其轉換為接收狀態(tài)/ 參數(shù): 無void n1P_Turn_RX(void)nPin_CE = 0;/ CE置低,進入待機模式n1P_SPI_W_Reg_Buff(nCMD_W_REGISTER | nREG_RX_ADDR_P0, n1P_RF_Addr, RF_ADDR_WIDTH);/ 設置RX通道0地址n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_SETUP_AW, nRCD_AW_5byte);/ 設置RX地址寬度n1P_SPI_W_Reg_Byte(nCMD_W_REGIS

39、TER | nREG_RX_PW_P0, RF_DATA_WIDTH);/ 設置RX通道0數(shù)據(jù)寬度n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_RF_CH, RF_CH);/ 設置射頻通道 n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_EN_RXADDR, nRCD_ERX_P0_enable);/ 使能接收通道0n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_EN_AA, 0x00);/ 關閉自動應答n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG

40、_SETUP_RETR, nRCD_ARC_disable);/ 禁用自動重發(fā)n1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_RF_SETUP, nRCD_RF_DR_1Mbps | nRCD_RF_PWR_0dBm);/ 設置傳輸速率為1Mbps,發(fā)射功率為0dBmn1P_SPI_W_Reg_Byte(nCMD_W_REGISTER | nREG_CONFIG, nRCD_MASK_TX_DS_enable / 禁用發(fā)送完成中斷| nRCD_MASK_MAX_RT_enable / 禁用發(fā)送超時中斷| nRCD_EN_CRC_enable / 啟用CRC|

41、 nRCD_CRCO_2byte / CRC16| nRCD_PWR_UP_powerup / 上電模式| nRCD_PRIM_RX_prx);/ RX模式nPin_CE = 1;/ CE置高,進入運行模式/ 函數(shù): n1P_Turn_TX()/ 描述: 初始化nRF24L01+,并將其轉換為發(fā)送狀態(tài)。發(fā)送數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù),發(fā)送完成后再轉換為接收狀態(tài)/ 參數(shù): p 發(fā)送數(shù)據(jù)存放地址void n1P_Turn_TX(uint8 *p)uint8 sta=0;nPin_CE = 0;/ CE置低,進入待機模式n1P_SPI_W_Reg_Buff(nCMD_W_REGISTER | nREG_TX_ADDR,

溫馨提示

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

最新文檔

評論

0/150

提交評論