版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、.JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 通信新技術(shù)綜合訓(xùn)練報(bào)告學(xué)院名稱: 專 業(yè): 班 級(jí): 姓 名: 學(xué) 號(hào): 指導(dǎo)老師: 2012年3月.;目 錄實(shí)驗(yàn)一 Jennic-WSN開(kāi)發(fā)環(huán)境1實(shí)驗(yàn)二 GPIO及LCD使用實(shí)驗(yàn)4實(shí)驗(yàn)三 簡(jiǎn)單點(diǎn)對(duì)點(diǎn)無(wú)線通信實(shí)驗(yàn)8實(shí)驗(yàn)四 兩個(gè)EndDevice之間的無(wú)線通信實(shí)驗(yàn)14實(shí)驗(yàn)五 DIO中斷實(shí)驗(yàn)18實(shí)驗(yàn)六 定時(shí)器實(shí)驗(yàn)23實(shí)驗(yàn)七 UART實(shí)驗(yàn)27實(shí)驗(yàn)八 ADC及數(shù)據(jù)采集實(shí)驗(yàn)32實(shí)驗(yàn)九 休眠和掉電保護(hù)實(shí)驗(yàn)38心得體會(huì)44附錄45實(shí)驗(yàn)一 Jennic-WSN開(kāi)發(fā)環(huán)境一、實(shí)驗(yàn)內(nèi)容1. 熟悉基于JN5139芯片所開(kāi)發(fā)的一系列開(kāi)
2、發(fā)板及外圍部件;2. 了解zigbee系統(tǒng);3. 掌握軟件的安裝與調(diào)試;4. 熟悉常用API接口函數(shù)。二、實(shí)驗(yàn)原理1JN5139 最小系統(tǒng)及外圍部件基于 JN5139 芯片所設(shè)計(jì)的最小系統(tǒng)。SPISSZ 與SPISSM 連接,SPISWP接高電平,JN5139 上電自動(dòng)復(fù)位或按鍵復(fù)位,SPIMISO 為編程控制端,與復(fù)位按鍵配合使用,經(jīng)DIO6、DIO7 實(shí)現(xiàn)程序BIN 文件的下載。JN5139 模塊提供如下外圍部件功能:5 個(gè)主SPI 選擇口;2 個(gè)UART 串口; 2 個(gè)帶捕獲/比較功能的可編程定時(shí)器/計(jì)數(shù)器;2 個(gè)可編程睡眠定時(shí)器和1 個(gè)滴答定時(shí)器; 兩線串口(兼容SMbus和I2C);
3、 從SPI 接口(與數(shù)據(jù)I/O 共享); 21 個(gè)數(shù)據(jù)I/O 口(與UART 串口、定時(shí)器及SPI 選擇復(fù)用); 4 通道12 位100kbps 模數(shù)轉(zhuǎn)換輸入; 2 個(gè)11 位數(shù)模轉(zhuǎn)換輸入; 2 個(gè)可編程模擬比較輸入; 內(nèi)部溫度傳感及電壓監(jiān)控。2. 開(kāi)發(fā)板基于JN5139芯片所設(shè)計(jì)的WSN開(kāi)發(fā)板,其部件如下:U1: JN5139系列Zigbee模塊; U2: 板載光照度傳感器; U3: 板載溫濕度一體傳感器; J3: 外供電(5VDC)接口;Swith: 供電開(kāi)關(guān); J7: 編程與運(yùn)行狀態(tài)選擇,左跳并給傳感器板加電,則進(jìn)入可編程狀態(tài),或者在加電的情況下,按住RESET按鈕,左跳J7,然后放開(kāi)R
4、ESET按鈕,再右跳J7,也可進(jìn)入可編程狀態(tài),退出可編程狀態(tài),只需要按一下RESET按鈕即可; J8: Flash寫保護(hù)跳選,編程與運(yùn)行都跳選到RUN(右跳); DB9: RS232編程接口; UART0: 串口0; JP6: 模塊所有管腳的引出排線; LCD: 液晶接口; Power: 電源指示燈; REST: 復(fù)位按鍵; LED3,LED2,LED1,LED0:可編程LED,分別對(duì)應(yīng)DIO19、DIO18、DIO17、DIO16; SW3,SW2,SW1,SW0:可編程按鍵,分別對(duì)應(yīng)DIO20、DIO11、DIO10、DIO9; GND: 地。 3. 軟件的安裝與調(diào)試(1)建立開(kāi)發(fā)環(huán)境在光
5、盤中找到software文件夾下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司網(wǎng)站上獲得該文件)并運(yùn)行。在安裝過(guò)程中,最簡(jiǎn)單的方法是按默認(rèn)設(shè)置安裝。(2)編寫程序代碼并進(jìn)行下載與調(diào)試 編寫代碼完成后,可按Ctrl+F9快捷鍵或選擇主菜單Build下的Build子菜單或點(diǎn)擊圖標(biāo)建立可執(zhí)行二進(jìn)制代碼文件。 若工程編譯(Build)成功,則可在C:JenniccygwinjennicSDKApplicationtestJN5139_ BuildRelease目錄下生成test.bin文件。否則,出錯(cuò)信息會(huì)顯示在信息窗口中,根據(jù)出錯(cuò)信息調(diào)試程序。Jen
6、nic JN51xx Flash可編程器是用來(lái)將編譯好的二進(jìn)制代碼文件(*.bin)下載到JN51xx模塊中的Flash芯片的代碼下載工具,它通過(guò)串行總線與JN51xx模塊相連。Jennic JN51xx Flash可編程器的用戶界面如圖1-18所示,它可以將* .bin文件下載到目標(biāo)板或模塊中,下載步驟如下: a用串口線連接PC機(jī)和目標(biāo)板或模塊。b運(yùn)行Flash可編程器,選擇PC機(jī)與目標(biāo)板相連的串行通訊端口。c將目標(biāo)板上的J7跳線至編程(左側(cè))狀態(tài),給目標(biāo)板上電,按一下RESET按鈕后釋放,再恢復(fù)J7跳線至右側(cè)。d在圖1-18所示的Flash可編程界面上點(diǎn)擊Browse按鈕(圖中處)查找并選
7、擇要下載的目標(biāo)文件。e選擇好目標(biāo)文件后,點(diǎn)擊Progrm按鈕(圖中處)開(kāi)始下載。在下載的過(guò)程中會(huì)顯示一個(gè)下載的進(jìn)度條,如圖1-19所示。當(dāng)下載完成后,將顯示下載成功或錯(cuò)誤,如圖1-20所示下載成功對(duì)話框。如果遇到錯(cuò)誤,請(qǐng)嘗試重新下載。f成功下載后,關(guān)掉Flash可編程器再給目標(biāo)板或模塊上電、或按Reset按鈕,則剛下載的代碼自動(dòng)運(yùn)行。4. 常用API接口函數(shù)介紹 (1)應(yīng)用程序初始化函數(shù)如下:AppColdStart( ) 應(yīng)用程序的入口,相當(dāng)于標(biāo)準(zhǔn)C中的main函數(shù),結(jié)點(diǎn)上電后將從這里開(kāi)始執(zhí)行應(yīng)用程序。該函數(shù)需要完成以下功能:1. 通過(guò)設(shè)置函數(shù)中的參數(shù)值來(lái)設(shè)置信道號(hào)(JZS_sConfig.
8、u32Channel)和PAN ID(JZS_sConfig.u16PanId); 2. 調(diào)用函數(shù)JZS_u32InitSystem(TRUE)來(lái)初始化ZigBee 協(xié)議棧;3. 調(diào)用函數(shù)vInit( )對(duì)用戶的應(yīng)用進(jìn)程進(jìn)行初始化,包括初始化按鈕動(dòng)作和程序變量,設(shè)定綁定等操作;4. 調(diào)用bBosRun(TRUE)來(lái)啟動(dòng)操作系統(tǒng)BOS。用戶可根據(jù)具體的應(yīng)用設(shè)計(jì)該函數(shù)。AppWarmStart( ) 結(jié)點(diǎn)從內(nèi)存供電的休眠模式喚醒的時(shí)候?qū)⑦M(jìn)入這個(gè)函數(shù)。啟動(dòng)后所有的內(nèi)存數(shù)據(jù)都沒(méi)有丟失。如果設(shè)備不需要休眠喚醒功能,這個(gè)函數(shù)可以為空。用戶可根據(jù)具體的應(yīng)用設(shè)計(jì)該函數(shù)。一般情況下,該函數(shù)會(huì)調(diào)用AppColdS
9、tart( )重新啟動(dòng)設(shè)備。(2)應(yīng)用程序調(diào)用協(xié)議棧的函數(shù)如下:JZS_u32InitSystem( ) 初始化Jennic ZigBee協(xié)議棧。JZS_vStartStack ( ) 設(shè)備將作為Coordinator、Router或者End Device啟動(dòng)。如果是Coordinator將啟動(dòng)網(wǎng)絡(luò),如果是Router或者End Device將加入網(wǎng)絡(luò)。JZS_vStartNetwork ( ) 手動(dòng)控制Coordinate網(wǎng)絡(luò)啟動(dòng),相對(duì)于自動(dòng)網(wǎng)絡(luò)啟動(dòng),使用該功能,需要設(shè)置JZS_sConfig.bAutoJoin=FALSE.該函數(shù)執(zhí)行后,返回的協(xié)議棧事件為 JZS_EVENT_NWK_ST
10、ARTED JZS_EVENT_FAILED_TO_START_NETWORK 。vAppSaveContexts ( ) 保存網(wǎng)絡(luò)參數(shù)以及用戶的數(shù)據(jù),如果你的應(yīng)用是固定點(diǎn)的話,建議你進(jìn)行網(wǎng)絡(luò)參數(shù)的保存。u16AppGetContextSize ( ) 用來(lái)獲取保存的網(wǎng)絡(luò)參數(shù)以及用戶數(shù)據(jù)的尺寸。vAppGetContexts ( ) 讀取保存的網(wǎng)絡(luò)參數(shù)的內(nèi)容。(3)協(xié)議棧調(diào)用應(yīng)用函數(shù)的函數(shù)如下:JZA_boAppStart( ) 讓用戶可以在協(xié)議棧啟動(dòng)前定義endpoint的descriptor,通常開(kāi)發(fā)人員應(yīng)該在這個(gè)函數(shù)中調(diào)用JZS_vStartStack啟動(dòng)協(xié)議棧。JZA_vStartEv
11、ent( ) 協(xié)議棧將通過(guò)這個(gè)函數(shù)反饋網(wǎng)絡(luò)層的一些網(wǎng)絡(luò)事件,比如網(wǎng)絡(luò)啟動(dòng)成功、結(jié)點(diǎn)加入成功或者數(shù)據(jù)發(fā)送完成等。JZA_vPeripheralEvent( ) 該函數(shù)主要用來(lái)處理外部的硬件中斷,比如按鈕、定時(shí)器、UART等。JZA_vAppEventHandler( ) BOS周期性地調(diào)用該函數(shù)處理硬件中斷。用戶可以利用它進(jìn)行網(wǎng)絡(luò)狀態(tài)的判斷和按鈕的檢查等,也可以在這個(gè)函數(shù)中,寫入自己的應(yīng)用程序。在設(shè)計(jì)該函數(shù)時(shí),要盡可能地使其運(yùn)行時(shí)間短,以便BOS調(diào)度其他活動(dòng)事件。JZA_vAppDefineTasks( ) 該函數(shù)用于向BOS注冊(cè)自己的用戶任務(wù),一般很少使用該函數(shù)。JZA_bAfMsgObjec
12、t( ) 收到其他結(jié)點(diǎn)發(fā)送來(lái)的MSG幀的處理函數(shù)。 實(shí)驗(yàn)二 GPIO及LCD使用實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容1運(yùn)用基本GPIO函數(shù)設(shè)計(jì)一個(gè)程序,分別通過(guò)各按鍵切換對(duì)應(yīng)LED亮/滅狀態(tài)。2設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)LED自動(dòng)閃爍,周期為1秒。3設(shè)計(jì)一個(gè)程序,按下按鍵SW0,LCD顯示數(shù)據(jù)加1;按下按鍵SW1,LCD顯示數(shù)據(jù)減1。二、實(shí)驗(yàn)原理1. GPIO 使用 Jennic 的模塊具有 21 路通用的 GPIO,可以通過(guò)軟件的方式進(jìn)行設(shè)置,這些 GPIO口和其他的外圍接口是共用的。其共用關(guān)系如表 2-1 所示: 表2-1:IO口和其他的外圍接口共用關(guān)系 DIO引腳共用關(guān)系DIO0SPI從選擇1 (輸出)DIO1SP
13、I從選擇2 (輸出)DIO2SPI從選擇3 (輸出)DIO3SPI從選擇4 (輸出)DIO4- DIO7UART0DIO8- DIO10Timer0DIO11- DIO13Timer1DIO14- DIO15Serial interfaceDIO16IP data inDIO17- DIO20UART1常用函數(shù):(1)對(duì)于GPIO的操作首先需要調(diào)用vAHI_DioSetDirection來(lái)進(jìn)行GPIO輸入輸出方向的設(shè)置。該函數(shù)的原型如下:PUBLIC void vAHI_DioSetDirection(uint32 u32Inputs,uint32 u32Outputs);這里u32Input
14、s和u32Outputs是設(shè)置GPIO輸入和輸出地mask碼。(2)對(duì)于GPIO的輸出操作比較簡(jiǎn)單,通過(guò)調(diào)用如下原型函數(shù):PUBLIC void vAHI_DioSetOutput(uint32 u32On,uint32 u32Off);這里u32On和u32Off分別是設(shè)置GPIO輸出高、低電平的掩碼。(3)對(duì)于GPIO的輸入操作,通常調(diào)用如下原型函數(shù):PUBLIC uint32 u32AHI_DioReadInput(void);返回值對(duì)應(yīng)每個(gè)輸入DIO的高低電平。2LED使用LED 驅(qū)動(dòng)庫(kù)文件提供了 LED 的控制方法,在 LedControl.h 中宏定義了相應(yīng)功能函數(shù)。對(duì)于LED的操
15、作,首先要調(diào)用初始化函數(shù)vLedInitFfd()初始化FFD開(kāi)發(fā)板上的四個(gè)LED,然后調(diào)用函數(shù)vLedControl(LED,ON)控制相應(yīng)LED點(diǎn)亮或熄滅。相應(yīng)函數(shù)原型如下:PUBLIC void vLedInitFfd(void);PUBLIC void vLedControl(uint8 u8Led,bool_t bOn);3按鍵使用按鍵驅(qū)動(dòng)庫(kù)文件提供了按鍵的控制方法,在Button.h中宏定義了相應(yīng)功能函數(shù)。對(duì)于按鍵的操作,首先要調(diào)用初始化函數(shù)vButtonInitFfd()初始化FFD開(kāi)發(fā)板上的四個(gè)按鍵,然后調(diào)用函數(shù)u8ButtonReadFfd()讀取相應(yīng)按鍵的狀態(tài)。相應(yīng)函數(shù)原型
16、如下:PUBLIC void vButtonInitFfd(void);PUBLIC uint8 u8ButtonReadFfd(void);4LCD使用LCD驅(qū)動(dòng)庫(kù)文件庫(kù)提供了液晶的驅(qū)動(dòng)方法,在Lcd_JM12864_Driver.h中提供了相應(yīng)功能的原型函數(shù)。5BOS定時(shí)器的使用為了消除按鈕抖動(dòng)對(duì)控制器的影響,本實(shí)驗(yàn)設(shè)置的一個(gè)讀取按鈕的標(biāo)志變量NextReadStart,若其值為TRUE且有按下按鈕SW的操作,則設(shè)置其為FALSE,并利用BOS的定時(shí)器函數(shù)bBosCreateTimer()定時(shí),500ms后再次設(shè)置NextReadStart為真。通過(guò)關(guān)這種方法可有效地消除按鈕抖動(dòng)的影響。b
17、BosCreateTimer()函數(shù)是一個(gè)處理軟件定時(shí)器的BOS API函數(shù),調(diào)用該函數(shù)可由BOS創(chuàng)建一個(gè)軟件定時(shí)器,該定時(shí)器要利用內(nèi)部硬件滴答定時(shí)器(tick timer)來(lái)實(shí)現(xiàn)。當(dāng)定時(shí)時(shí)間到,立即調(diào)用由bBosCreateTimer()指定的定時(shí)處理程序。6協(xié)議棧事件函數(shù)JZA_vStackEvent()是一個(gè)協(xié)議棧調(diào)用應(yīng)用程序的函數(shù)(回調(diào)函數(shù))。它的主要功能是處理來(lái)自于協(xié)議棧底層的各種事件,比如,APS層數(shù)據(jù)傳輸確認(rèn)。用戶通過(guò)該函數(shù)可以處理來(lái)自于AF和ZDP層的事件。該函數(shù)的原型為:PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEv
18、entId, tuJZS_StackEvent *puStackEvent);其中參數(shù)eEventId表示事件的類型,參數(shù)puStackEvent表示有關(guān)發(fā)生事件的補(bǔ)充信息。7周期性調(diào)用函數(shù) 網(wǎng)絡(luò)啟動(dòng)后,每隔一定時(shí)間,BOS就會(huì)調(diào)用JZA_vAppEventHandler()函數(shù)一次,該函數(shù)專門來(lái)處理硬件中斷,用戶可以在該函數(shù)中添加用于網(wǎng)絡(luò)狀態(tài)判斷、按鈕檢查等檢測(cè)中斷事件的程序代碼,也可以添加用于發(fā)送數(shù)據(jù)的程序代碼等。本實(shí)驗(yàn)利用該函數(shù)檢查是否按下SW按鈕。三、軟件設(shè)計(jì)1運(yùn)用基本GPIO函數(shù)設(shè)計(jì)一個(gè)程序,分別通過(guò)各按鍵切換對(duì)應(yīng)LED亮/滅狀態(tài)。程序首先執(zhí)行AppColdStart()函數(shù),自動(dòng)尋
19、找最安靜的信道,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、LED、按鍵和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘,其后判斷網(wǎng)絡(luò)是否啟動(dòng)成功,若啟動(dòng)成功,則硬件上的標(biāo)志位LED0滅,網(wǎng)絡(luò)啟動(dòng)成功后就開(kāi)始讀取按鍵值,并執(zhí)行相應(yīng)的按鍵控制LED亮滅的子程序,主程序流程圖如下圖所示:2設(shè)計(jì)一個(gè)程序,實(shí)現(xiàn)LED自動(dòng)閃爍,周期為1秒。 程序首先執(zhí)行AppColdStart()函數(shù),自動(dòng)尋找最安靜的信道,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、LED、按鍵和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘,其后判斷網(wǎng)絡(luò)是否啟動(dòng)成功,若啟動(dòng)成功,則硬件上的標(biāo)志位LED0滅,網(wǎng)絡(luò)啟動(dòng)成功后就調(diào)用vAppTickLED()函數(shù),定時(shí)為1s,定
20、時(shí)時(shí)間一到,循環(huán)執(zhí)行vAppTickLED()函數(shù),通過(guò)定義一個(gè)變量LED,LED循環(huán)變化,利用vLedControl(LED,TRUE),實(shí)現(xiàn)LED的流水燈顯示。主程序流程圖如下圖所示:3設(shè)計(jì)一個(gè)程序,按下按鍵SW0,LCD顯示數(shù)據(jù)加1;按下按鍵SW1,LCD顯示數(shù)據(jù)減1。 程序首先執(zhí)行AppColdStart()函數(shù),自動(dòng)尋找最安靜的信道,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、LED、按鍵和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘,其后判斷網(wǎng)絡(luò)是否啟動(dòng)成功,若啟動(dòng)成功,則硬件上的標(biāo)志位LED0滅,網(wǎng)絡(luò)啟動(dòng)成功后調(diào)用JZA_vAppEventHandler()函數(shù)讀取按鍵值,若有鍵按下,調(diào)用按鍵子程
21、序vProcessSplashKeyPress( ),執(zhí)行case語(yǔ)句:按鍵0,對(duì)液晶顯示的數(shù)進(jìn)行加1;按鍵1,對(duì)液晶顯示的數(shù)進(jìn)行減1。主程序流程圖如下圖所示:四、實(shí)驗(yàn)結(jié)果與分析1. 實(shí)驗(yàn)一中分別按下按鍵SW0SW3,相應(yīng)的LED0LED3能夠改變當(dāng)前的狀態(tài),按動(dòng)一下亮、按動(dòng)一下滅,實(shí)現(xiàn)了按鍵控制LED燈的亮滅;2. 實(shí)驗(yàn)二中實(shí)現(xiàn)LED的自動(dòng)閃爍,實(shí)際實(shí)驗(yàn)中實(shí)現(xiàn)的是4個(gè)LED燈依次閃爍,及以流水燈的形式顯示,每?jī)蓚€(gè)燈之間的切換時(shí)間為1s;3. 實(shí)驗(yàn)三中實(shí)現(xiàn)了LCD的顯示,并通過(guò)按鍵控制相應(yīng)的顯示為加1還是減1,按下SW0,數(shù)值加1,按下SW1,數(shù)值減1,LCD上顯示的初始值為000,加滿后為2
22、55。五、存在問(wèn)題和解決方法1. 在完成實(shí)驗(yàn)二時(shí),題目要求周期為1s,設(shè)計(jì)成流水燈的形式,其周期為1s代表的含義應(yīng)該是四個(gè)LED燈依次點(diǎn)亮的時(shí)間為1s,而不是每個(gè)燈點(diǎn)亮的間隔為1s,所以通過(guò)改變延時(shí)來(lái)解決此問(wèn)題,因此,在閱讀題目的時(shí)候需要仔細(xì)閱讀題目要求,弄清題意。2. 在完成實(shí)驗(yàn)三時(shí),LCD剛開(kāi)始的時(shí)候不能顯示,但是通過(guò)檢測(cè)LED的亮滅可以知道,程序已經(jīng)執(zhí)行,可以看出,LCD的顯示程序存在一些問(wèn)題,通過(guò)仔細(xì)研究,發(fā)現(xiàn)LCD顯示部分有所漏缺,修改后LCD正常顯示。實(shí)驗(yàn)三 簡(jiǎn)單點(diǎn)對(duì)點(diǎn)無(wú)線通信實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容1. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,分別用按鍵控制切換對(duì)方
23、對(duì)應(yīng)LED亮/滅狀態(tài)。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。2. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,其功能為:按下Coordinator的SW0,某變量X(初始值0)顯示在LCD上,同時(shí)將X發(fā)送給EndDevice,EndDevice收到該數(shù)據(jù)后進(jìn)行數(shù)據(jù)處理(加1),等待1秒后再將其發(fā)送給Coordinator,Coordinator收到后將該值賦予X并顯示在LCD上,同時(shí)再次發(fā)送給EndDevice,如此重復(fù)運(yùn)行。二、實(shí)驗(yàn)原理1. 獲得16位短地址的方法 Coordinat
24、or的16位短地址固定為0x0000,而EndDevice的16位短地址是由Coordinator動(dòng)態(tài)分配的。EndDevice可直接使用短地址0x0000與Coordinator通信,而Coordinator與EndDevice通信時(shí),Coordinator必須使用EndDevice的短地址。在應(yīng)用程序中,Coordinator獲得EndDevice短地址的方法比較簡(jiǎn)單,每當(dāng)有新的結(jié)點(diǎn)加入到網(wǎng)絡(luò)時(shí),Coordinator協(xié)議棧就會(huì)調(diào)用處理協(xié)議棧低層的回調(diào)函數(shù) JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *p
25、uStackEvent),參數(shù)puStackEvent是一個(gè)指向棧事件tuJZS_StackEvent類型的指針,通過(guò)該參數(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鍵值對(duì)和MSG消息幀兩種類型數(shù)據(jù)格式。KVP是ZigBee2004協(xié)議中規(guī)定的一種特殊的
26、數(shù)據(jù)傳輸機(jī)制,通過(guò)一種規(guī)定來(lái)標(biāo)準(zhǔn)化數(shù)據(jù)傳輸格式和內(nèi)容,主要用于傳輸較簡(jiǎn)單的變量值格式;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)一個(gè)結(jié)點(diǎn)收到來(lái)自其他結(jié)點(diǎn)的MSG幀時(shí),協(xié)議棧就會(huì)調(diào)用回調(diào)函數(shù)JZA_bAfMsgObject( ) 對(duì)接收的MSG幀進(jìn)行處理。在
27、數(shù)據(jù)收發(fā)過(guò)程中,發(fā)送和接收設(shè)備雙方都需要知道事件的數(shù)據(jù)格式,才能正確處理信息。 3. 創(chuàng)建和發(fā)送數(shù)據(jù)請(qǐng)求函數(shù)afdeDataRequest( ) 該函數(shù)屬于AFDE(AF Sub-layer Data Entity)類函數(shù),用來(lái)向網(wǎng)絡(luò)層發(fā)出數(shù)據(jù)發(fā)送的請(qǐng)求。 該函數(shù)的原型為: Stack_Status_e afdeDataRequest( APS_Addrmode_e eAddrMode, uint16 u16AddrDst, uint8 u8DstEP, uint8 u8SrcEP, uint16 u16ProfileId, uint8 u8ClusterId, AF_Frametype_e
28、eFrameType, uint8 u8TransCount, 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)地址的端口號(hào),范圍是0x01到0xF0。 u8SrcEP
29、:源地址的端口號(hào),范圍是0x01到0xF0。 u16Profileid:所采用的 profile ID。 u8ClusterId:所采用的 cluster ID。 eFrameType:使用的數(shù)據(jù)幀類型0x01=KVP,0x02=MSG。 u8TransCount:本次請(qǐng)求發(fā)送的數(shù)據(jù)事務(wù)的數(shù)量。取值范圍在0到0x0f。 pauTransactions:該參數(shù)是一個(gè)指向AF_Transaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著需要發(fā)送的數(shù)據(jù)。bTxOptions:指定發(fā)送方式,可以選擇下列的值,這些值可以進(jìn)行邏輯或。 u8DiscoverRoute:設(shè)定所采用的路由發(fā)現(xiàn)模式
30、。 u8RadiusCounter:數(shù)據(jù)發(fā)送的深度,即所發(fā)送數(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ù),用來(lái)處理來(lái)自其他結(jié)點(diǎn)發(fā)送來(lái)的MSG幀。 該函數(shù)的原型為: PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, uint8 u8SrcEP, uint8 u8LQI, uint8 u8DstEP, uint8 u8ClusterID, uint
31、8 *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:源端口號(hào),范圍是0x01到0xF0。 u8LQI:接收幀的鏈路質(zhì)量。 u8DstEP:目標(biāo)端口號(hào),范圍是0x01到0xF0。 *puTransactionInd,:該參數(shù)是一個(gè)指向AF_T
32、ransaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著接收的數(shù)據(jù)。 *puTransactionRsp:該參數(shù)是一個(gè)指向AF_Transaction_s結(jié)構(gòu)體類型的指針,在該結(jié)構(gòu)體類型的變量中,存放著response信息。 5. 簡(jiǎn)單設(shè)備描述函數(shù)afmeAddSimpleDesc( ) 該函數(shù)屬于AFME(AF Sub-layer Management Entity) 類函數(shù),在增加設(shè)備描述符函數(shù)vAddDesc(void)中調(diào)用,其功能是為一個(gè)endpoint增加一個(gè)簡(jiǎn)單描述符(simple descriptor)。如果一個(gè)endpoint上沒(méi)有正確定義的簡(jiǎn)單描述符,那么它
33、將不能正確地接收來(lái)自其他結(jié)點(diǎn)的數(shù)據(jù),通常簡(jiǎn)單描述符應(yīng)該在設(shè)備建立網(wǎng)絡(luò)成功或者加入網(wǎng)絡(luò)成功后添加。 三、軟件設(shè)計(jì)1. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,分別用按鍵控制切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。Coordinator:程序首先執(zhí)行AppColdStart( )函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,若啟動(dòng)成功,則硬件上的標(biāo)志位LED0滅,其次再判斷是否有新的結(jié)點(diǎn)加入,若有新結(jié)點(diǎn)加入,
34、硬件上得標(biāo)志位LED1滅;判斷是否有按鍵被按下,若按下了則調(diào)用vSendData()函數(shù)向enddevice發(fā)送一個(gè)數(shù)據(jù),在程序運(yùn)行過(guò)程中若接收到MSG信息,則調(diào)用vLedControl(0,bToggle)控制燈的亮滅。Coordinator主程序流程圖:Enddevice:程序首先執(zhí)行AppColdStart( )函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷是否加入網(wǎng)絡(luò)成功,若加入成功,則硬件上的標(biāo)志位LED0滅;判斷是否有按鍵被按下,若按下了則調(diào)用vSendData()函數(shù)向enddevice發(fā)送一個(gè)數(shù)據(jù)
35、,在程序運(yùn)行過(guò)程中若接收到MSG信息,則調(diào)用vLedControl(0,bToggle)控制燈的亮滅。主程序流程圖如下圖所示:Enddevice主程序流程圖:2. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,其功能為:按下Coordinator的SW0,某變量X(初始值0)顯示在LCD上,同時(shí)將X發(fā)送給EndDevice,EndDevice收到該數(shù)據(jù)后進(jìn)行數(shù)據(jù)處理(加1),等待1秒后再將其發(fā)送給Coordinator,Coordinator收到后將該值賦予X并顯示在LCD上,同時(shí)再次發(fā)送給EndDevice,如此重復(fù)運(yùn)行。Coordinator:程序首先執(zhí)行AppColdSt
36、art()函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷網(wǎng)絡(luò)是否啟動(dòng)成功,若啟動(dòng)成功,硬件上得標(biāo)志位LED1滅;判斷是否有按鍵被按下,若按下了,調(diào)用函數(shù)vSendData()向EndDevice發(fā)送x;在程序運(yùn)行過(guò)程中若接收到EndDevice發(fā)送的數(shù)據(jù),調(diào)用LED顯示,再調(diào)用函數(shù)vSendData()向EndDevice發(fā)送x。主程序流程圖如下圖所示:Coordinator主程序流程圖:Enddevice:程序首先執(zhí)行AppColdStart()函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化
37、系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷是否加入網(wǎng)絡(luò)成功,若加入成功,則硬件上的標(biāo)志位LED0滅;判斷若接收到Coordinator發(fā)送的數(shù)據(jù),將接收的數(shù)據(jù)加1,最后調(diào)用BOS時(shí)鐘周期性調(diào)用vAppTick函數(shù),函數(shù)中調(diào)用vSendData()向Coordinator發(fā)送x,這樣就能實(shí)現(xiàn)定時(shí)發(fā)送。主程序流程圖如下圖所示:Enddevice主程序流程圖:四、實(shí)驗(yàn)結(jié)果與分析1. 在實(shí)驗(yàn)一中分別按動(dòng)Coordinator的SW0SW3,在Enddevice上的LED0LED3能夠?qū)崿F(xiàn)相應(yīng)的亮滅,同樣地,分別按動(dòng)Enddevice上的SW0SW3,也能使得Coordinator上
38、相應(yīng)的LED0LED3亮滅??梢赃_(dá)到按鍵控制雙方的效果,符合題目要求,說(shuō)明程序設(shè)計(jì)正確。2. 在實(shí)驗(yàn)二中按動(dòng)Coordinator的SW0,可以看見(jiàn)LCD液晶顯示頻上數(shù)據(jù)從0開(kāi)始自加一,說(shuō)明Coordinator和Enddevice之間相互發(fā)送數(shù)據(jù)了,符合題目要求,說(shuō)明程序設(shè)計(jì)正確。五、存在問(wèn)題和解決方法1. 在下載完程序上電測(cè)試時(shí),發(fā)現(xiàn)Coordinator和Enddevice的LED0、LED1均不滅,那就說(shuō)明網(wǎng)絡(luò)建立沒(méi)有成功,不能實(shí)現(xiàn)相互間的通信,考慮到這有可能是信道干擾的問(wèn)題,和其他人的信道相沖突了。于是,我將信道改成了21,同時(shí)將網(wǎng)絡(luò)號(hào)也改掉了,重新進(jìn)行下載,上電后,測(cè)試燈均滅掉了,
39、說(shuō)明網(wǎng)絡(luò)建立成功,可以實(shí)現(xiàn)通信。2. 在實(shí)驗(yàn)一中,當(dāng)按下SW0是LED0亮?xí)r,必須按兩次SW1才能使LED1亮,先開(kāi)始以為是按鍵的問(wèn)題,可是后來(lái)發(fā)現(xiàn)自己程序中指定義了一個(gè)變量bToggle,所以只有當(dāng)LED0滅了后,那么按一下SW1則LED1就亮了,這是程序中需要改進(jìn)的地方。實(shí)驗(yàn)四 兩個(gè)EndDevice之間的無(wú)線通信實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容1. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,其功能為:Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址。按下EndDevice A的按鈕SW0發(fā)送廣播請(qǐng)求綁定信息,LED0閃爍,收到該信息的EndDevice B的LED0閃爍,按下其按鈕SW
40、0則返回綁定應(yīng)答信息,同時(shí)LED0處于點(diǎn)亮狀態(tài),EndDevice A收到應(yīng)答后LED0也處于點(diǎn)亮狀態(tài),表示雙方綁定成功。之后按動(dòng)每個(gè)EndDevice的按鈕SW2、SW3可分別切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。如果按下任何EndDevice的SW1則解除綁定,各EndDevice的LED0滅,且LED1閃爍3秒。2. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,其功能為:Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址及綁定的媒介。按動(dòng)EndDevice按鈕SW0,向Coordinator發(fā)送綁定請(qǐng)求信息,LED0閃爍10秒,Coordinator收到該信息后記錄其短地址并定時(shí)1
41、0秒,按動(dòng)另外一個(gè)EndDevice的按鈕SW0向Coordinator發(fā)送綁定應(yīng)答信息,LED0閃爍5秒,在有效定時(shí)時(shí)間10秒內(nèi)若Coordinator收到該應(yīng)答信號(hào),則記錄其短地址,分別將記錄的兩個(gè)短地址發(fā)送給兩個(gè)對(duì)應(yīng)EndDevice,兩個(gè)EndDevice收到短地址后分別點(diǎn)亮LED0(不再閃爍),若在規(guī)定時(shí)間內(nèi)沒(méi)有建立綁定關(guān)系,超時(shí)后滅LED0。如果按下任何EndDevice的SW1則解除綁定,各EndDevice的LED0滅,且LED1閃爍3秒。綁定狀態(tài)下按動(dòng)每個(gè)EndDevice的按鈕SW2、SW3可分別切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。二、實(shí)驗(yàn)原理1. 通過(guò)對(duì)方的MAC地址獲得它的1
42、6位短地址在基于Jennic ZigBee協(xié)議棧中,每個(gè)設(shè)備必須知道對(duì)方的16位短地址,才能進(jìn)行直接通信,而16位短地址是在EndDevice或Router加入網(wǎng)絡(luò)時(shí)由Coordinator動(dòng)態(tài)分配的。如果一個(gè)設(shè)備(請(qǐng)求者)知道另一個(gè)設(shè)備的MAC地址時(shí),則請(qǐng)求者可通過(guò)調(diào)用zdpNwkAddrReq( )函數(shù)廣播查尋與該MAC地址相匹配的結(jié)點(diǎn),當(dāng)匹配的結(jié)點(diǎn)收到該數(shù)據(jù)包則返回自己的短地址給請(qǐng)求者,請(qǐng)求者即可用該短地址與其進(jìn)行通信。2. 通過(guò)廣播請(qǐng)求對(duì)方綁定獲得它的16位短地址在使用afdeDataRequest( )函數(shù)發(fā)送數(shù)據(jù)包時(shí),將16位的目標(biāo)地址設(shè)置為0xffff,即可以廣播的形式將數(shù)據(jù)包發(fā)
43、送出去。一個(gè)設(shè)備(請(qǐng)求者)想獲取另一個(gè)設(shè)備的16位短地址的方法是:發(fā)送一個(gè)廣播請(qǐng)求綁定指令數(shù)據(jù)包,符合條件的結(jié)點(diǎn)(如判斷指令包內(nèi)容,按下按鈕等)發(fā)送應(yīng)答包(含自己的短地址)給請(qǐng)求者,請(qǐng)求者即可用該短地址與其進(jìn)行通信。3. 通過(guò)發(fā)送請(qǐng)求/應(yīng)答綁定信息給Coordinator獲得對(duì)方的16位短地址按動(dòng)EndDevice或Router按鈕,調(diào)用afdeDataRequest( )函數(shù)向Coordinator發(fā)送綁定請(qǐng)求信息,Coordinator收到該信息后記錄其短地址并定時(shí),按動(dòng)另外一個(gè)結(jié)點(diǎn)的按鈕使用afdeDataRequest( )函數(shù)向Coordinator發(fā)送綁定應(yīng)答信息,在有效定時(shí)時(shí)間內(nèi)
44、若Coordinator收到該應(yīng)答信號(hào),則記錄其短地址,分別將記錄的兩個(gè)段地址發(fā)送給兩個(gè)對(duì)應(yīng)結(jié)點(diǎn),兩個(gè)結(jié)點(diǎn)收到短地址后便可以相互直接通信。4高功率模式M02與M04高功率模塊使用時(shí),需要進(jìn)行高功率配置,一般在初始化階段設(shè)置。高功率模塊配置函數(shù)原型為:Void vAHI_HighPowerModuleEnable( bool_t bRFTXEn, Bool_t bRFRXEn);5. 網(wǎng)絡(luò)地址請(qǐng)求函數(shù)zdpNwkAddrReq() 在Coordinator與EndDevice實(shí)現(xiàn)的點(diǎn)對(duì)點(diǎn)實(shí)驗(yàn)介紹了Coordinator獲取16位短地址的方法,而對(duì)于EndDevice和Router,當(dāng)一個(gè)結(jié)點(diǎn)知道
45、另一個(gè)結(jié)點(diǎn)的MAC地址后,則可以通過(guò)網(wǎng)絡(luò)地址請(qǐng)求函數(shù)zdpNwkAddrReq( )以廣播的方式發(fā)送數(shù)據(jù)包,查找與該MAC地址相匹配的結(jié)點(diǎn)在網(wǎng)絡(luò)中的短地址。協(xié)議??赏ㄟ^(guò)調(diào)用JZA_vZdpResponse( )函數(shù)處理響應(yīng)消息。6. 網(wǎng)絡(luò)地址請(qǐng)求響應(yīng)函數(shù)JZA_vZdpResponse() JZA_vZdpResponse( )是一個(gè)協(xié)議棧調(diào)用應(yīng)用程序的函數(shù),當(dāng)一個(gè)結(jié)點(diǎn)通過(guò)zdpNwkAddrReq( )發(fā)送查找另一個(gè)結(jié)點(diǎn)的短地址后,匹配的結(jié)點(diǎn)發(fā)送的應(yīng)答消息可通過(guò)請(qǐng)求者的協(xié)議棧調(diào)用JZA_vZdpResponse( )處理。三、軟件設(shè)計(jì)1. 分別為Coordinator和EndDevice設(shè)計(jì)
46、一個(gè)程序,其功能為:Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址。按下EndDevice A的按鈕SW0發(fā)送廣播請(qǐng)求綁定信息,LED0閃爍,收到該信息的EndDevice B的LED0閃爍,按下其按鈕SW0則返回綁定應(yīng)答信息,同時(shí)LED0處于點(diǎn)亮狀態(tài),EndDevice A收到應(yīng)答后LED0也處于點(diǎn)亮狀態(tài),表示雙方綁定成功。之后按動(dòng)每個(gè)EndDevice的按鈕SW2、SW3可分別切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。如果按下任何EndDevice的SW1則解除綁定,各EndDevice的LED0滅,且LED1閃爍3秒。Coordinator:Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址,程序首先執(zhí)
47、行AppColdStart()函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷網(wǎng)絡(luò)是否啟動(dòng)成功,若啟動(dòng)成功,則硬件上的標(biāo)志位LED0滅。主程序流程圖如下圖所示:Coordinator主程序流程圖:EnddeviceA:程序首先執(zhí)行AppColdStart( )函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷網(wǎng)絡(luò)是否加入成功,若加入成功,則硬件上的標(biāo)志位LED0滅。判斷是否按下SW0鍵,若有按下,則調(diào)用vSendData()函數(shù)發(fā)送廣播請(qǐng)
48、求綁定信息;判斷是否收到應(yīng)答信息,若收到,則調(diào)用vLedControl(1,TRUE)控制LED0處于點(diǎn)亮狀態(tài),表示雙方綁定成功,并且獲取對(duì)方短地址,此時(shí)能夠與EnddeviceB進(jìn)行通信;然后就開(kāi)始讀取按鍵值,若有按鍵按下,則調(diào)用按鍵處理函數(shù)進(jìn)行按鍵處理;同時(shí)若收到目標(biāo)地址的MSG信息,則執(zhí)行對(duì)應(yīng)控制指令。主程序流程圖如下圖所示:EnddeviceA主程序流程圖:EnddeviceB:程序首先執(zhí)行AppColdStart()函數(shù),設(shè)置信道號(hào)和PAN ID,然后調(diào)用vInit()函數(shù),初始化系統(tǒng)、按鍵、LED燈和協(xié)議棧,并且啟動(dòng)BOS定時(shí)時(shí)鐘;其后判斷網(wǎng)絡(luò)是否加入網(wǎng)絡(luò)成功,若加入成功,則硬件上
49、的標(biāo)志位LED0滅。判斷若接收到廣播請(qǐng)求綁定信息,則獲取對(duì)方短地址,且EnddeviceB的LED0閃爍,若按下其SW0,則返回綁定應(yīng)答信息,同時(shí)調(diào)用vLedControl(1,TRUE)控制LED0處于點(diǎn)亮狀態(tài),并且調(diào)用vSendData(0)函數(shù)發(fā)送應(yīng)答信息,此時(shí)與EnddeviceA建立通信;若有按鍵按下,則讀取按鍵的值,若讀取成功則調(diào)用按鍵處理函數(shù)進(jìn)行按鍵處理;同時(shí)若收到目標(biāo)地址的MSG信息,則執(zhí)行對(duì)應(yīng)控制指令。主程序流程圖如下圖所示:EnddeviceB主程序流程圖:四、實(shí)驗(yàn)結(jié)果與分析1. 給電路板上電后,Coordinator負(fù)責(zé)建立網(wǎng)絡(luò)和分配短地址,且三方的網(wǎng)絡(luò)建立成功。然后按下
50、EndDeviceA的SW0向EndDeviceB發(fā)送廣播請(qǐng)求綁定信息,此時(shí)EndDevice A的LED0不斷地閃爍,收到該信息的EndDevice B的LED0也閃爍,在程序中我定義了他們兩方是一直閃爍的。當(dāng)按下EndDeviceB的SW0按鈕則返回綁定應(yīng)答信息,此時(shí)EndDeviceB通過(guò)其中的JZA_bAfMsgObject函數(shù)將EndDeviceA的地址記錄下來(lái),作為目標(biāo)地址,同時(shí)LED0處于點(diǎn)亮狀態(tài)。與此同時(shí)EndDevice A收到應(yīng)答后也同樣將EndDeviceB的地址作為目標(biāo)地址,同時(shí)LED0也處于點(diǎn)亮狀態(tài),表示雙方綁定成功。之后按動(dòng)每個(gè)EndDevice的按鈕SW2、SW3
51、可分別切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。如果按下任何EndDevice的SW1此時(shí)的目標(biāo)地址都為0,解除綁定,且LED1閃爍3秒,實(shí)驗(yàn)現(xiàn)象符合要求。五、存在問(wèn)題和解決方法1.在本次實(shí)驗(yàn)中,當(dāng)EndDeviceA發(fā)送信息后LED0 我設(shè)置了長(zhǎng)閃,但會(huì)出現(xiàn)永遠(yuǎn)閃爍的情況,即跳不出閃爍的循環(huán)子程序,針對(duì)這一問(wèn)題,我寫了兩個(gè)閃爍程序,同時(shí)設(shè)置了一個(gè)標(biāo)志位,使得n=1的時(shí)候才執(zhí)行閃爍程序,問(wèn)題得以解決。實(shí)驗(yàn)五 DIO中斷實(shí)驗(yàn)一、實(shí)驗(yàn)內(nèi)容1. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,運(yùn)用DIO中斷的方式分別用按鍵控制切換對(duì)方對(duì)應(yīng)LED亮/滅狀態(tài)。如Coordinator的SW3控制End
52、Device的LED3,EndDevice的SW0控制Coordinator的LED0等等。2. 分別為Coordinator和EndDevice設(shè)計(jì)一個(gè)程序,運(yùn)用DIO中斷的方式分別用DIO4、DIO5、DIO6、DIO7切換對(duì)方相應(yīng)LED亮/滅狀態(tài)。如Coordinator的DIO4控制EndDevice的LED0,EndDevice的DIO5控制Coordinator的LED1等等。二、實(shí)驗(yàn)原理1. vAHI_DioSetDirection( )函數(shù)該函數(shù)用來(lái)設(shè)置DIO引腳的方向(輸入或輸出),其函數(shù)原型和使用方法參見(jiàn)講義2。當(dāng)某個(gè)DIO作為外部終端源時(shí),則意味著該DIO引腳設(shè)置為輸入。
53、如果一個(gè)DIO引腳已安排給另一個(gè)外設(shè)且該外設(shè)已啟用,則該函數(shù)對(duì)該DIO引腳不產(chǎn)生影響。2. vAHI_DioInterruptEdge( )函數(shù)當(dāng)某個(gè)DIO作為輸入引腳時(shí),則用該函數(shù)設(shè)置中斷產(chǎn)生時(shí)是采用上升沿還是下降沿觸發(fā)。該函數(shù)的原型如下: void vAHI_DIOInterruptEdge ( uint32 u32Rising, uint32 u32Falling ); 各參數(shù)的具體含義描述如下: u32Rising:32位位掩碼,其位0至位20對(duì)應(yīng)于每一個(gè)DIO引腳。當(dāng)某一位為1時(shí),則意味著該位對(duì)應(yīng)的引腳在輸入信號(hào)的上升沿觸發(fā)中斷。u32Rising的位21至位31無(wú)定義,可設(shè)置為1或
54、0。u32Falling:32位位掩碼,其位0至位20對(duì)應(yīng)于每一個(gè)DIO引腳。當(dāng)某一位為1,則意味著該位對(duì)應(yīng)的引腳在輸入信號(hào)的下降沿觸發(fā)中斷。u32Rising的位21至位31無(wú)定義,可設(shè)置為1或0。該函數(shù)僅將u32Rising中為1的位對(duì)應(yīng)的引腳設(shè)置為上升沿觸發(fā)中斷,u32Falling中為1的位對(duì)應(yīng)的引腳設(shè)置為下降沿觸發(fā)中斷,沒(méi)有涉及到的引腳保持它原來(lái)的狀態(tài)。如果某一個(gè)引腳在u32Rising和u32Falling中都進(jìn)行了設(shè)置,則默認(rèn)為上升沿觸發(fā)。該函數(shù)僅對(duì)設(shè)置為輸入的DIO引腳有效。如果一個(gè)DIO引腳已安排給另一個(gè)外設(shè)且該外設(shè)已啟用,則該函數(shù)對(duì)該DIO引腳不產(chǎn)生影響。例如: vAHI_
55、DioSetDirection(0x000000FF, 0x00000000); vAHI_DioInterruptEdge (0x0000000F, 0x00000077); 函數(shù)vAHI_DioSetDirection設(shè)置DIO0、DIO1、DIO7等8個(gè)引腳方向?yàn)檩斎耄瘮?shù)vAHI_DIOInterruptEdge設(shè)置DIO0、DIO1、DIO2和DIO3等4個(gè)引腳為上升沿觸發(fā)中斷,DIO4、DIO5和DIO6等3個(gè)引腳為下降沿觸發(fā)中斷,DIO7引腳保持原狀態(tài)。3. vAHI_DioInterruptEnable()函數(shù)當(dāng)某個(gè)DIO作為輸入引腳時(shí),則該函數(shù)用來(lái)設(shè)置接收或屏蔽該引腳發(fā)來(lái)的中斷,及使能/屏蔽中斷。該函數(shù)的原型如下: void vAHI_DIOInterruptEnable (uint32 u32Enable, uint32 u32Disable); 各參數(shù)的具體含義描述如下: u32Enable:32位位掩碼,它的位0至位20對(duì)應(yīng)于每一個(gè)DIO引腳。當(dāng)某一位為1時(shí),則使能該位對(duì)應(yīng)的引腳發(fā)來(lái)的中斷。u32Enable的位21至位31無(wú)定義。 u32Disable:32位位掩碼,它的位0至位20對(duì)應(yīng)于每一個(gè)DIO引腳。當(dāng)某一位為1時(shí),則屏蔽該位對(duì)應(yīng)的引腳發(fā)來(lái)的中斷。u32Disable的位21至位31無(wú)定義。該函數(shù)僅使能u32Enable
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 32151.31-2024溫室氣體排放核算與報(bào)告要求第31部分:木材加工企業(yè)
- 2024藕塘承包與農(nóng)業(yè)產(chǎn)業(yè)化發(fā)展合作合同范本3篇
- 2024房租租賃合同補(bǔ)充協(xié)議
- 2019年7月國(guó)家開(kāi)放大學(xué)??啤陡叩葦?shù)學(xué)基礎(chǔ)》期末紙質(zhì)考試試題及答案
- 焦慮癥健康宣教
- 2024年解除婚姻關(guān)系后贍養(yǎng)費(fèi)協(xié)議
- 2024水電安裝勞務(wù)分包合同協(xié)議書-農(nóng)村飲水安全工程專用3篇
- 2024某電子商務(wù)公司與社交媒體平臺(tái)廣告投放合同
- 福建省南平市太平鎮(zhèn)中學(xué)高三數(shù)學(xué)理期末試卷含解析
- 2024洗滌服務(wù)綠色環(huán)保材料采購(gòu)合同書3篇
- 中小學(xué)生志愿服務(wù)記錄表、評(píng)定表
- 排洪溝工程設(shè)計(jì)說(shuō)明
- 常用法語(yǔ)財(cái)務(wù)詞匯
- (整理版高中英語(yǔ))杭高第一學(xué)期期末考試高一英語(yǔ)試卷
- 學(xué)校食堂生鮮肉(豬肉、牛肉、羊肉、雞鴨鵝肉)配送服務(wù)方案
- SMT工資方案(原創(chuàng))
- 關(guān)于礦棉裝飾吸聲板檢驗(yàn)報(bào)告加圖標(biāo)版
- 大紅色節(jié)word感謝信信紙背景模板
- 安全檢查匯報(bào)材料
- 2005年海南高考理科綜合真題及答案
- 機(jī)房巡檢記錄表.doc
評(píng)論
0/150
提交評(píng)論