通信新技術(shù)報告無線傳感器網(wǎng)絡(luò)WSN_第1頁
通信新技術(shù)報告無線傳感器網(wǎng)絡(luò)WSN_第2頁
通信新技術(shù)報告無線傳感器網(wǎng)絡(luò)WSN_第3頁
通信新技術(shù)報告無線傳感器網(wǎng)絡(luò)WSN_第4頁
通信新技術(shù)報告無線傳感器網(wǎng)絡(luò)WSN_第5頁
已閱讀5頁,還剩48頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、通信新技術(shù)綜合訓(xùn)練報告 JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 通信新技術(shù)綜合訓(xùn)練報告學(xué)院名稱: 電氣信息工程學(xué)院 專 業(yè): 通信工程 班 級: 06通信1W 姓 名: 趙燦杰 學(xué) 號: 06313129 指導(dǎo)老師: 賈中寧、陶為戈、宋偉 2009年12月目 錄無線傳感器網(wǎng)絡(luò)實(shí)驗(yàn)前 言 Jennic-WSN 介紹2實(shí)驗(yàn)一 GPIO及LCD使用實(shí)驗(yàn)16實(shí)驗(yàn)二 簡單點(diǎn)對點(diǎn)無線通信實(shí)驗(yàn)19實(shí)驗(yàn)三 兩個EndDevice之間的無線通信實(shí)驗(yàn)24實(shí)驗(yàn)四 DIO中斷實(shí)驗(yàn)28實(shí)驗(yàn)五 定時器實(shí)驗(yàn)32實(shí)驗(yàn)六 UART實(shí)驗(yàn)36實(shí)驗(yàn)七 ADC及數(shù)據(jù)采集實(shí)驗(yàn)41實(shí)驗(yàn)八 休眠和

2、掉電保護(hù)實(shí)驗(yàn)47心得體會50MSP430實(shí)驗(yàn)實(shí)驗(yàn)一 入門和I/O基礎(chǔ)實(shí)驗(yàn)51實(shí)驗(yàn)二 鍵盤實(shí)驗(yàn)52實(shí)驗(yàn)三 MC39I實(shí)驗(yàn)56實(shí)驗(yàn)四 12864液晶實(shí)驗(yàn)59前 言 Jennic-WSN 介紹一、硬件平臺1. JN5139-Z01-MXX 模塊JN5139-Z01-MXX 模塊是基于JN5139 芯片所開發(fā)的一系列表帖形式的模塊產(chǎn)品,該系列模塊集成了所有的射頻組件和無線微控制器。這一系列的模塊包含下列不同的型號(如圖1-1 所示): JN5139-Z01-M00 內(nèi)置陶瓷天線; JN5139-Z01-M01 帶有SMA 天線連接接口; JN5139-Z01-M02 帶有功率放大器和SMA 天線連接接

3、口; JN5139-Z01-M03 帶有uFL 天線連接接口; JN5139-Z01-M04 帶有功率放大器和uFL 天線連接接口?;?JN5139 芯片所設(shè)計(jì)的最小系統(tǒng)如圖1-2 所示。SPISSZ 與SPISSM 連接,SPISWP接高電平,JN5139 上電自動復(fù)位或按鍵復(fù)位,SPIMISO 為編程控制端,與復(fù)位按鍵配合使用,經(jīng)DIO6、DIO7 實(shí)現(xiàn)程序BIN 文件的下載。關(guān)于編程下載具體使用可參考相關(guān)說明文檔:JN-UG-3007-Flash-Programmer-1v12.pdf。JN5139 模塊提供如下外圍部件功能: 5 個主SPI 選擇口; 2 個UART 串口; 2 個帶

4、捕獲/比較功能的可編程定時器/計(jì)數(shù)器; 2 個可編程睡眠定時器和1 個滴答定時器; 兩線串口(兼容SMbus和I2C); 從SPI 接口(與數(shù)據(jù)I/O 共享); 21 個數(shù)據(jù)I/O 口(與UART 串口、定時器及SPI 選擇復(fù)用); 4 通道12 位100kbps 模數(shù)轉(zhuǎn)換輸入; 2 個11 位數(shù)模轉(zhuǎn)換輸入; 2 個可編程模擬比較輸入; 內(nèi)部溫度傳感及電壓監(jiān)控。二、軟件平臺1. 建立開發(fā)環(huán)境在光盤中找到 software 文件夾下的JN-SW-4031-SDK-Toolchain-v1.1.exe 文件并運(yùn)行。在安裝過程中,最簡單的方法是按默認(rèn)設(shè)置安裝。圖 1-5 為安裝時出現(xiàn)的第一個界面,選

5、擇按鈕Next,當(dāng)圖1-6 所示的界面出現(xiàn)后,默認(rèn)選擇Cygwin,同樣點(diǎn)擊Next 按鈕。在下一個界面中(圖1-7),選擇需要將工具鏈安裝的位置,可選擇默認(rèn)安裝目錄C:Jennic。如果需要,可以選擇另一個驅(qū)動器,但必須保證目錄是Jennic,例如:D:Jennic。然后點(diǎn)擊Next 繼續(xù)。當(dāng)新的安裝界面出現(xiàn)時,繼續(xù)點(diǎn)擊Next,直到安裝完畢后,重新啟動計(jì)算機(jī)。第53頁,共53頁接下來運(yùn)行JN-SW-4030-SDK-Libraries-v1.5.exe安裝程序,它包括了基于Jenie、ZigBee和IEEE 802.15.4協(xié)議的無線網(wǎng)絡(luò)應(yīng)用程序所用的SDK軟件庫。在安裝過程中,最簡單的方

