通信新技术实验报告.doc

上传人:仙人指路1688 文档编号:4142494 上传时间:2023-04-07 格式:DOC 页数:83 大小:2.16MB
返回 下载 相关 举报
通信新技术实验报告.doc_第1页
第1页 / 共83页
通信新技术实验报告.doc_第2页
第2页 / 共83页
通信新技术实验报告.doc_第3页
第3页 / 共83页
通信新技术实验报告.doc_第4页
第4页 / 共83页
通信新技术实验报告.doc_第5页
第5页 / 共83页
点击查看更多>>
资源描述

《通信新技术实验报告.doc》由会员分享,可在线阅读,更多相关《通信新技术实验报告.doc(83页珍藏版)》请在三一办公上搜索。

1、JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 通信新技术综合训练报告学院名称: 专 业: 班 级: 姓 名: 学 号: 指导老师: 2012年3月目 录实验一 Jennic-WSN开发环境1实验二 GPIO及LCD使用实验4实验三 简单点对点无线通信实验8实验四 两个EndDevice之间的无线通信实验14实验五 DIO中断实验18实验六 定时器实验23实验七 UART实验27实验八 ADC及数据采集实验32实验九 休眠和掉电保护实验38心得体会44附录45实验一 Jennic-WSN开发环境一、实验内容1. 熟悉基于JN5139芯片所开发的一系列开发板及

2、外围部件;2. 了解zigbee系统;3. 掌握软件的安装与调试;4. 熟悉常用API接口函数。二、实验原理1JN5139 最小系统及外围部件基于 JN5139 芯片所设计的最小系统。SPISSZ 与SPISSM 连接,SPISWP接高电平,JN5139 上电自动复位或按键复位,SPIMISO 为编程控制端,与复位按键配合使用,经DIO6、DIO7 实现程序BIN 文件的下载。JN5139 模块提供如下外围部件功能:5 个主SPI 选择口;2 个UART 串口; 2 个带捕获/比较功能的可编程定时器/计数器;2 个可编程睡眠定时器和1 个滴答定时器; 两线串口(兼容SMbus和I2C); 从S

3、PI 接口(与数据I/O 共享); 21 个数据I/O 口(与UART 串口、定时器及SPI 选择复用); 4 通道12 位100kbps 模数转换输入; 2 个11 位数模转换输入; 2 个可编程模拟比较输入; 内部温度传感及电压监控。2. 开发板基于JN5139芯片所设计的WSN开发板,其部件如下:U1: JN5139系列Zigbee模块; U2: 板载光照度传感器; U3: 板载温湿度一体传感器; J3: 外供电(5VDC)接口;Swith: 供电开关; J7: 编程与运行状态选择,左跳并给传感器板加电,则进入可编程状态,或者在加电的情况下,按住RESET按钮,左跳J7,然后放开RESE

4、T按钮,再右跳J7,也可进入可编程状态,退出可编程状态,只需要按一下RESET按钮即可; J8: Flash写保护跳选,编程与运行都跳选到RUN(右跳); DB9: RS232编程接口; UART0: 串口0; JP6: 模块所有管脚的引出排线; LCD: 液晶接口; Power: 电源指示灯; REST: 复位按键; LED3,LED2,LED1,LED0:可编程LED,分别对应DIO19、DIO18、DIO17、DIO16; SW3,SW2,SW1,SW0:可编程按键,分别对应DIO20、DIO11、DIO10、DIO9; GND: 地。 3. 软件的安装与调试(1)建立开发环境在光盘中找

5、到software文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司网站上获得该文件)并运行。在安装过程中,最简单的方法是按默认设置安装。(2)编写程序代码并进行下载与调试 编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子菜单或点击图标建立可执行二进制代码文件。 若工程编译(Build)成功,则可在C:JenniccygwinjennicSDKApplicationtestJN5139_ BuildRelease目录下生成test.bin文件。否则,出错信息会显示在信息窗口中,根据出错信息调试程序。Jennic

6、 JN51xx Flash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。Jennic JN51xx Flash可编程器的用户界面如图1-18所示,它可以将* .bin文件下载到目标板或模块中,下载步骤如下: a用串口线连接PC机和目标板或模块。b运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。c将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。d在图1-18所示的Flash可编程界面上点击Browse按钮(图中处)查找并选择要下

