




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
物联网课程设计三实验内容(以下实验利用中软国际物联网WSN实验箱完成)1. 基础实验1.1 LED灯点亮及闪烁实验采用WSN实验箱协调器完成(输入时,不能对端口设低电平,必须为输出)协调器LED端的接口原理图如图3.1所示图3.1 LED原理图 其中LED1、LED2分别连接主芯片的P1_0、P1_1引脚,按照IAR环境搭建过程,搭建开发环境,在C文件里加入以下代码#include #define LED1 P1_0#define LED2 P1_1voidinit_io();voidinit_io() P1DIR |=0x03; void main()init_io(); LED1=0; LED2=0;while(1);完成LED灯的点亮完成LED灯的闪烁1.2串口通信实验注意:wsn串口调试驱动与网蜂网的不同将.C文件改成如下代码:#include #include #define uint unsigned int#define uchar unsigned char/定义控制灯的端口#define led1 P1_0#define led2 P1_1/函数声明void Delay(uint);voidinitUARTtest(void);voidUartTX_Send_String(char *Data,intlen);char Txdata80=物联网课程设计;/*函数功能 :延时*入口参数 :定性延时*返 回 值 :无*说 明 :*/void Delay(uint n)uchar i;while(n-) for(i=200;i0;i-); /*函数功能 :初始化串口1*入口参数 :无*返 回 值 :无*说 明 :57600-8-n-1*/voidinitUARTtest(void) CLKCONCMD &= 0x40; /晶振while(!(SLEEPSTA & 0x40); /等待晶振稳定 CLKCONCMD &= 0x47; /TICHSPD128分频,CLKSPD不分频 SLEEPCMD |= 0x04; /关闭不用的RC振荡器 PERCFG = 0x00;/位置1 P0口 P0SEL = 0x3c;/P0用作串口 P2DIR &= 0XC0; /P0优先作为串口0 U0CSR |= 0x80;/UART方式 U0GCR |= 10;/baud_e U0BAUD |= 216;/波特率设为57600 UTX0IF = 0;/*函数功能 :串口发送字符串函数*入口参数 : data:数据*len :数据长度*返 回 值 :无*说 明 :*/voidUartTX_Send_String(char *Data,intlen)int j;for(j=0;jlen;j+) U0DBUF = *Data+;while(UTX0IF = 0); UTX0IF = 0; /*函数功能 :主函数*入口参数 :无*返 回 值 :无*说 明 :无*/void main(void)uchar i;P1DIR = 0x03; /P1控制LEDled1 = 0;led2 = 1;/关LEDinitUARTtest();UartTX_Send_String(wsn209,29);UartTX_Send_String(n,1);for(i=0;i30;i+)Txdatai= ;strcpy(Txdata,wsn209n); /将UART0 TX test赋给Txdata;while(1)UartTX_Send_String(Txdata,sizeof(WSN209n); /串口发送数据 Delay(5000); /延时 led2=!led2;打开串口调试助手以57600波特率观察结果1.3通过串口控制实验/*/* WeBee团队 */* Zigbee学习例程 */*例程名称:串口通讯2 */*建立时间:2012/06/5 */*描述:例以abc#方式发送,#为结束符,返回abc。波特率:115200bps*/#include #include #define uint unsigned int#define uchar unsigned char/定义控制LED灯的端口#define LED1 P1_0/定义LED1为P10口控制#define LED2 P1_1/函数声明void Delayms(uintxms);/延时函数void InitLed(void);/初始化P1口void InitUart(); /初始化串口voidUart_Send_String(char *Data,intlen);charRxdata50;ucharRXTXflag = 1; char temp; uchardatanumber = 0;/*延时函数*/void Delayms(uintxms) /i=xms即延时i毫秒 (16M晶振时候大约数,32M需要修改,系统不修改默认使用内部16M)uinti,j;for(i=xms;i0;i-)for(j=587;j0;j-); /*/初始化程序*/voidInitLed(void) P1DIR |= 0x03; /P1_0、P1_1定义为输出 LED1 = 1; /LED灯熄灭 LED2 = 1; /* 串口初始化函数*/voidInitUart() CLKCONCMD &= 0x40; / 设置系统时钟源为 32MHZ晶振 while(CLKCONSTA & 0x40); / 等待晶振稳定 CLKCONCMD &= 0x47; / 设置系统主时钟频率为 32MHZ PERCFG = 0x00; /位置1 P0口 P0SEL = 0x3c; /P0_2,P0_3,P0_4,P0_5用作串口,第二功能 P2DIR &= 0XC0; /P0 优先作为UART0 ,优先级 U0CSR |= 0x80; /UART 方式 U0GCR |= 11; /U0GCR与U0BAUD配合 U0BAUD |= 216; / 波特率设为115200 UTX0IF = 0; /UART0 TX 中断标志初始置位1 (收发时候) U0CSR |= 0X40; /允许接收 IEN0 |= 0x84; / 开总中断,接收中断/* 串口发送字符串函数*/ voidUart_Send_String(char *Data,intlen) int j; for(j=0;jlen;j+) U0DBUF = *Data+; while(UTX0IF = 0); /发送完成标志位 UTX0IF = 0; /*/主函数*/void main(void)InitLed();/调用初始化函数InitUart();while(1) if(RXTXflag = 1) /接收状态 LED1=0; /接收状态指示if( temp != 0) if(temp!=#)&(datanumberhdr.event=CMD_SERIAL_MSG; /注册事件号CMD_SERIAL_MSG;pMsg-msg=(uint8*)(pMsg+1);/定位数据位置temp=MT_UartCalcFCS(uint8*)&pMsg-msg0,MT_RPC_FRAME_HDR_SZ+LEN_Token);if(temp=FSC_Token)/数据校验Osal_msg_send(App_TaskID,(byte*)pMsg);/把数据包发送到OSAL层,很重要elseosal_msg_deallocate(uint8*)pMsg);/清申请的内存空间State=SOP_STATE;/状态一周期完成串口从pc机接收到信息作如下处理:1. 接收接口数据,判断起始码是否为0xFE2. 得到数据包长度然后给数据包pMsg分配内存3. 给数据包pMsg装数据4. 打包成任务发给上层OSAL处理5. 释放数据包内存我们要做的是简化再简化,流程变成1. 接收到数据2. 判断长度然后给数据包pMsg分配内存3. 打包发送给上层OSAL待处理4. 释放内存voidMT_UartProcessZToolData ( uint8 port, uint8 event ) uint8 flag=0,i,j=0; /flag是判断有没有收到数据,j记录数据长度 uint8 buf128; /串口buffer最大缓冲默认是128,我们这里用128. (void)event; / Intentionally unreferenced parameter while (Hal_UART_RxBufLen(port) /检测串口数据是否接收完成 HalUARTRead (port,&bufj, 1); /把数据接收放到buf中 j+; /记录字符数 flag=1; /已经从串口接收到信息 if(flag=1) /已经从串口接收到信息 /* Allocate memory for the data */ /分配内存空间,为机构体内容+数据内容+1个记录长度的数据pMsg = (mtOSALSerialData_t *)osal_msg_allocate( sizeof( mtOSALSerialData_t )+j+1); /事件号用原来的CMD_SERIAL_MSGpMsg-hdr.event = CMD_SERIAL_MSG;pMsg-msg = (uint8*)(pMsg+1); / 把数据定位到结构体数据部分pMsg-msg 0= j; /给上层的数据第一个是长度 for(i=0;imsg i+1= bufi; osal_msg_send( App_TaskID, (byte *)pMsg ); /登记任务,发往上层 /* deallocate the msg */osal_msg_deallocate ( (uint8 *)pMsg ); /释放内存 从中可以看出,数据包中数据部分的格式是:datalen+data如何处理这个包的内容呢?因为串口初始化是在SampleApp中进行的,任务号也是SampleApp中的ID,所以当然是在SampleApp.c中进行了,在里面找到任务处理函数uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events );加入如下代码if ( events & SYS_EVENT_MSG ) MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID );while ( MSGpkt ) switch ( MSGpkt-hdr.event ) case CMD_SERIAL_MSG: /串口收到数据后由MT_UART层传递过来的数据SampleApp_SerialCMD(mtOSALSerialData_t *)MSGpkt);break;解释:串口接收到信息后,事件号CMD_SERIAL_MSG就会被登记,便进入case CMD_SERIAL_MSG:执行SampleApp_SerialCMD(mtOSALSerialData_t *)MSGpkt);该函数是自己完成,意思是把信息无线发送出去*/voidSampleApp_SerialCMD(mtOSALSerialData_t *cmdMsg) uint8 i,len,*str=NULL; /len有用数据长度str=cmdMsg-msg; /指向数据开头len=*str; /msg里的第1个字节代表后面的数据长度 /*打印出串口接收到的数据,用于提示*/f
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国照明行业出海国别机会洞察报告
- 安全试题分类及答案图片
- 游戏化教学在科学探究课程中的创新应用报告
- 2025年数字货币监管政策对金融监管机制的影响研究报告
- 周末安全提醒课件
- 周总理主题班会课件
- 走进民族英雄教育
- 助力冬奥班会课件
- 湖南省衡阳市耒阳市2025年八下英语期末学业水平测试模拟试题含答案
- 中国元素英文课件
- GB/T 37234-2018文件鉴定通用规范
- 健康减肥调脂降糖
- LaTeX科技排版课件
- 2023年河北交通投资集团有限公司招聘笔试题库及答案解析
- 反向传播算法课件
- 企业质量安全主体责任
- 南模自招试卷-2012年自主招生
- 数据仓库开发规范
- 固定资产报废申请单
- 小学美术人美五年级上册偶戏皮影研究课教案
- 工程结算审核定案表(模板)
评论
0/150
提交评论