6、法是按默認(rèn)設(shè)置安裝。當(dāng)新的安裝界面出現(xiàn)后,繼續(xù)點(diǎn)擊 Next 按鈕,直到安裝完畢。2. 新建一個工程在 Jennic SDK v1.1 環(huán)境下,能很好地支持JN51xx 模塊,下面涉及到以JN5139 模塊的實(shí)驗(yàn)都是在該版本下進(jìn)行的。新建一個工程的步驟如下:打開 Code:Blocks 軟件,單擊Create a new project工具鏈或點(diǎn)擊菜單項(xiàng)File->New->Project,出現(xiàn)圖1-11所示的對話框。在該對話框中,有三種工程類型可供選擇。選擇Empty Project類型可創(chuàng)建一個空的工程;選擇Jennic類型可創(chuàng)建一個Jennic無線傳感器網(wǎng)絡(luò)工程;選擇Stat

7、ic Library類型可創(chuàng)建一個靜態(tài)庫文件。本課程有關(guān)Jennic的實(shí)驗(yàn)均選擇Jennic類型。對于Jennic類型的工程,Code:Blocks自動生成相應(yīng)的函數(shù),用戶可以利用各個API函數(shù)實(shí)現(xiàn)自己的應(yīng)用。選擇Jennic類型工程后單擊Go按鈕則出現(xiàn)圖1-12所示對話框。在該對話框中填寫工程名和工程所在路徑。本實(shí)驗(yàn)以“ test ” 為工程名, 工程所在路徑默認(rèn)選擇“JenniccygwinjennicSDKapplication”,然后,單擊Next按鈕進(jìn)入下一步。選擇編譯器,這里選擇默認(rèn)值 JN51xx Compiler,如圖1-13 所示,單擊Next 按鈕,選擇Jennic 開發(fā)應(yīng)

8、用類型,它們分別為802.15.4Aplication、ZigBee Coordinator、ZigBee End Device、ZigBee Router、Jenie End Device、Jenie Coordinator 和Jenie Router 等七種應(yīng)用類型,如圖1-14 所示。在本教程Jennic 實(shí)驗(yàn)中,我們主要使用ZigBee Coordinator、ZigBee End Device和ZigBee Router 三種類型的應(yīng)用。這里選擇ZigBee Coordinator,單擊Next 按鈕進(jìn)入選擇目標(biāo)板類型。選擇目標(biāo)板類型時選擇DK2,如圖1-15 所示。單擊Next按鈕

9、,選擇無線微控制器類型,本實(shí)驗(yàn)使用的微控制器類型為JN5139R1,所以選擇JN5139XR1選項(xiàng),如圖1-16所示。單擊Finish按鈕,進(jìn)入新建工程界面,如圖1-17所示,JN51xx_JZ_Coord.c為自動生成的源程序文件,它包括了程序入口函數(shù)AppColdStart( ),初始化協(xié)議棧函數(shù)以及協(xié)議棧調(diào)用應(yīng)用程序的一些函數(shù)的說明,用戶可以根據(jù)自己的需求編寫相應(yīng)的函數(shù),或添加其他的c源程序。用戶也可以直接將JN51xx_JZ_Coord.c文件從工程中去掉,而在工程中添加用戶自己編寫的c源程序。三、編譯和下載編寫代碼完成后,可按Ctrl+F9快捷鍵或選擇主菜單Build下的Build子

10、菜單或點(diǎn)擊圖標(biāo)建立可執(zhí)行二進(jìn)制代碼文件。若工程編譯(Build)成功,則可在C:JenniccygwinjennicSDKApplicationtestJN5139_BuildRelease 目錄下生成test.bin 文件。否則,出錯信息會顯示在信息窗口中,根據(jù)出錯信息調(diào)試程序。Jennic JN51xx Flash可編程器是用來將編譯好的二進(jìn)制代碼文件(*.bin)下載到JN51xx模塊中的Flash芯片的代碼下載工具,它通過串行總線與JN51xx模塊相連。Jennic JN51xx Flash可編程器的用戶界面如圖1-18所示,它可以將* .bin文件下載到目標(biāo)板或模塊中,下載步驟如下:

11、(1) 用串口線連接PC機(jī)和目標(biāo)板或模塊。(2) 運(yùn)行Flash可編程器,選擇PC機(jī)與目標(biāo)板相連的串行通訊端口。(3) 將目標(biāo)板上的J7跳線至編程(左側(cè))狀態(tài),給目標(biāo)板上電,按一下RESET按鈕后釋放,再恢復(fù)J7跳線至右側(cè)。(4) 在圖1-18所示的Flash可編程界面上點(diǎn)擊Browse按鈕(圖處)查找并選擇要下載的目標(biāo)文件。(5) 選擇好目標(biāo)文件后,點(diǎn)擊Progrm按鈕(圖中處)開始下載。當(dāng)下載完成后,將顯示下載成功或錯誤,如果遇到錯誤,請嘗試重新下載。(6) 成功下載后,關(guān)掉Flash可編程器再給目標(biāo)板或模塊上電、或按Reset按鈕,則剛下載的代碼自動運(yùn)行。實(shí)驗(yàn)一 GPIO及LCD使用實(shí)驗(yàn)