7、载的目标文件。e选择好目标文件后,点击Progrm按钮(图中处)开始下载。在下载的过程中会显示一个下载的进度条,如图1-19所示。当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。如果遇到错误,请尝试重新下载。f成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。4. 常用API接口函数介绍 (1)应用程序初始化函数如下:AppColdStart( ) 应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。该函数需要完成以下功能:1. 通过设置函数中的参数值来设置信道号(JZS_sConfig.u32

8、Channel)和PAN ID(JZS_sConfig.u16PanId); 2. 调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee 协议栈;3. 调用函数vInit( )对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;4. 调用bBosRun(TRUE)来启动操作系统BOS。用户可根据具体的应用设计该函数。AppWarmStart( ) 结点从内存供电的休眠模式唤醒的时候将进入这个函数。启动后所有的内存数据都没有丢失。如果设备不需要休眠唤醒功能,这个函数可以为空。用户可根据具体的应用设计该函数。一般情况下,该函数会调用AppColdStar

9、t( )重新启动设备。(2)应用程序调用协议栈的函数如下:JZS_u32InitSystem( ) 初始化Jennic ZigBee协议栈。JZS_vStartStack ( ) 设备将作为Coordinator、Router或者End Device启动。如果是Coordinator将启动网络,如果是Router或者End Device将加入网络。JZS_vStartNetwork ( ) 手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为 JZS_EVENT_NWK_START

10、ED JZS_EVENT_FAILED_TO_START_NETWORK 。vAppSaveContexts ( ) 保存网络参数以及用户的数据,如果你的应用是固定点的话,建议你进行网络参数的保存。u16AppGetContextSize ( ) 用来获取保存的网络参数以及用户数据的尺寸。vAppGetContexts ( ) 读取保存的网络参数的内容。(3)协议栈调用应用函数的函数如下:JZA_boAppStart( ) 让用户可以在协议栈启动前定义endpoint的descriptor,通常开发人员应该在这个函数中调用JZS_vStartStack启动协议栈。JZA_vStartEvent

11、( ) 协议栈将通过这个函数反馈网络层的一些网络事件,比如网络启动成功、结点加入成功或者数据发送完成等。JZA_vPeripheralEvent( ) 该函数主要用来处理外部的硬件中断,比如按钮、定时器、UART等。JZA_vAppEventHandler( ) BOS周期性地调用该函数处理硬件中断。用户可以利用它进行网络状态的判断和按钮的检查等,也可以在这个函数中,写入自己的应用程序。在设计该函数时,要尽可能地使其运行时间短,以便BOS调度其他活动事件。JZA_vAppDefineTasks( ) 该函数用于向BOS注册自己的用户任务,一般很少使用该函数。JZA_bAfMsgObject(

12、) 收到其他结点发送来的MSG帧的处理函数。 实验二 GPIO及LCD使用实验一、实验内容1运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮/灭状态。2设计一个程序,实现LED自动闪烁,周期为1秒。3设计一个程序,按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。二、实验原理1. GPIO 使用 Jennic 的模块具有 21 路通用的 GPIO,可以通过软件的方式进行设置,这些 GPIO口和其他的外围接口是共用的。其共用关系如表 2-1 所示: 表2-1:IO口和其他的外围接口共用关系 DIO引脚共用关系DIO0SPI从选择1 (输出)DIO1SPI从选

13、择2 (输出)DIO2SPI从选择3 (输出)DIO3SPI从选择4 (输出)DIO4- DIO7UART0DIO8- DIO10Timer0DIO11- DIO13Timer1DIO14- DIO15Serial interfaceDIO16IP data inDIO17- DIO20UART1常用函数:(1)对于GPIO的操作首先需要调用vAHI_DioSetDirection来进行GPIO输入输出方向的设置。该函数的原型如下:PUBLIC void vAHI_DioSetDirection(uint32 u32Inputs,uint32 u32Outputs);这里u32Inputs和u

