1、物联网实验报告中南林业科技大学课程设计实验报告专业班级:2013级计算机科学与技术2班授课教师:张艳学生姓名:陆焕丽学生学号: 20134636实验一继电器闪烁一 实验目的:学会使用修改程序,使得继电器按要求闪烁。二 内容:修改以下程序,使得继电器的绿灯闪一下,红灯闪五下#include typedef unsigned int uint ;typedef unsigned char uchar;/定义控制灯的端口#define RLED P1_0 /定义LED1为P10口控制#define YLED P1_1 /定义LED2为P11口控制/函数声明void Delay(uint); /延时函
2、数void Initial(void); /初始化P0口/*/延时*/void Delay(uint n) uchar i; while(n-) for(i=200;i0;i-); /* 初始化程序*/void Initial(void) P1DIR |= 0x03; /P10、P11定义为输出 RLED = 1; YLED = 1; /LED灭/*/主函数*/void main(void) Initial(); /调用初始化函数 RLED = 0; /LED1 YLED = 0; /LED2 while(1) RLED = 0; YLED = 1; Delay(1000); RLED = 1
3、; YLED = 0; Delay(1000); 三 实验记录:修改好的程序如下: #include typedef unsigned int uint ;typedef unsigned char uchar;/定义控制灯的端口#define RLED P1_0 /定义LED1为P10口控制#define YLED P1_1 /定义LED2为P11口控制/函数声明void Delay(uint); /延时函数void Initial(void); /初始化P0口/*/延时*/void Delay(uint n) uchar i; while(n-) for(i=200;i0;i-); /*
4、初始化程序*/void Initial(void) P1DIR |= 0x03; /P10、P11定义为输出 RLED = 1; YLED = 1; /LED灭/*/主函数*/void main(void) uint i; Initial(); /调用初始化函数 RLED = 0; /LED1 YLED = 0; /LED2 while(1) RLED = 0; YLED = 1; Delay(1000); for(i=0;ihdr.event ) case AF_INCOMING_MSG_CMD: GenericApp_MessageMSGCB( MSGpkt ); break; defau
5、lt: break; osal_msg_deallocate( (uint8 *)MSGpkt ); MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( GenericApp_TaskID ); return (events SYS_EVENT_MSG); return 0;static void GenericApp_MessageMSGCB( afIncomingMSGPacket_t *pkt ) unsigned char buf10; switch ( pkt-clusterId ) case GENERICAPP_CLUSTERI
6、D: osal_memcpy(buf,pkt-cmd.Data,10); if( (buf10=C)|(buf1=h)|(buf5=S)|(buf9=i) HalLedBlink(HAL_LED_1,2,40,700); break; default: break; 上述代码实现的基本功能如下:第79行,将收到的数据拷贝到缓冲区buf中。第80行,判断接收到的数据是不是“ChinaSofti”,这里是选择性判断了4个字符。如果是则执行第82行,使LED红灯闪烁2次。注意:上述代码使用到了ZigBee协议栈提供的函数HalLedBlink(功能:使某个LED闪烁),直接使用即可。这里需要提醒读者
7、,使用协议栈进行应用程序开发时,如果协议栈已经提供了相应的函数,则只需要尽快掌握该函数的功能及使用方法即可,不需要另外实现该函数。由于我们的开发板硬件和TI的原厂开发板硬件有所不同,所以这里需要对相关的LED硬件初始化做一些调整。具体可分为以下两步:1.打开ZMain文件夹下的ZMain.c文件,找到整个协议栈的主函数main()函数,在85行(通过Tools-Options选项的Editor栏中设置show line numbers即可显示行号):HAL_BOARD_INIT();鼠标双击这个函数选定然后右击,选择跳转到函数定义处,具体如图4.7所示:2.还是在hal_board_cfg.h
8、这个文件中,我们将116行和123行的ACTIVE_HIGH改为ACTIVE_LOW,这是因为我们的LED灯是IO口低电平触发亮。通过以上两步,相关的LED函数就可以正常使用了。到此为止,协调器的编程已经基本结束,下面回忆一下上述代码所做的基本工作。(1)删除了协议栈中的GenericApp.c文件,然后添加了两个文件: Coordinator.c和Enddevice.c。(2)给出了Coordinator.c的代码,并给出了部分注释,其中 Coordinator.c文件中很多代码格式是固定的,读者只需要熟悉这些代码格式即可。在Workspace下面的下拉列表框中选择CoordinatorEB
9、,然后右键单击Enddevice.c,在弹出的下拉菜单中选择Options,如图4.8所示。图4.8 Options选项设置在弹出的对话框中,选择Exclude from build,如图4.9所示。图4.9 Exclude from build此时,Enddevice.c文件会呈灰白显示状态。同时可以打开Tools文件夹可以看到f8wEndevcfg和f8wRouter.cfg文件也是呈灰白显示状态,文件呈灰白显示状态说明该文件不参与编译,ZigBee协议栈正是使用这种方式实现对源文件编译的控制。f8w2530.xcl,f8wConfig.cfg,f8wCoord.cfg三个文件包含了节点的
10、配置信息,具体功能如下:(1)f8w2530.xcl-包含了CC2530单片机的链接控制指令(如定义堆栈大小、内存分配等),一般不需要改动。(2)f8wConfig.cfg-包含了信道选择,网络号等有关的链接命令。例如:下列代码定义了建立网络的信道默认为11,即从11信道上建立ZigBee无线网络,第59行定义了ZigBee无线网络的网络号。因此如果想从其他信道上建立zigbee网络和修改网络号,就可以在此修改。(3)f8wCoord.cfg-定义了设备类型前文讲到zigbee无线网络中的设备类型有协调器,路由器和终端节点。下述代码就定义了该设备具有协调器和路由器的功能。 下面讲解一下zigb
11、ee协议栈的编译以及下载。点击工具栏上的Make按钮或者点击Project下的Make,即可实现zigbee协议栈的编译。编译完成后,在窗口下方会自动弹出Message窗口,显示编译过程中的警告和出错信息。Message窗口如图4.10所示。图4.10 Message窗口最后,用CC2530仿真器将开发板和电脑连接起来,复位一下仿真器,然后选择工具栏上的Debug按钮或者点击Project下的Download and Debug,即可实现程序的下载。(2) 终端节点程序下面介绍一下终端节点的程序设计步骤。首先,在Workspace下面的下拉列表框中选择EndDeviceEB,然后右键单击Coo
12、rdinator.c文件,在弹出的下拉菜单中选择Options,在弹出的对话框中,选择Exclude from build,此时,Coordinator.c文件会呈灰白显示状态。在Enddevice.c文件中输入以下代码: #include OSAL.h#include AF.h#include ZDApp.h#include ZDObject.h#include ZDProfile.h#include GenericApp.h#include DebugTrace.h#if !defined( WIN32 ) #include OnBoard.h#endif#include hal_led.
13、h#include hal_key.h#include hal_uart.hconst cId_t GenericApp_ClusterListGENERICAPP_MAX_CLUSTERS = GENERICAPP_CLUSTERID;const SimpleDescriptionFormat_t GenericApp_SimpleDesc = GENERICAPP_ENDPOINT, / int Endpoint; GENERICAPP_PROFID, / uint16 AppProfId2; GENERICAPP_DEVICEID, / uint16 AppDeviceId2; GENE
14、RICAPP_DEVICE_VERSION, / int AppDevVer:4; GENERICAPP_FLAGS, / int AppFlags:4; GENERICAPP_MAX_CLUSTERS, / byte AppNumInClusters; (cId_t *)GenericApp_ClusterList, / byte *pAppInClusterList; GENERICAPP_MAX_CLUSTERS, / byte AppNumInClusters; (cId_t *)GenericApp_ClusterList / byte *pAppInClusterList;endPointDesc_t GenericApp_epDesc;byte GenericApp_TaskID; devStates_t GenericApp_NwkState;byte Generic
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1