12、一、實(shí)驗(yàn)內(nèi)容 設(shè)計(jì)一個程序,實(shí)現(xiàn) LED自動閃爍,周期 1 秒。二、實(shí)驗(yàn)原理1. GPIO 使用 Jennic 的模塊具有 21 路通用的 GPIO,可以通過軟件的方式進(jìn)行設(shè)置,這些 GPIO口和其他的外圍接口是共用的。其共用關(guān)系如表 2-1 所示: 表2-1:IO口和其他的外圍接口共用關(guān)系 DIO引腳共用關(guān)系DIO0SPI從選擇1 (輸出)DIO1SPI從選擇2 (輸出)DIO2SPI從選擇3 (輸出)DIO3SPI從選擇4 (輸出)DIO4- DIO7UART0DIO8- DIO10Timer0DIO11- DIO13Timer1DIO14- DIO15Serial interfaceDI

13、O16IP data inDIO17- DIO20UART12. LED使用 LED 驅(qū)動庫文件提供了 LED 的控制方法,在 LedControl.h 中宏定義了相應(yīng)功能函數(shù)。開發(fā)板中的 LED驅(qū)動電路如圖 2-1 所示:3. 按鍵使用 按鍵驅(qū)動庫文件提供了按鍵的控制方法,在 Button.h 中宏定義了相應(yīng)功能函數(shù)。開發(fā)板中的按鍵驅(qū)動電路如圖 2-2 所示:三、軟件設(shè)計(jì)1.流程圖建網(wǎng)建網(wǎng)成功熄滅所有燈燈號加1,至0歸3點(diǎn)亮相應(yīng)燈號的led燈調(diào)用相應(yīng)延時 NoYes2. 功能程序 PRIVATE void vAppTickLED(void *pvMsg, uint8 u8Param) vLe

14、dControl(0,FALSE); vLedControl(1,FALSE); vLedControl(2,FALSE); vLedControl(3,FALSE); LED+; if(LED=4) LED=0; bToggle=1; vLedControl(LED,bToggle); (void)bBosCreateTimer(vAppTickLED, &u8Msg, 0, (APP_TICK_PERIOD_ms/10), &u8TimerId);四、實(shí)驗(yàn)結(jié)果與分析編譯程序,無誤后進(jìn)行下載,運(yùn)行后即可觀察到實(shí)驗(yàn)現(xiàn)象:Coordinator模塊上的LED以1s為周期自動閃爍。

15、若出現(xiàn)這種現(xiàn)象,則說明實(shí)驗(yàn)正確。五、存在問題和解決方法做這個實(shí)驗(yàn)的時候,程序下載完畢后開始運(yùn)行后,發(fā)現(xiàn)LED燈的閃爍狀態(tài)不是以1S的周期進(jìn)行閃爍的,后來經(jīng)修改源程序中設(shè)置周期的部分,即恢復(fù)正常。實(shí)驗(yàn)二 簡單點(diǎn)對點(diǎn)無線通信實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容分別為Coordinator和EndDevice設(shè)計(jì)一個程序,分別用按鍵控制切換對方對應(yīng)LED亮/滅狀態(tài)。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。二、實(shí)驗(yàn)原理1. 獲得16位短地址的方法 Coordinator的16位短地址固定為0x0000,而EndDevice的16位短

16、地址是由Coordinator動態(tài)分配的。EndDevice可直接使用短地址0x0000與Coordinator通信,而Coordinator與EndDevice通信時,Coordinator必須使用EndDevice的短地址。在應(yīng)用程序中,Coordinator獲得EndDevice短地址的方法比較簡單,每當(dāng)有新的結(jié)點(diǎn)加入網(wǎng)絡(luò)時,Coordinator協(xié)議棧會調(diào)用處理協(xié)議棧低層的回調(diào)函數(shù) JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *puStackEvent),參數(shù)puStackEvent是一個指向棧事件t

17、uJZS_StackEvent類型的指針,通過該參數(shù)即可獲得新加入結(jié)點(diǎn)的16位短地址。下面的JZA_vStackEvent( )函數(shù)的代碼中給出了獲取16位短地址DstAddress的具體方法。 if (eEventId = JZS_EVENT_NEW_NODE_HAS_JOINED) DstAddress = puStackEvent->sNewNodeEvent.u16ShortAddr; 2. 數(shù)據(jù)格式 ZigBee2004支持KVP鍵值對和MSG消息幀兩種類型數(shù)據(jù)格式。KVP是ZigBee2004協(xié)議中規(guī)定的一種特殊的數(shù)據(jù)傳輸機(jī)制,通過一種規(guī)定來標(biāo)準(zhǔn)化數(shù)據(jù)傳輸格式和內(nèi)容,主要用于

18、傳輸較簡單的變量值格式;MSG是ZigBee協(xié)議中規(guī)定的另一種數(shù)據(jù)傳輸機(jī)制,這種機(jī)制在數(shù)據(jù)傳輸格式和內(nèi)容上并不做更多的規(guī)定,主要用于專用的數(shù)據(jù)流或文件數(shù)據(jù)等數(shù)據(jù)量較大的情況。由于在ZigBee2006及以后的版本中不再支持KVP格式的數(shù)據(jù)包,因此,在本實(shí)驗(yàn)中,僅使用MSG消息幀進(jìn)行數(shù)據(jù)的傳輸。 在Jennic ZigBee應(yīng)用程序中,通常使用協(xié)議棧提供的afdeDataRequest( )函數(shù)發(fā)送數(shù)據(jù)幀。當(dāng)一個結(jié)點(diǎn)收到來自其他結(jié)點(diǎn)的MSG幀時,協(xié)議棧就會調(diào)用回調(diào)函數(shù)JZA_bAfMsgObject( ) 對接收的MSG幀進(jìn)行處理。在數(shù)據(jù)收發(fā)過程中,發(fā)送和接收設(shè)備雙方都需要知道事件的數(shù)據(jù)格式,才