14、32Outputs是设置GPIO输入和输出地mask码。(2)对于GPIO的输出操作比较简单,通过调用如下原型函数:PUBLIC void vAHI_DioSetOutput(uint32 u32On,uint32 u32Off);这里u32On和u32Off分别是设置GPIO输出高、低电平的掩码。(3)对于GPIO的输入操作,通常调用如下原型函数:PUBLIC uint32 u32AHI_DioReadInput(void);返回值对应每个输入DIO的高低电平。2LED使用LED 驱动库文件提供了 LED 的控制方法,在 LedControl.h 中宏定义了相应功能函数。对于LED的操作,首

15、先要调用初始化函数vLedInitFfd()初始化FFD开发板上的四个LED,然后调用函数vLedControl(LED,ON)控制相应LED点亮或熄灭。相应函数原型如下:PUBLIC void vLedInitFfd(void);PUBLIC void vLedControl(uint8 u8Led,bool_t bOn);3按键使用按键驱动库文件提供了按键的控制方法,在Button.h中宏定义了相应功能函数。对于按键的操作,首先要调用初始化函数vButtonInitFfd()初始化FFD开发板上的四个按键,然后调用函数u8ButtonReadFfd()读取相应按键的状态。相应函数原型如下:

16、PUBLIC void vButtonInitFfd(void);PUBLIC uint8 u8ButtonReadFfd(void);4LCD使用LCD驱动库文件库提供了液晶的驱动方法,在Lcd_JM12864_Driver.h中提供了相应功能的原型函数。5BOS定时器的使用为了消除按钮抖动对控制器的影响,本实验设置的一个读取按钮的标志变量NextReadStart,若其值为TRUE且有按下按钮SW的操作,则设置其为FALSE,并利用BOS的定时器函数bBosCreateTimer()定时,500ms后再次设置NextReadStart为真。通过关这种方法可有效地消除按钮抖动的影响。bBos

17、CreateTimer()函数是一个处理软件定时器的BOS API函数,调用该函数可由BOS创建一个软件定时器,该定时器要利用内部硬件滴答定时器(tick timer)来实现。当定时时间到,立即调用由bBosCreateTimer()指定的定时处理程序。6协议栈事件函数JZA_vStackEvent()是一个协议栈调用应用程序的函数(回调函数)。它的主要功能是处理来自于协议栈底层的各种事件,比如,APS层数据传输确认。用户通过该函数可以处理来自于AF和ZDP层的事件。该函数的原型为:PUBLIC void JZA_vStackEvent(teJZS_EventIdentifier eEvent

18、Id, tuJZS_StackEvent *puStackEvent);其中参数eEventId表示事件的类型,参数puStackEvent表示有关发生事件的补充信息。7周期性调用函数 网络启动后,每隔一定时间,BOS就会调用JZA_vAppEventHandler()函数一次,该函数专门来处理硬件中断,用户可以在该函数中添加用于网络状态判断、按钮检查等检测中断事件的程序代码,也可以添加用于发送数据的程序代码等。本实验利用该函数检查是否按下SW按钮。三、软件设计1运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮/灭状态。程序首先执行AppColdStart()函数,自动寻找最安

19、静的信道,然后调用vInit()函数,初始化系统、LED、按键和协议栈,并且启动BOS定时时钟,其后判断网络是否启动成功,若启动成功,则硬件上的标志位LED0灭,网络启动成功后就开始读取按键值,并执行相应的按键控制LED亮灭的子程序,主程序流程图如下图所示:2设计一个程序,实现LED自动闪烁,周期为1秒。 程序首先执行AppColdStart()函数,自动寻找最安静的信道,然后调用vInit()函数,初始化系统、LED、按键和协议栈,并且启动BOS定时时钟,其后判断网络是否启动成功,若启动成功,则硬件上的标志位LED0灭,网络启动成功后就调用vAppTickLED()函数,定时为1s,定时时间

20、一到,循环执行vAppTickLED()函数,通过定义一个变量LED,LED循环变化,利用vLedControl(LED,TRUE),实现LED的流水灯显示。主程序流程图如下图所示:3设计一个程序,按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。 程序首先执行AppColdStart()函数,自动寻找最安静的信道,然后调用vInit()函数,初始化系统、LED、按键和协议栈,并且启动BOS定时时钟,其后判断网络是否启动成功,若启动成功,则硬件上的标志位LED0灭,网络启动成功后调用JZA_vAppEventHandler()函数读取按键值,若有键按下,调用按键子程序vP

