通信新技术综合训练.doc_第1页
通信新技术综合训练.doc_第2页
通信新技术综合训练.doc_第3页
通信新技术综合训练.doc_第4页
通信新技术综合训练.doc_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信新技术综合训练报告目 录实验一 GPIO及LCD使用2实验二 简单点对点无线通信19实验三 两个EndDevice之间的无线通信26实验四 DIO中断实验31实验五 定时器35实验六 串口UART39实验七 ADC及数据采集实验44实验八 休眠和掉电保护实验50心得体会5649通信新技术综合训练报告 实验三 简单点对点无线通信实验实验一 Jennic-WSN开发环境一、硬件平台 1. JN5139-Z01-MXX模块JN5139-Z01-MXX模块是基于JN5139芯片所开发的一系列表帖形式的模块产品,该系列模块集成了所有的射频组件和无线微控制器。这一系列的模块包含下列不同的型号(如图1-1所示): l JN5139-Z01-M00 内置陶瓷天线; l JN5139-Z01-M01 带有SMA天线连接接口; l JN5139-Z01-M02 带有功率放大器和SMA天线连接接口; l JN5139-Z01-M03 带有uFL天线连接接口; l JN5139-Z01-M04 带有功率放大器和uFL天线连接接口。图1-1 Jennic模块图2. JN5139最小系统及外围部件基于JN5139芯片所设计的最小系统如图1-2所示。SPISSZ与SPISSM连接,SPISWP接高电平,JN5139上电自动复位或按键复位,SPIMISO为编程控制端,与复位按键配合使用,经DIO6、DIO7实现程序BIN文件的下载。关于编程下载具体使用可参考相关说明文档:JN-UG-3007-Flash-Programmer-1v12.pdf。JN5139模块提供如下外围部件功能: l 5个主SPI选择口; l 2个UART串口; l 2个带捕获/比较功能的可编程定时器/计数器; l 2个可编程睡眠定时器和1个滴答定时器; l 两线串口(兼容SMbus和I2C); l 从SPI接口(与数据I/O共享); l 21个数据I/O口(与UART串口、定时器及SPI选择复用); l 4通道12位100kbps模数转换输入; l 2个11位数模转换输入; l 2个可编程模拟比较输入; l 内部温度传感及电压监控。二、软件平台 1. 建立开发环境在光盘中找到software文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司网站上获得该文件)并运行。在安装过程中,最简单的方法是按默认设置安装。图1-5为安装时出现的第一个界面,选择按钮Next,当图1-6所示的界面出现后,默认选择Cygwin,同样点击Next按钮。图1-5 Jennic SDK工具链安装界面图1-6 Jennic SDK工具链安装界面选择组件在下一个界面中(图1-7),选择需要将工具链安装的位置,可选择默认安装目录C:Jennic。如果需要,可以选择另一个驱动器,但必须保证目录是Jennic,例如:D:Jennic。然后,点击Next继续。当新的安装界面出现时,继续点击Next,直到安装完毕后,重新启动计算机。图1-7 Jennic SDK工具链安装界面选择安装路径接下来运行JN-SW-4030-SDK-Libraries-v1.5.exe安装程序,它包括了基于Jenie、ZigBee和IEEE 802.15.4协议的无线网络应用程序所用的SDK软件库。在安装过程中,最简单的方法是按默认设置安装。图1-8为安装Jennic SDK软件库时出现的第一个界面,选择按钮Next,直到出现图1-9所示的界面后,选择安装位置,默认的位置为C:Jenniccygwinjennic,该软件库应该与Jennic SDK工具链安装在同一个硬盘中。因此,如果SDK工具链安装在D盘,则SDK软件库就安装在D: Jenniccygwinjennic目录下,然后点击Next按钮。图1-8 Jennic SDK软件库安装界面 图1-9 Jennic SDK软件库安装界面选择安装路径当新的安装界面出现后,继续点击Next按钮,直到安装完毕。2. 新建一个工程在Jennic SDK v1.1环境下,能很好地支持JN51xx模块,下面涉及到以JN5139模块的实验都是在该版本下进行的。新建一个工程的步骤如下: 打开Code:Blocks软件,如图1-10所示。图1-10 Code:Blocks主界面单击Create a new project工具链或点击菜单项File-New-Project,出现图1-11所示的对话框。在该对话框中,有三种工程类型可供选择。选择Empty Project类型可创建一个空的工程;选择Jennic类型可创建一个Jennic无线传感器网络工程;选择Static Library类型可创建一个静态库文件。本课程有关Jennic的实验均选择Jennic类型。对于Jennic类型的工程,Code:Blocks自动生成相应的函数,用户可以利用各个API函数实现自己的应用。选择Jennic类型工程后单击Go按钮则出现图1-12所示对话框。在该对话框中填写工程名和工程所在路径。本实验以“test”为工程名,工程所在路径默认选择“JenniccygwinjennicSDKapplication”,然后,单击Next按钮进入下一步。图1-11 工程类型选择对话框图1-12 工程名和路径选择对话框选择编译器,这里选择默认值JN51xx Compiler,如图1-13所示,单击Next按钮,选择Jennic开发应用类型,它们分别为802.15.4Aplication、ZigBee Coordinator、ZigBee EndDevice、ZigBee Router、Jenie End Device、Jenie Coordinator和Jenie Router等七种应用类型,如图1-14所示。在本教程Jennic实验中,我们主要使用ZigBee Coordinator、ZigBee End Device和ZigBee Router三种类型的应用。这里选择ZigBee Coordinator,单击Next按钮进入选择目标板类型。选择目标板类型时选择DK2,如图1-15所示。图1-13 编译器选择对话框图1-14 Jennic开发应用类型选择对话框图1-15 目标板选择对话框单击Next按钮,选择无线微控制器类型,本实验使用的微控制器类型为JN5139R1,所以选择JN5139XR1选项,如图1-16所示。图1-16 无线微控制器类型选择对话框单击Finish按钮,进入新建工程界面,如图1-17所示,JN51xx_JZ_Coord.c为自动生成的源程序文件,它包括了程序入口函数AppColdStart( ),初始化协议栈函数以及协议栈调用应用程序的一些函数的说明,用户可以根据自己的需求编写相应的函数,或添加其他的c源程序。用户也可以直接将JN51xx_JZ_Coord.c文件从工程中去掉,而在工程中添加用户自己编写的c源程序。图1-17 新建工程界面三、编译和下载 编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子菜单或点击图标 建立可执行二进制代码文件。若工程编译(Build)成功,则可在C:JenniccygwinjennicSDKApplicationtestJN5139_ BuildRelease目录下生成test.bin文件。否则,出错信息会显示在信息窗口中,根据出错信息调试程序。Jennic JN51xx Flash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。Jennic JN51xx Flash可编程器的用户界面如图1-18所示,它可以将* .bin文件下载到目标板或模块中,下载步骤如下: (1) 用串口线连接PC机和目标板或模块。(2) 运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。(3) 将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。(4) 在图1-18所示的Flash可编程界面上点击Browse按钮(图中处)查找并选择要下载的目标文件。(5) 选择好目标文件后,点击Progrm按钮(图中处)开始下载。在下载的过程中会显示一个下载的进度条,如图1-19所示。当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。如果遇到错误,请尝试重新下载。(6) 成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。 图1-18 Jennic JN51xx Flash可编程器的用户界面图1-19 Jennic JN51xx Flash可编程器下载过程示意图图1-20 Jennic JN51xx Flash可编程器下载成功对话框注意:当需要下载程序时,一般在打开Flash可编程器后再给目标板或模块上电。下面简要说明Jennic JN51xx Flash可编程器用户界面中的常用的其他按钮和复选框。l Set Passkey按钮:为目标板设置加密值,使得下载的文件仅能由该目标板使用。l Refresh按钮:显示目标板的MAC地址。l 复选框Connect:设定PC机用指定的串口与设备相连。 实验二 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口和其他的外围接口共用关系2. LED使用LED驱动库文件提供了LED的控制方法,在LedControl.h中宏定义了相应功能函数。开发板中的LED驱动电路如图2-1所示:3. 按键使用按键驱动库文件提供了按键的控制方法,在Button.h中宏定义了相应功能函数。开发板中的按键驱动电路如图2-2所示:4. LCD使用LCD驱动库文件提供了液晶的驱动方法,在Lcd_JM12864_Driver.h中提供了相应功能的原型函数。开发板中的LCD串口SPI接口电路如图2-3所示:三、软件设计1. 2.3.四、实验结果与分析1. 分别按动按键LED0LED3,可以控制相应灯的亮灭状态。 分析:在程序中已经设定按键SW0SW3分别对应于LED0LED3,所以可以按动按键控制相应灯的亮灭。2. 网络建网成功后,LED0LED3周期性的闪烁,周期为1秒。 分析:程序中写入了LED依次加1并点亮,再经过延时程序,所以可以出现周期为1秒的闪烁。3. 按下按键SW0,LCD显示数据加1;按下按键SW1,LCD显示数据减1。分析:按动按键SW0和SW1时分别执行了一个自加1和自减1的函数,再经过LCD显示从而可以得出如上结果。五、存在问题和解决方法 做第二个实验时,发现LED不是以1秒为周期进行闪烁,后来改正了源程序中的延时设置,从而回复正常。在第三个实验中,一开始LCD不能显示数字,经检查发现少了对LCD的初始化以及起初的清除影子内存,后来添加了相应的程序,功能得以正常实现。实验三 简单点对点无线通信实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮/灭状态。如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的16位短地址固定为0x0000,而EndDevice的16位短地址是由Coordinator动态分配的。EndDevice可直接使用短地址0x0000与Coordinator通信,而Coordinator与EndDevice通信时,Coordinator必须使用EndDevice的短地址。在应用程序中,Coordinator获得EndDevice短地址的方法比较简单,每当有新的结点加入网络时,Coordinator协议栈会调用处理协议栈低层的回调函数 JZA_vStackEvent(teJZS_EventIdentifier eEventId, tuJZS_StackEvent *puStackEvent),参数puStackEvent是一个指向栈事件tuJZS_StackEvent类型的指针,通过该参数即可获得新加入结点的16位短地址。有关tuJZS_StackEvent类型的定义可参阅JN-RM-2014-ZigBeeAppDevAPI文档。 2. 数据格式ZigBee2004支持KVP键值对和MSG消息帧两种类型数据格式。KVP是ZigBee2004协议中规定的一种特殊的数据传输机制,通过一种规定来标准化数据传输格式和内容,主要用于传输较简单的变量值格式;MSG是ZigBee协议中规定的另一种数据传输机制,这种机制在数据传输格式和内容上并不做更多的规定,主要用于专用的数据流或文件数据等数据量较大的情况。由于在ZigBee2006及以后的版本中不再支持KVP格式的数据包,因此,在本实验中,仅使用MSG消息帧进行数据的传输。在Jennic ZigBee应用程序中,通常使用协议栈提供的afdeDataRequest( )函数发送数据帧。当一个结点收到来自其他结点的MSG帧时,协议栈就会调用回调函数JZA_bAfMsgObject( ) 对接收的MSG帧进行处理。在数据收发过程中,发送和接收设备双方都需要知道事件的数据格式,才能正确处理信息。在本实验中,传输的事件数据为一个8位无符号数,其值若等于2,则说明EndDevice向Coordinator发送一个数据包,Coordinator可从接收的数据包中获得EndDevice的16位短地址。 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 eFrameType,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:源地址的端口号,范围是0x01到0xF0。u16Profileid:所采用的 profile ID。u8ClusterId:所采用的 cluster ID。eFrameType:使用的数据帧类型0x01=KVP,0x02=MSG。u8TransCount:本次请求发送的数据事务的数量。取值范围在0到0x0f。pauTransactions:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着需要发送的数据bTxOptions:指定发送方式。 u8DiscoverRoute:设定所采用的路由发现模式。 u8RadiusCounter:数据发送的深度,即所发送数据包的最大转发次数,如果设置为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 *pu8ClusterIDRsp,AF_Transaction_s *puTransactionInd,AF_Transaction_s *puTransactionRsp)各形参描述如下: eAddrMode:该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据. u16AddrSrc:该参数是数据发送方的源短地址,地址范围为0x0000到0xFFFE。u8SrcEP:源端口号,范围是0x01到0xF0。u8LQI:接收帧的链路质量。u8DstEP:目标端口号,范围是0x01到0xF0。u8ClusterID:所采用的cluster ID。*pu8ClusterIDRsp:应答cluster ID指针。*puTransactionInd,:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着接收的数据。*puTransactionRsp:该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型5. 简单设备描述函数afmeAddSimpleDesc( ) 该函数属于AFME(AF Sub-layer Management Entity) 类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(simple descriptor)。如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。该函数的原型为: bool_t afmeAddSimpleDesc(uint8 u8Endpoint,uint16 u16ProfileID,uint16 u16DeviceID,uint8 u8DeviceVersion,uint8 u8Flags,uint8 u8InClusteCount,uint8 *pau8nClusterList,uint8 u8OutClusterCount,uint8 *pau8OutClusterList);各参数的具体含义描述如下: u8Endpoint:endpoint 序号(范围0x01到0xF0)。u16ProfileID:所使用的Profile ID (范围0到0xFFFF)。u16DeviceID:设备ID(范围0到0xFFFF)。u8DeviceVersion:设备版本(范围0到0xFF)。u8Flags:标志参数。bit 0:第0位,其值为1表示描述符为复杂描述符(complex descriptor)。bit 1:第1位,其值为1表示描述符为用户描述符(user descriptror)。bit 2、3: 保留。 u8InClusterCount:输入cluster数量。pau8InClusterList:指向输入cluster数组的指针。u8OutClusterCount:输出cluster数量。的变量中,存放着response信息。pau8OutClusterList:指向cluster数组的指针。三、软件设计1.2.四、实验结果与分析1. 分别按动Coordinator的按键SW0SW3,可以控制EndDevice的LED0LED3的亮灭状态。同样分别按动EndDevice的按键SW0SW3,可以控制Coordinator的LED0LED3的亮灭状态。2. 按下Coordinator的SW0,LCD上显示初始值0,每等待1S,LCD上显示的数值自动加1,且如此重复出现。分析:Coordinator建网成功,当EndDevice节点加入成功后,Coordinator通过JZA_vStackEvent( )函数中的 DstAddress = puStackEvent-sNewNodeEvent.u16ShortAddr;即可获取新加入节点的16位短地址,而EndDevice可直接使用短地址0x0000与Coordinator通信。再经过程序中对LED以及LCD的相关设置,从而实现了Coordinator与EndDevice相互之间的通信得出如上的结果。五、存在问题和解决方法编译下载成功后按动按键,Coordinator和EndDevice不能实现相互的控制,时而出现混乱的现象。后来经过检查发现使用的信道和其他同学使用是同一个信道,造成了干扰。从而出现了控制混乱的问题,后来改变了信道,实验现象得以正确。通信新技术综合训练报告 实验四 两个EndDevice之间的无线通信实验实验四 两个EndDevice之间的无线通信实验一、实验内容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秒。2. 分别为Coordinator和EndDevice设计一个程序,其功能为:Coordinator负责建立网络和分配短地址及绑定的媒介。按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。二、实验原理1. 通过对方的MAC地址获得它的16位短地址在基于Jennic ZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。如果一个设备(请求者)知道另一个设备的MAC地址时,则请求者可通过调用zdpNwkAddrReq( )函数广播查寻与该MAC地址相匹配的结点,当匹配的结点收到该数据包则返回自己的短地址给请求者,请求者即可用该短地址与其进行通信。2. 通过广播请求对方绑定获得它的16位短地址在使用afdeDataRequest( )函数发送数据包时,将16位的目标地址设置为0xffff,即可以广播的形式将数据包发送出去。一个设备(请求者)想获取另一个设备的16位短地址的方法是:发送一个广播请求绑定指令数据包,符合条件的结点(如判断指令包内容,按下按钮等)发送应答包(含自己的短地址)给请求者,请求者即可用该短地址与其进行通信。3. 通过发送请求/应答绑定信息给Coordinator获得对方的16位短地址按动EndDevice或Router按钮,调用afdeDataRequest( )函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest( )函数向Coordinator发送绑定应答信息,在有效定时时间内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。4. 高功率模式M02与M04高功率模块使用时,需要进行高功率配置,一般在初始化阶段设置。高功率模块配置函数的原型为: void vAHI_HighPowerModuleEnable (bool_t bRFTXEn,bool_t bRFRXEn ) bRFTXEn TRUE to enable high power module transmitte FALSE to disable high power module transmit BRFRXEn TRUE to enable high power module receiver FALSE to disable high power module receiver 5. 网络地址请求函数zdpNwkAddrReq( ) 在Coordinator与EndDevice实现的点对点实验介绍了Coordinator获取16位短地址的方法,而对于EndDevice和Router,当一个结点知道另一个结点的MAC地址后,则可以通过网络地址请求函数zdpNwkAddrReq( )以广播的方式发送数据包,查找与该MAC地址相匹配的结点在网络中的短地址。协议栈可通过调用JZA_vZdpResponse( )函数处理响应消息。该函数的原型为: void zdpNwkAddrReq(MAC_ExtAddr_s sExtAddr,REQUEST_TYPE eReqType,uint8 nStartIndex,APS_TXOPTIONS bTxOptions) 各参数的具体含义描述如下: sExtAddr:目标设备的64位IEEE地址。eReqType:请求类型,其值为下列之一: SINGLE_DEVICE_RESPONSE:指示仅仅获得目标设备的网络地址。EXTENDED_RESPONSE: 指示获得与目标设备相关的所有设备的网络地址。 nStartIndex:当请求类型为EXTENDED_RESPONSE时,该参数指示与该设备相关的设备地址列表的起始索引。bTxOptions:指定传输方式,可以选择下列的值,这些值可以进行逻辑或。 APS_TXOPTION_NONE:其值为0x00,表示没有任何选项。 SECURITY_ENABLE_TRANSMISSION:其值为0x01,表示使用安全传输。6. 网络地址请求响应函数JZA_vZdpResponse( ) JZA_vZdpResponse( )是一个协议栈调用应用程序的函数,当一个结点通过zdpNwkAddrReq( )发送查找另一个结点的短地址后,匹配的结点发送的应答消息可通过请求者的协议栈调用JZA_vZdpResponse( )处理。有关该函数的详细说明请参阅JN-RM-2014-ZigBeeAppDevAPI。该函数的原型为: PUBLIC void JZA_vZdpResponse(uint8 u8Type,uint8 u8LQI,uint8 *pu8Payload,uint8 u8PayloadLen) 各参数的具体含义描述如下: u8Type:ZDP响应的Cluster ID。u8LQI:接收到的帧的链路品质指数(LQI)。pu8Payload:是一个指针变量,指向响应的数据包。u8PayloadLen:响应数据包的长度。三、软件设计1.2. 四、实验结果与分析1. 按下EndDevice A的按钮SW0,LED0闪烁。 EndDevice B的LED0闪烁,按下其按钮SW0则 LED0处于点亮状态,同时EndDevice A的LED0也处于点亮状态。之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。2. 按动EndDevice按钮SW0,LED0闪烁10秒,按动另外一个EndDevice的按钮SW0,LED0闪烁5秒,在有效定时时间10秒内,两个EndDevice分别点亮LED0(不再闪烁),之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮/灭状态。如果按下任何EndDevice的SW1,则各EndDevice的LED0灭,且LED1闪烁3秒。五、存在问题和解决方法在做这个实验的时候,Coordinator和EndDevice总是不能建立起相互通信,经检查发现在Coordinator重新发送各自EndDevice的地址时产生错误,以及少添加了vAddDesc()这个函数,从而造成了结果的错误。后来重新修改了部分程序和添加相关函数,再次编译下载通电,得到了如上的正确结果。通信新技术综合训练报告 实验五 DIO中断实验实验五 DIO中断实验一、实验内容1. 分别为Coordinator和EndDevice设计一个程序,运用DIO中断的方式分别用按键控制切换对方对应LED亮/灭状态。如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0等等。2. 分别为Coordinator和EndDevice设计一个程序,运用DIO中断的方式分别用DIO4、DIO5、DIO6、DIO7切换对方相应LED亮/灭状态。如Coordinator的DIO4控制EndDevice的LED0,EndDevice的DIO5控制Coordinator的LED1等等。二、实验原理1. vAHI_DioSetDirection( )函数该函数用来设置DIO引脚的方向(输入或输出),其函数原型和使用方法参见讲义2。当某个DIO作为外部终端源时,则意味着该DIO引脚设置为输入。如果一个DIO引脚已安排给另一个外设且该外设已启用,则该函数对该DIO引脚不产生影响。2. vAHI_DioInterruptEdge( )函数当某个DIO作为输入引脚时,则用该函数设置中断产生时是采用上升沿还是下降沿触发。该函数的原型如下: void vAHI_DIOInterruptEdge ( uint32 u32Rising, uint32 u32Falling ); 各参数的具体含义描述如下:u32Rising:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1时,则意味着该位对应的引脚在输入信号的上升沿触发中断。u32Rising的位21至位31无定义,可设置为1或0。u32Falling:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1,则意味着该位对应的引脚在输入信号的下降沿触发中断。u32Rising的位21至位31无定义,可设置为1或0。该函数仅将u32Rising中为1的位对应的引脚设置为上升沿触发中断,u32Falling中为1的位对应的引脚设置为下降沿触发中断,没有涉及到的引脚保持它原来的状态。如果某一个引脚在u32Rising和u32Falling中都进行了设置,则默认为上升沿触发。该函数仅对设置为输入的DIO引脚有效。如果一个DIO引脚已安排给另一个外设且该外设已启用,则该函数对该DIO引脚不产生影响。 3. vAHI_DioInterruptEnable( ) 函数当某个DIO作为输入引脚时,则该函数用来设置接收或屏蔽该引脚发来的中断,及使能/屏蔽中断。该函数的原型如下: void vAHI_DIOInterruptEnable (uint32 u32Enable, uint32 u32Disable); 各参数的具体含义描述如下: u32Enable:32位位掩码,它的位0至位20对应于每一个DIO引脚。当某一位为1时,则使能该位对应的引脚发来的中断。u32Enable的位21至位31无定义。 u32Disable:32位位掩码,它的位0至位20对应于每一个DIO引脚。当某一位为1时,则屏蔽该位对应的引脚发来的中断。u32Disable的位21至位31无定义。4. JZA_vPeripheralEvent( )函数该函数在中断上下文时调用,即微处理器在执行中断处理程序的过程中调用,用于处理硬件中断。该函数的原型为: PUBLIC void JZA_vPeripheralEvent(uint32 u32Device, uint32 u32ItemBitmap); 各参数的具体含义描述如下: u32Device:产生中断的外围设备ID号,在802.15.4规范中被定义为枚举值。u32ItemBitmap:与u32Device相对应的外围设备中断源的位映射图,在802.15.4规范中被定义为枚举值。5. vAHI_DioSetPullup ( )函数当某个DIO作为输入输出引脚时,则用该函数设置相应引脚是否上拉。该函数的原型如下:void vAHI_DioSetPullup(uint32 u32On, uint32 u32Off);各参数的具体含义描述如下: u32On:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1时,则意味着该位对应的引脚被上拉。u32On的位21至位31无定义,可设置为1或0。u32Off:32位位掩码,其位0至位20对应于每一个DIO引脚。当某一位为1时,则意味着该位对应的引脚关闭上拉。u32Off的位21至位31无定义,可设置为1或0。三、软件设计1.2. 四、实验结果与分析1. 按动Coordinator的SW0,EndDevice的LED0亮,按动EndDevice的SW0,Coordinator的LED0亮。按动Coordinator的SW1,EndDevice的LED1亮,按动EndDevice的SW1,Coordinator的LED1亮。按动Coordinator的SW2,EndDevice的LED2亮,按动EndDevice的SW2,Coordinator的LED2亮。 按动Coordinator的SW3,EndDevice的LED3亮,按动EndDevice的SW3,Coordinator的LED3亮。 再次按动相应按键,对应的LED灭。2. 给Coordinator的DIO4口一个电平触发,EndDevice的LED0亮,给EndDevice的DIO4口一个电平触发,Coordinator的LED0亮。 给Coordinator的DIO5口一个电平触发,EndDevice的LED1亮,给EndDevice的DIO5口一个电平触发,Coordinator的LED1亮。 给Coordinator的DIO6口一个电平触发,EndDevice的LED2亮,给EndDevice的DIO6口一个电平触发,Coordinator的LED2亮。 给Coordinator的DIO7口一个电平触发,EndDevice的LED3亮,给EndDevice的DIO7口一个电平触发,Coordinator的LED3亮。再次给相应DIO口电平触发,对应的LED灭。 分析:Coordinator建网成功,EndDevice节点加入成功后,获得各自的短地址实现相互之间的通信。通过在程序中设置中断函数及相应的DIO口作为中断口,且对LED设定了相应的程序,从而实现了相应的灯的控制。五、存在问题和解决方法在第一个实验中,按动按键未出现如上的现象。经检查发现,按键SW0SW3和相应的DIO口是共用一个引脚的,后来从新进行了设置,实现了如上的功能。通信新技术综合训练报告 实验六 定时器实验实验六 定时器实验一、实验内容1. 设计一个程序,运用Timer1中断实现流水灯,周期1秒。2. 设计一个程序,初始化DIO16(LED0)为输入,运用Timer0 PWM输出控制LED0的亮灭状态,一个周期内亮2秒,灭1秒。二、实验原理1. vAHI_TimerEnable ( )函数该函数用来使能指定的定时器,并为该定时器设置参数。该函数的原型如下: void vAHI_TimerEnable ( uint8 u8Timer,uint8 u8Prescale,bool_t bIntRiseEnable,bool_t bIntPeriodEnable,bool_t bOutputEnable); 各参数的具体含义描述如下: u8Timer:定时器的标识,在JN5121/JN513x微控制器中有两个应用级定时器/计数器,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。u8Prescale:时钟的预分频值,它的最大值为16。分频后的频率为原频率的1/2u8Prescale。bIntRiseEnable:该参数值为TRUE时,当定时器的输出变为高电平时使能中断。bIntPeriodEnable:该参数值为TRUE时,当定时器的一个周期到且输出变为低电平时,使能中断。bOutputEnable:该参数值为TRUE时,使定时器的输出出现在与PWM相关的输出引脚上。Timer0 使用DIO8-10引脚,Timer1使用DIO11-13引脚。2. vAHI_TimerClockSelect ( )函数选择内部或外部时钟,当使用内部时钟时要设置输出门。该函数的原型如下: void vAHI_TimerClockSelect( uint8 u8Timer, bool_t bExternalClock, bool_t bGateControl); 各参数的具体含义描述如下: u8Timer:定时器的标识,与函数vAHI_TimerEnable()中的用法相同,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。bExternalClock:该参数值为TRUE,表示使用外部时钟;为FALSE,表示使用16MHz的内部时钟。bGateControl:该参数值为TRUE时,表示当定时器的门输入是高电平时,打开输出引为FALSE时,表示当定时器的门输入为低电平时,打开输出引脚。3. vAHI_TimerStartRepeat ( )函数设置重复定时器。该函数的原型如下: void vAHI_TimerStartRepeat( uint8 u8Timer, uint16 u16Hi, uint16 u16Lo);各参数的具体含义描述如下: u8Timer:定时器的标识,用E_AHI_TIMER_0和E_AHI_TIMER_1分别标识Time0和Timer1。u16Hi:该参数值表示在开始一个定时器之后,在定时器的输出变为高电平之前经历的时钟周期数。u16Lo:该参数值表示在开始一个定时器之后,在定时器的输出变为低电平之前经历的时钟周期数。即定时器有效时间内的时钟周期数。4. 停止定时对于设置了重复定时器,当需要停止定时时,则需要执行vAHI_TimerStop( )函数停止定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论