19、能正確處理信息。 3. 創(chuàng)建和發(fā)送數(shù)據(jù)請求函數(shù)afdeDataRequest( ) 該函數(shù)屬于AFDE(AF Sub-layer Data Entity) 類函數(shù),用來向網(wǎng)絡(luò)層發(fā)出數(shù)據(jù)發(fā)送的請求。 該函數(shù)的原型為: Stack_Status_e afdeDataRequest( APS_Addrmode_e eAddrMode, uint16 u16AddrDst, uint8 u8DstEP, uint8 u8SrcEP, uint16 u16ProfileId, uint8 u8ClusterId, AF_Frametype_e eFrameType, uint8 u8TransCount

20、, AF_Transaction_s *pauTransactions, APS_TxOptions_e u8txOptions, NWK_DiscoverRoute_e eDiscoverRoute, uint8 u8RadiusCounter); 各形參描述如下: eAddrMode:該參數(shù)定義了發(fā)送的目標(biāo)地址模式,它是APS_Addrmode_e枚舉類型的數(shù)據(jù)。 u16AddrDst:該參數(shù)是數(shù)據(jù)要發(fā)送的目標(biāo)地址,地址范圍為0x0000到0xFFFE。 u8DstEP:目標(biāo)地址的端口號,范圍是0x01到0xF0。 u8SrcEP:源地址的端口號,范圍是0x01到0xF0。 u16Prof

21、ileid:所采用的 profile ID。 u8ClusterId:所采用的 cluster ID。 eFrameType:使用的數(shù)據(jù)幀類型0x01=KVP,0x02=MSG。 u8TransCount:本次請求發(fā)送的數(shù)據(jù)事務(wù)的數(shù)量。取值范圍在0到0x0f。 pauTransactions:該參數(shù)是一個指向AF_Transaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著需要發(fā)送的數(shù)據(jù)。bTxOptions:指定發(fā)送方式,可以選擇下列的值,這些值可以進(jìn)行邏輯或。 u8DiscoverRoute:設(shè)定所采用的路由發(fā)現(xiàn)模式。 u8RadiusCounter:數(shù)據(jù)發(fā)送的深度,即所發(fā)送

22、數(shù)據(jù)包的最大轉(zhuǎn)發(fā)次數(shù),如果設(shè)置為0,協(xié)議棧將采用2倍的MaxDepth發(fā)送深度。 4. 收到MsgObject調(diào)用的函數(shù)JZA_bAfMsgObject ( ) 該函數(shù)屬于協(xié)議棧調(diào)用應(yīng)用程序的函數(shù),用來處理來自其他結(jié)點(diǎn)發(fā)送來的MSG幀。這個函數(shù)詳細(xì)說明請參閱文檔JN-RM-2014-ZigBeeAppDevAPI-1v8.pdf。 該函數(shù)的原型為: PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, uint8 u8SrcEP, uint8 u8LQI, uint8 u8DstEP, uint8

23、 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) 各形參描述如下: eAddrMode:該參數(shù)定義了發(fā)送的目標(biāo)地址模式,它是APS_Addrmode_e枚舉類型的數(shù)據(jù). u16AddrSrc:該參數(shù)是數(shù)據(jù)發(fā)送方的源短地址,地址范圍為0x0000到0xFFFE。 u8SrcEP:源端口號,范圍是0x01到0xF0。 u8LQI:接收幀的鏈路質(zhì)量。 u8DstEP:目標(biāo)端口號,范圍是0x01到0xF0。 u8ClusterID:所

24、采用的cluster ID。 *pu8ClusterIDRsp:應(yīng)答cluster ID指針。 *puTransactionInd:該參數(shù)是一個指向AF_Transaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著接收的數(shù)據(jù)。 *puTransactionRsp:該參數(shù)是一個指向AF_Transaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著response信息。 5. 簡單設(shè)備描述函數(shù)afmeAddSimpleDesc( ) 該函數(shù)屬于AFME(AF Sub-layer Management Entity) 類函數(shù),在增加設(shè)備描述符函數(shù)vAddDesc(void

25、)中調(diào)用,其功能是為一個endpoint增加一個簡單描述符(simple descriptor)。如果一個endpoint上沒有正確定義的簡單描述符,那么它將不能正確地接收來自其他結(jié)點(diǎn)的數(shù)據(jù),通常簡單描述符應(yīng)該在設(shè)備建立網(wǎng)絡(luò)成功或者加入網(wǎng)絡(luò)成功后添加。 三、軟件設(shè)計(jì)流程圖建網(wǎng)建網(wǎng)成功Coordinator讀鍵值Coordinator發(fā)送數(shù)據(jù)NoYes入網(wǎng)入網(wǎng)成功Enddevice讀鍵值Enddevice發(fā)送數(shù)據(jù)Coordinator 接收數(shù)據(jù)Enddevice 接收數(shù)據(jù)控制相應(yīng)燈的亮滅狀態(tài)控制相應(yīng)燈的亮滅狀態(tài)NoYes四、實(shí)驗(yàn)結(jié)果與分析將Coordinator和EndDevice的電源、地線分