21、rocessSplashKeyPress( ),执行case语句:按键0,对液晶显示的数进行加1;按键1,对液晶显示的数进行减1。主程序流程图如下图所示:四、实验结果与分析1. 实验一中分别按下按键SW0SW3,相应的LED0LED3能够改变当前的状态,按动一下亮、按动一下灭,实现了按键控制LED灯的亮灭;2. 实验二中实现LED的自动闪烁,实际实验中实现的是4个LED灯依次闪烁,及以流水灯的形式显示,每两个灯之间的切换时间为1s;3. 实验三中实现了LCD的显示,并通过按键控制相应的显示为加1还是减1,按下SW0,数值加1,按下SW1,数值减1,LCD上显示的初始值为000,加满后为255。

22、五、存在问题和解决方法1. 在完成实验二时,题目要求周期为1s,设计成流水灯的形式,其周期为1s代表的含义应该是四个LED灯依次点亮的时间为1s,而不是每个灯点亮的间隔为1s,所以通过改变延时来解决此问题,因此,在阅读题目的时候需要仔细阅读题目要求,弄清题意。2. 在完成实验三时,LCD刚开始的时候不能显示,但是通过检测LED的亮灭可以知道,程序已经执行,可以看出,LCD的显示程序存在一些问题,通过仔细研究,发现LCD显示部分有所漏缺,修改后LCD正常显示。实验三 简单点对点无线通信实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应L

23、ED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。2. 分别为Coordinator和EndDevice设计一个程序,其功能为:按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。二、实验原理1. 获得16位短地址的方法 Coordinator的

24、16位短地址固定为0x0000,而EndDevice的16位短地址是由Coordinator动态分配的。EndDevice可直接使用短地址0x0000与Coordinator通信,而Coordinator与EndDevice通信时,Coordinator必须使用EndDevice的短地址。在应用程序中,Coordinator获得EndDevice短地址的方法比较简单,每当有新的结点加入到网络时,Coordinator协议栈就会调用处理协议栈低层的回调函数 JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *puSt

25、ackEvent),参数puStackEvent是一个指向栈事件tuJZS_StackEvent类型的指针,通过该参数即可获得新加入结点的16位短地址。下面的JZA_vStackEvent()函数的代码中给出了获取16位短地址DstAddress的具体方法。 if (eEventId = JZS_EVENT_NEW_NODE_HAS_JOINED) DstAddress = puStackEvent-sNewNodeEvent.u16ShortAddr; 2. 数据格式 ZigBee2004支持KVP键值对和MSG消息帧两种类型数据格式。KVP是ZigBee2004协议中规定的一种特殊的数据传

26、输机制,通过一种规定来标准化数据传输格式和内容,主要用于传输较简单的变量值格式;MSG是ZigBee协议中规定的另一种数据传输机制,这种机制在数据传输格式和内容上并不做更多的规定,主要用于专用的数据流或文件数据等数据量较大的情况。由于在ZigBee2006及以后的版本中不再支持KVP格式的数据包,因此,在本实验中,仅使用MSG消息帧进行数据的传输。 在Jennic ZigBee应用程序中,通常使用协议栈提供的afdeDataRequest( )函数发送数据帧。当一个结点收到来自其他结点的MSG帧时,协议栈就会调用回调函数JZA_bAfMsgObject( ) 对接收的MSG帧进行处理。在数据收

27、发过程中,发送和接收设备双方都需要知道事件的数据格式,才能正确处理信息。 3. 创建和发送数据请求函数afdeDataRequest( ) 该函数属于AFDE(AF Sub-layer Data Entity)类函数,用来向网络层发出数据发送的请求。 该函数的原型为: Stack_Status_e afdeDataRequest( APS_Addrmode_e eAddrMode, uint16 u16AddrDst, uint8 u8DstEP, uint8 u8SrcEP, uint16 u16ProfileId, uint8 u8ClusterId, AF_Frametype_e eFr

28、ameType, uint8 u8TransCount, AF_Transaction_s *pauTransactions, APS_TxOptions_e u8txOptions, NWK_DiscoverRoute_e eDiscoverRoute, uint8 u8RadiusCounter); 各形参描述如下: eAddrMode:该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据。 u16AddrDst:该参数是数据要发送的目标地址,地址范围为0x0000到0xFFFE。 u8DstEP:目标地址的端口号,范围是0x01到0xF0。 u8SrcEP:源地