26、別相連,編譯,下載,運(yùn)行。1. 按動Coordinator的SW0、SW1、SW2、SW3,會發(fā)現(xiàn)它會對應(yīng)控制著EndDevice的LED0、LED1、LED2、LED3的亮滅。2. 按動EndDevice的SW0、SW1、SW2、SW3,會發(fā)現(xiàn)它會對應(yīng)控制著Coordinator的LED0、LED1、LED2、LED3的亮滅。五、存在問題和解決方法程序下載運(yùn)行后發(fā)現(xiàn):當(dāng)按下Coordinator的SW1后,EndDevice的LED1不亮,也就是說Coordinator的按鍵不能控制EndDevice的對應(yīng)LED亮滅狀態(tài)。后來經(jīng)反復(fù)修改完善程序后,終于實(shí)現(xiàn)了預(yù)期的功能,能互相控制對應(yīng)的LED

27、的亮滅了。實(shí)驗(yàn)三 兩個EndDevice之間的無線通信實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容分別為Coordinator和EndDevice設(shè)計(jì)一個程序,其功能為:Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址及綁定的媒介。按動EndDevice按鈕SW0,向Coordinator發(fā)送綁定請求信息,LED0閃爍10秒,Coordinator收到該信息后記錄其短地址并定時10秒,按動另外一個EndDevice的按鈕SW0向Coordinator發(fā)送綁定應(yīng)答信息,LED0閃爍5秒,在有效定時時間10秒內(nèi)若Coordinator收到該應(yīng)答信號,則記錄其短地址,分別將記錄的兩個短地址發(fā)送給兩個對應(yīng)EndDevice,兩個E

28、ndDevice收到短地址后分別點(diǎn)亮LED0(不再閃爍),若在規(guī)定時間內(nèi)沒有建立綁定關(guān)系,超時后滅LED0。如果按下任何EndDevice的SW1則解除綁定,且LED1閃爍3秒。綁定狀態(tài)下按動每個EndDevice的按鈕SW2、SW3可分別切換對方對應(yīng)LED亮/滅狀態(tài)。二、實(shí)驗(yàn)原理1. 通過發(fā)送請求/應(yīng)答綁定信息給Coordinator獲得對方的16位短地址按動EndDevice或Router按鈕,調(diào)用afdeDataRequest( )函數(shù)向Coordinator發(fā)送綁定請求信息,Coordinator收到該信息后記錄其短地址并定時,按動另外一個結(jié)點(diǎn)的按鈕使用afdeDataRequest(

29、 )函數(shù)向Coordinator發(fā)送綁定應(yīng)答信息,在有效定時時間內(nèi)若Coordinator收到該應(yīng)答信號,則記錄其短地址,分別將記錄的兩個段地址發(fā)送給兩個對應(yīng)結(jié)點(diǎn),兩個結(jié)點(diǎn)收到短地址后便可以相互直接通信。2通信過程中,Coordinator接受數(shù)據(jù)處理函數(shù)JZA_bAfMsgObjec() 首先通過此函數(shù)可以在廣播通信中將對方的短地址提取出來,然后將短地址進(jìn)行保存PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, /發(fā)送方的短地址uint8 u8SrcEP, uint8 u8LQI, uint8

30、 u8DstEP, uint8 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) if(puTransactionInd->uFrame.sMsg.au8TransactionData0=2) (void)bBosCreateTimer(vAppLED, &u8Msg, 0, 0, &u8TimerId); u16DstAddr1=u16AddrSrc; RESPONSE=1; (void)bBosCrea

31、teTimer(vAppstop, &u8Msg, 0, 10000/10, &u8TimerId); 3.通信過程中,Coordinator事件處理函數(shù)JZA_vAppEventHandler(void)待兩個EndDevice的短地址都保存好以后,通過此函數(shù)來將EndDeviceA的短地址發(fā)給EndDeviceB,將EndDeviceB的短地址發(fā)給EndDevice。void JZA_vAppEventHandler(void) if (!bNwkStarted) return; /判斷是否有鍵按下 if(FLAG=2) u16DstAddr=u16DstAddr1; vS

32、endData(4,u16DstAddr2); u16DstAddr=u16DstAddr2; vSendData(4,u16DstAddr1); u16DstAddr=0x0000; FLAG=3;4通信過程中,EndDevice接受數(shù)據(jù)處理函數(shù)JZA_bAfMsgObjec()待兩個終端綁定以后,可以根據(jù)此函數(shù)接收到的另一終端發(fā)送來的數(shù)據(jù)來控制本身LED燈的亮與滅。PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, /發(fā)送方的短地址uint8 u8SrcEP, uint8 u8LQI, ui

33、nt8 u8DstEP, uint8 u8ClusterID, uint8 *pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) 三、軟件設(shè)計(jì)四、實(shí)驗(yàn)結(jié)果與分析給Coordinator和EndDevice上電后, Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址,按動EndDevice按鈕SW0,向Coordinator發(fā)送綁定請求信息,此時Coordinator通過JZA_bAfMsgObjec()函數(shù)將此EndDevice的短地址提取出來,并保存,并定時10秒,按動另

34、外一個EndDevice的按鈕SW0向Coordinator發(fā)送綁定應(yīng)答信息,LED0閃爍5秒,在有效定時時間10秒內(nèi)若Coordinator收到該應(yīng)答信號,則記錄其短地址,分別將記錄的兩個短地址發(fā)送給兩個對應(yīng)EndDevice,兩個EndDevice收到短地址后分別點(diǎn)亮LED0(不再閃爍),若在規(guī)定時間內(nèi)沒有建立綁定關(guān)系,超時后滅LED0。如果按下任何EndDevice的SW1則解除綁定,且LED1閃爍3秒。綁定狀態(tài)下按動每個EndDevice的按鈕SW2、SW3可分別切換對方對應(yīng)LED亮/滅狀態(tài)。五、存在問題和解決方法剛開始按下任何EndDevice的SW1后無法正常解除綁定,后來經(jīng)過修改

35、程序和反復(fù)嘗試后,終于恢復(fù)了正常,實(shí)驗(yàn)現(xiàn)象與題意相吻合。實(shí)驗(yàn)四 DIO中斷實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容分別為Coordinator和EndDevice設(shè)計(jì)一個程序,運(yùn)用DIO中斷的方式分別用按鍵控制切換對方對應(yīng)LED亮/滅狀態(tài)。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0等等。二、實(shí)驗(yàn)原理1. vAHI_DioSetDirection( )函數(shù)該函數(shù)用來設(shè)置DIO引腳的方向(輸入或輸出),其函數(shù)原型和使用方法參見講義2。當(dāng)某個DIO作為外部終端源時,則意味著該DIO引腳設(shè)置為輸入。如果一個DIO引腳已安排給另一個外設(shè)且該外

36、設(shè)已啟用,則該函數(shù)對該DIO引腳不產(chǎn)生影響。2. vAHI_DioInterruptEdge( )函數(shù)當(dāng)某個DIO作為輸入引腳時,則用該函數(shù)設(shè)置中斷產(chǎn)生時是采用上升沿還是下降沿觸發(fā)。該函數(shù)的原型如下: void vAHI_DIOInterruptEdge ( uint32 u32Rising, uint32 u32Falling ); 各參數(shù)的具體含義描述如下: u32Rising:32位位掩碼,其位0至位20對應(yīng)于每一個DIO引腳。當(dāng)某一位為1時,則意味著該位對應(yīng)的引腳在輸入信號的上升沿觸發(fā)中斷。u32Rising的位21至位31無定義,可設(shè)置為1或0。 u32Falling:32位位掩碼,

37、其位0至位20對應(yīng)于每一個DIO引腳。當(dāng)某一位為1,則意味著該位對應(yīng)的引腳在輸入信號的下降沿觸發(fā)中斷。u32Rising的位21至位31無定義,可設(shè)置為1或0。該函數(shù)僅將u32Rising中為1的位對應(yīng)的引腳設(shè)置為上升沿觸發(fā)中斷,u32Falling中為1的位對應(yīng)的引腳設(shè)置為下降沿觸發(fā)中斷,沒有涉及到的引腳保持它原來的狀態(tài)。如果某一個引腳在u32Rising和u32Falling中都進(jìn)行了設(shè)置,則默認(rèn)為上升沿觸發(fā)。該函數(shù)僅對設(shè)置為輸入的DIO引腳有效。如果一個DIO引腳已安排給另一個外設(shè)且該外設(shè)已啟用,則該函數(shù)對該DIO引腳不產(chǎn)生影響。例如: vAHI_DioSetDirection(0x00

38、0000FF, 0x00000000); vAHI_DioInterruptEdge (0x0000000F, 0x00000077); 函數(shù)vAHI_DioSetDirection設(shè)置DIO0、DIO1、DIO7等8個引腳方向?yàn)檩斎?,函?shù)vAHI_DIOInterruptEdge設(shè)置DIO0、DIO1、DIO2和DIO3等4個引腳為上升沿觸發(fā)中斷,DIO4、DIO5和DIO6等3個引腳為下降沿觸發(fā)中斷,DIO7引腳保持原狀態(tài)。3. vAHI_DioInterruptEnable( ) 函數(shù)當(dāng)某個DIO作為輸入引腳時,則該函數(shù)用來設(shè)置接收或屏蔽該引腳發(fā)來的中斷,及使能/屏蔽中斷。該函數(shù)的原型如

39、下: void vAHI_DIOInterruptEnable (uint32 u32Enable, uint32 u32Disable); 各參數(shù)的具體含義描述如下: u32Enable:32位位掩碼,它的位0至位20對應(yīng)于每一個DIO引腳。當(dāng)某一位為1時,則使能該位對應(yīng)的引腳發(fā)來的中斷。u32Enable的位21至位31無定義。 u32Disable:32位位掩碼,它的位0至位20對應(yīng)于每一個DIO引腳。當(dāng)某一位為1時,則屏蔽該位對應(yīng)的引腳發(fā)來的中斷。u32Disable的位21至位31無定義。該函數(shù)僅使能u32Enable中為1的位對應(yīng)的引腳中斷,屏蔽u32Disable中為1的位對應(yīng)的

40、引腳中斷,沒有涉及到的引腳保持它原來的狀態(tài)。如果某一個引腳在u32Enable和u32Disable中都進(jìn)行了設(shè)置,則默認(rèn)為屏蔽中斷。該函數(shù)僅對設(shè)置為輸入的DIO引腳有效。如果一個DIO引腳已安排給另一個外設(shè)且該外設(shè)已啟用,則對該DIO引腳不產(chǎn)生影響。DIO引腳中斷可用來喚醒處于睡眠模式的設(shè)備。例如: vAHI_DioSetDirection(0x000000FF, 0x00000000); vAHI_DioInterruptEdge (0x0000000F, 0x00000077); vAHI_DioInterruptEnable (0x00000007, 0x0000007C); 使能DI

41、O0和DIO1兩個引腳的中斷,上升沿觸發(fā)中斷,屏蔽DIO2、DIO3、DIO4、DIO5和DIO6等5個引腳。DIO7引腳為輸入,其它引腳保持原狀態(tài)。上面三個函數(shù)都是對硬件設(shè)備進(jìn)行處理的函數(shù),都屬于802.15.4規(guī)范中的內(nèi)容,其詳細(xì)的說明請參閱JN-RM-2001-Integrated-Peripherals-API文檔。4. JZA_vPeripheralEvent( )函數(shù)該函數(shù)在中斷上下文時調(diào)用,即微處理器在執(zhí)行中斷處理程序的過程中調(diào)用,用于處理硬件中斷。該函數(shù)的原型為: PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32