29、址的端口号,范围是0x01到0xF0。 u16Profileid:所采用的 profile ID。 u8ClusterId:所采用的 cluster ID。 eFrameType:使用的数据帧类型0x01=KVP,0x02=MSG。 u8TransCount:本次请求发送的数据事务的数量。取值范围在0到0x0f。 pauTransactions:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着需要发送的数据。bTxOptions:指定发送方式,可以选择下列的值,这些值可以进行逻辑或。 u8DiscoverRoute:设定所采用的路由发现模式。 u

30、8RadiusCounter:数据发送的深度,即所发送数据包的最大转发次数,如果设置为0,协议栈将采用2倍的MaxDepth发送深度。 4. 收到MsgObject调用的函数JZA_bAfMsgObject ( ) 该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。 该函数的原型为: PUBLIC bool_t JZA_bAfMsgObject(APS_Addrmode_e eAddrMode, uint16 u16AddrSrc, uint8 u8SrcEP, uint8 u8LQI, uint8 u8DstEP, uint8 u8ClusterID, uint8 *

31、pu8ClusterIDRsp, AF_Transaction_s *puTransactionInd, AF_Transaction_s *puTransactionRsp) 各形参描述如下: eAddrMode:该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据. u16AddrSrc:该参数是数据发送方的源短地址,地址范围为0x0000到0xFFFE。 u8SrcEP:源端口号,范围是0x01到0xF0。 u8LQI:接收帧的链路质量。 u8DstEP:目标端口号,范围是0x01到0xF0。 *puTransactionInd,:该参数是一个指向AF_Tran

32、saction_s结构体类型的指针,在该结构体类型的变量中,存放着接收的数据。 *puTransactionRsp:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着response信息。 5. 简单设备描述函数afmeAddSimpleDesc( ) 该函数属于AFME(AF Sub-layer Management Entity) 类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(simple descriptor)。如果一个endpoint上没有正确定义的简单描述符,那么它将不能

33、正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。 三、软件设计1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。Coordinator:程序首先执行AppColdStart( )函数,设置信道号和PAN ID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,若启动成功,则硬件上的标志位LED0灭,其次再判断是否有新的结点加入,若有新结点加入,硬件上

34、得标志位LED1灭;判断是否有按键被按下,若按下了则调用vSendData()函数向enddevice发送一个数据,在程序运行过程中若接收到MSG信息,则调用vLedControl(0,bToggle)控制灯的亮灭。Coordinator主程序流程图:Enddevice:程序首先执行AppColdStart( )函数,设置信道号和PAN ID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,并且启动BOS定时时钟;其后判断是否加入网络成功,若加入成功,则硬件上的标志位LED0灭;判断是否有按键被按下,若按下了则调用vSendData()函数向enddevice发送一个数据,在程

35、序运行过程中若接收到MSG信息,则调用vLedControl(0,bToggle)控制灯的亮灭。主程序流程图如下图所示:Enddevice主程序流程图:2. 分别为Coordinator和EndDevice设计一个程序,其功能为:按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。Coordinator:程序首先执行AppColdStart

36、()函数,设置信道号和PAN ID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,并且启动BOS定时时钟;其后判断网络是否启动成功,若启动成功,硬件上得标志位LED1灭;判断是否有按键被按下,若按下了,调用函数vSendData()向EndDevice发送x;在程序运行过程中若接收到EndDevice发送的数据,调用LED显示,再调用函数vSendData()向EndDevice发送x。主程序流程图如下图所示:Coordinator主程序流程图:Enddevice:程序首先执行AppColdStart()函数,设置信道号和PAN ID,然后调用vInit()函数,初始化系统、