42、 u32ItemBitmap); 各參數(shù)的具體含義描述如下: u32Device:產(chǎn)生中斷的外圍設(shè)備ID號,在802.15.4規(guī)范中被定義為枚舉值。u32ItemBitmap:與u32Device相對應(yīng)的外圍設(shè)備中斷源的位映射圖,在802.15.4規(guī)范中被定義為枚舉值。5. vAHI_DioSetPullup ( )函數(shù)當(dāng)某個DIO作為輸入輸出引腳時,則用該函數(shù)設(shè)置相應(yīng)引腳是否上拉。該函數(shù)的原型如下:void vAHI_DioSetPullup(uint32 u32On, uint32 u32Off); 各參數(shù)的具體含義描述如下: u32On:32位位掩碼,其位0至位20對應(yīng)于每一個DIO引腳

43、。當(dāng)某一位為1時,則意味著該位對應(yīng)的引腳被上拉。u32On的位21至位31無定義,可設(shè)置為1或0。u32Off:32位位掩碼,其位0至位20對應(yīng)于每一個DIO引腳。當(dāng)某一位為1時,則意味著該位對應(yīng)的引腳關(guān)閉上拉。u32Off的位21至位31無定義,可設(shè)置為1或0。三、軟件設(shè)計(jì)建網(wǎng)建網(wǎng)成功設(shè)置Coordinator的中斷口,等待中斷Coordinator發(fā)送數(shù)據(jù)NoYes入網(wǎng)入網(wǎng)成功設(shè)置Enddevice的中斷口,等待中斷Enddevice發(fā)送數(shù)據(jù)Coordinator 接收數(shù)據(jù)Enddevice 接收數(shù)據(jù)控制相應(yīng)燈的亮滅狀態(tài)控制相應(yīng)燈的亮滅狀態(tài)NoYes響應(yīng)中斷響應(yīng)中斷YesYesNoNo流程

44、圖:四、實(shí)驗(yàn)結(jié)果與分析按Coordinator的SW0,EndDevice上的LED0亮,按EndDevice的SW0,Coordinator的LED亮。 按Coordinator上的SW1,EndDevice上的LED1亮,按動EndDevice上的SW1,Coordinator的LED亮;按Coordinator上的SW2,EndDevice上的LED2亮,按動EndDevice上的SW2,Coordinator的LED亮;按Coordinator上的SW3,EndDevice上的LED3亮,按動EndDevice上的SW3,Coordinator的LED亮;再次將按鍵依次按動,對方的燈依

45、次對應(yīng)地滅掉,說明雙方的按鍵能互相控制對方LED的亮滅??梢姡簩?shí)驗(yàn)現(xiàn)象符合題意,說明程序設(shè)計(jì)也是正確的。五、存在問題和解決方法DIO中斷實(shí)驗(yàn)做的比較順暢,未出現(xiàn)意外狀況。實(shí)驗(yàn)五 定時器實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容設(shè)計(jì)一個程序,初始化DIO16(LED0)為輸入,運(yùn)用Timer0 PWM輸出控制LED0的亮滅狀態(tài),一個周期內(nèi)亮2秒,滅1秒。二、實(shí)驗(yàn)原理1. vAHI_TimerEnable ( )函數(shù) 該函數(shù)用來使能指定的定時器,并為該定時器設(shè)置參數(shù)。該函數(shù)的原型如下: void vAHI_TimerEnable ( uint8 u8Timer, uint8 u8Prescale, bool_t bIntR

46、iseEnable, bool_t bIntPeriodEnable, bool_t bOutputEnable); 各參數(shù)的具體含義描述如下: u8Timer:定時器的標(biāo)識,在JN5121/JN513x微控制器中有兩個應(yīng)用級定時器/計(jì)數(shù)器,用E_AHI_TIMER_0和E_AHI_TIMER_1分別標(biāo)識Time0和Timer1。 u8Prescale:時鐘的預(yù)分頻值,它的最大值為16。分頻后的頻率為原頻率的1/2u8Prescale。 bIntRiseEnable:該參數(shù)值為TRUE時,當(dāng)定時器的輸出變?yōu)楦唠娖綍r使能中斷。 bIntPeriodEnable:該參數(shù)值為TRUE時,當(dāng)定時器的一

47、個周期到且輸出變?yōu)榈碗娖綍r,使能中斷。 bOutputEnable:該參數(shù)值為TRUE時,使定時器的輸出出現(xiàn)在與PWM相關(guān)的輸出引腳上。 Timer0 使用DIO8-10引腳,Timer1使用DIO11-13引腳。 2. vAHI_TimerClockSelect ( )函數(shù) 選擇內(nèi)部或外部時鐘,當(dāng)使用內(nèi)部時鐘時要設(shè)置輸出門。該函數(shù)的原型如下: void vAHI_TimerClockSelect( uint8 u8Timer, bool_t bExternalClock, bool_t bGateControl); 各參數(shù)的具體含義描述如下: u8Timer:定時器的標(biāo)識,與函數(shù)vAHI_T