37、按键、LED灯和协议栈,并且启动BOS定时时钟;其后判断是否加入网络成功,若加入成功,则硬件上的标志位LED0灭;判断若接收到Coordinator发送的数据,将接收的数据加1,最后调用BOS时钟周期性调用vAppTick函数,函数中调用vSendData()向Coordinator发送x,这样就能实现定时发送。主程序流程图如下图所示:Enddevice主程序流程图:四、实验结果与分析1. 在实验一中分别按动Coordinator的SW0SW3,在Enddevice上的LED0LED3能够实现相应的亮灭,同样地,分别按动Enddevice上的SW0SW3,也能使得Coordinator上相应的

38、LED0LED3亮灭。可以达到按键控制双方的效果,符合题目要求,说明程序设计正确。2. 在实验二中按动Coordinator的SW0,可以看见LCD液晶显示频上数据从0开始自加一,说明Coordinator和Enddevice之间相互发送数据了,符合题目要求,说明程序设计正确。五、存在问题和解决方法1. 在下载完程序上电测试时,发现Coordinator和Enddevice的LED0、LED1均不灭,那就说明网络建立没有成功,不能实现相互间的通信,考虑到这有可能是信道干扰的问题,和其他人的信道相冲突了。于是,我将信道改成了21,同时将网络号也改掉了,重新进行下载,上电后,测试灯均灭掉了,说明网

39、络建立成功,可以实现通信。2. 在实验一中,当按下SW0是LED0亮时,必须按两次SW1才能使LED1亮,先开始以为是按键的问题,可是后来发现自己程序中指定义了一个变量bToggle,所以只有当LED0灭了后,那么按一下SW1则LED1就亮了,这是程序中需要改进的地方。实验四 两个EndDevice之间的无线通信实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址。按下EndDevice A的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDevice B的LED0闪烁,按下其按钮SW0则返

40、回绑定应答信息,同时LED0处于点亮状态,EndDevice A收到应答后LED0也处于点亮状态,表示双方绑定成功。之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。2. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址及绑定的媒介。按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,

41、按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。二、实验原理1. 通过对方的MAC地址获得它的16位短

42、地址在基于Jennic ZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。如果一个设备(请求者)知道另一个设备的MAC地址时,则请求者可通过调用zdpNwkAddrReq( )函数广播查寻与该MAC地址相匹配的结点,当匹配的结点收到该数据包则返回自己的短地址给请求者,请求者即可用该短地址与其进行通信。2. 通过广播请求对方绑定获得它的16位短地址在使用afdeDataRequest( )函数发送数据包时,将16位的目标地址设置为0xffff,即可以广播的形式将数据包发送出去

43、。一个设备(请求者)想获取另一个设备的16位短地址的方法是:发送一个广播请求绑定指令数据包,符合条件的结点(如判断指令包内容,按下按钮等)发送应答包(含自己的短地址)给请求者,请求者即可用该短地址与其进行通信。3. 通过发送请求/应答绑定信息给Coordinator获得对方的16位短地址按动EndDevice或Router按钮,调用afdeDataRequest( )函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest( )函数向Coordinator发送绑定应答信息,在有效定时时间内若Co

44、ordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。4高功率模式M02与M04高功率模块使用时,需要进行高功率配置,一般在初始化阶段设置。高功率模块配置函数原型为:Void vAHI_HighPowerModuleEnable( bool_t bRFTXEn, Bool_t bRFRXEn);5. 网络地址请求函数zdpNwkAddrReq() 在Coordinator与EndDevice实现的点对点实验介绍了Coordinator获取16位短地址的方法,而对于EndDevice和Router,当一个结点知道另一个

45、结点的MAC地址后,则可以通过网络地址请求函数zdpNwkAddrReq( )以广播的方式发送数据包,查找与该MAC地址相匹配的结点在网络中的短地址。协议栈可通过调用JZA_vZdpResponse( )函数处理响应消息。6. 网络地址请求响应函数JZA_vZdpResponse() JZA_vZdpResponse( )是一个协议栈调用应用程序的函数,当一个结点通过zdpNwkAddrReq( )发送查找另一个结点的短地址后,匹配的结点发送的应答消息可通过请求者的协议栈调用JZA_vZdpResponse( )处理。三、软件设计1. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址。按下EndDevice A的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDevice B的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDevice A收到应答后LED0也处于点亮状态,表示双方绑定成功。之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。Coordinator:Coordinat

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号