48、imerEnable()中的用法相同,用E_AHI_TIMER_0和E_AHI_TIMER_1分別標(biāo)識Time0和Timer1。 bExternalClock:該參數(shù)值為TRUE,表示使用外部時鐘;為FALSE,表示使用16MHz的內(nèi)部時鐘。 bGateControl:該參數(shù)值為TRUE時,表示當(dāng)定時器的門輸入是高電平時,打開輸出引腳;為FALSE時,表示當(dāng)定時器的門輸入為低電平時,打開輸出引腳。 3. vAHI_TimerStartRepeat ( )函數(shù) 設(shè)置重復(fù)定時器。該函數(shù)的原型如下: void vAHI_TimerStartRepeat( uint8 u8Timer, uint16

49、u16Hi, uint16 u16Lo); 各參數(shù)的具體含義描述如下: u8Timer:定時器的標(biāo)識,用E_AHI_TIMER_0和E_AHI_TIMER_1分別標(biāo)識Time0和Timer1。 u16Hi:該參數(shù)值表示在開始一個定時器之后,在定時器的輸出變?yōu)楦唠娖街敖?jīng)歷的時鐘周期數(shù)。 u16Lo:該參數(shù)值表示在開始一個定時器之后,在定時器的輸出變?yōu)榈碗娖街敖?jīng)歷的時鐘周期數(shù)。即定時器有效時間內(nèi)的時鐘周期數(shù)。 啟動定時器后,當(dāng)經(jīng)歷u16Hi個時鐘周期后,定時器的輸出由低電平變?yōu)楦唠娖?,再?jīng)歷u16Lo- u16Hi個時鐘周期后,定時器的輸出由高電平變?yōu)榈碗娖?,重新啟動定時器。這個過程重復(fù)執(zhí)行,

50、直到執(zhí)行vAHI_TimerStop( )函數(shù)停止定時器為止。如果定時器的中斷使能,可設(shè)置當(dāng)定時器的輸出由低電平變?yōu)楦唠娖綍r觸發(fā)中斷,也可設(shè)置當(dāng)定時器的輸出電平由高變低時觸發(fā)中斷。 4. 停止定時 對于設(shè)置了重復(fù)定時器,當(dāng)需要停止定時時,則需要執(zhí)行vAHI_TimerStop( )函數(shù)停止定時器,其函數(shù)原型如下: void vAHI_TimerStop (uint8 u8Timer); 參數(shù)u8Timer為定時器的標(biāo)識,用E_AHI_TIMER_0和E_AHI_TIMER_1分別標(biāo)識Time0和Timer1。 5. 定時時間計(jì)算 以內(nèi)部時鐘為例計(jì)算定時時間為:LouMHzescaleu1621

51、61Pr8××,例如當(dāng)設(shè)置Timer0為: vAHI_TimerEnable(E_AHI_TIMER_0, 10, FALSE, TRUE, FALSE); vAHI_TimerClockSelect(E_AHI_TIMER_0, FALSE, TRUE); vAHI_TimerStartRepeat(E_AHI_TIMER_0, 8000, 15625); 則定時器時間為: 1/16MHz×2u8Prescale×u16Lo = 1/16×210×15625 = 1s 6. 定時器的設(shè)置 在程序中用E_AHI_TIMER_0和E_A

52、HI_TIMER_1分別標(biāo)識Time0和Timer1。在使用定時器之前需要對定時器進(jìn)行設(shè)置,主要使用三個函數(shù):第一個函數(shù)vAHI_TimerEnable ( ),用來使能指定的定時器,并為該定時器設(shè)置參數(shù);第二個函數(shù)是vAHI_TimerClockSelect ( ),用來選擇內(nèi)部或外部時鐘,當(dāng)使用內(nèi)部時鐘時還要設(shè)置輸出門;第三個函數(shù)是vAHI_TimerStartRepeat ( ),設(shè)置重復(fù)定時時間。例如對定時器初始化的程序段如下: vAHI_TimerEnable(E_AHI_TIMER_1, 10, FALSE, TRUE, FALSE); vAHI_TimerClockSelect(

53、E_AHI_TIMER_1, FALSE, TRUE); vAHI_TimerStartRepeat(E_AHI_TIMER_1, 8000, 16000); 7. 定時中斷響應(yīng)處理 JZA_vPeripheralEvent( )函數(shù)在Jennic ZigBee協(xié)議棧處理硬件中斷時調(diào)用,定時器中斷也屬于外部中斷,因此在該函數(shù)中加入定時器中斷處理程序,例如當(dāng)有Timer1中斷時,如果EndDevice已加入網(wǎng)絡(luò),則發(fā)送一個數(shù)據(jù)包給Coordinator,其程序代碼如下: PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32It

54、emBitmap) if (u32Device = E_AHI_DEVICE_TIMER1) if (bNwkJoined) vSendData(2); 其中u32Device指產(chǎn)生中斷的設(shè)備ID號,E_AHI_DEVICE_TIMER1是指定時器Tiner1的ID號,這段程序的意思是:若中斷來自于Timer1并且EndDevice已加入網(wǎng)絡(luò)的情況下給Coordinator發(fā)送數(shù)據(jù)包。 三、軟件設(shè)計(jì)YesNoNoYes轉(zhuǎn)換成低電平,清零計(jì)數(shù)器Yes開始網(wǎng)絡(luò)啟動?打開定時器No計(jì)數(shù)轉(zhuǎn)換成高電平滿31250次?滿46875次?功能程序void JZA_vAppEventHandler(void) if (!bNwkStarted) return; if (NextReadStart) NextReadStart = FALSE; vAHI_TimerEnable(E_AHI_TIMER_0, 10, FALSE, TRUE, TRUE); vAHI_TimerC

溫馨提示

  • 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

提交評論