版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、物联网课程设计.实验内容(以下实验利用中软国际物联网 WSN实验箱完成)1.基础实验i.ileD丁点亮及闪烁实验采用WSN实验箱协调器完成(输入时,不能对端口设低电平,必须为输 出)其中LED1 LED2分别连接主芯片的P1_0 P1_1引脚,按照IAR环境搭建过程,搭建开发环境,在C文件里加入以下代码#i nclude #defi neLED1 P1_0#defi ne LED2P1_1voidi nit_io();voidi ni t_io()P1DIR|=0x03;void main()in it_io();LED1=0;LED2=0;while(1);完成LED丁的点亮完成LED灯的闪
2、烁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= 物联网课程设计 ;/* * 函数功能 :延时* 入口参数 :定性
3、延时* 返 回 值 :无* 说 明 :*/ void Delay(uint n)uchar i; while(n-) for(i=200;i0;i-);/* *函数功能 :初始化串口 1* 入口参数 :无* 返 回 值 :无* 说 明 :57600-8-n-1* voidinitUARTtest(void)CLKCONCM&D= 0x40;/ 晶振while(!(SLEEPSTA & 0x40); CLKCONCM&D= 0x47; SLEEPCM|D= 0x04;/ 等待晶振稳定/TICHSPD128分频,CLKSP不分频 /关闭不用的RC振荡器PERCFG= 0x00;P0SEL= 0x3
4、c;P2DIR &= 0XC0;/位置1 P0 口/P0 用作串口/P0 优先作为串口 0U0CSR|= 0x80;U0GCR|= 10;U0BAUD|= 216;UTX0IF = 0;/UART方式/baud_e/ 波特率设为 57600/* 函数功能 :串口发送字符串函数* 入口参数 : data: 数据* len : 数据长度* 返 回 值 :无* 说 明 :*/ voidUartTX_Send_String(char *Data,intlen)int j;for(j=0;jlen;j+)U0DBUF= *Data+;while(UTX0IF = 0);UTX0IF = 0;*函数功能:
5、主函数* 入口参数:无* 返 回 值:无* 说 明:无void main(void)uchar i;/P1 控制 LED/ 关 LEDP1DIR = 0x03; led1 = 0; led2 = 1;initUARTtest();UartTX_Send_String(wsn209,29);UartTX_Send_String(n,1); for(i=0;i30;i+)Txdatai= ; strcpy(Txdata,wsn209n); / 将 UART0TX test 赋给 Txdata;while(1)UartTX_Send_String(Txdata,sizeof(WSN209n); /
6、串口发送数据 Delay(5000); / 延时 led2=!led2;打开串口调试助手以 57600 波特率观察结果1.3通过串口控制实验/*/* WeBee 团队 */*Zigbee 学习例程*/* 例程名称:串口通讯 2 */* 建立时间: 2012/06/5 */ /*描述:例以abc#方式发送,#为结束符,返回abc。波特率:115200bps*/#include #include #define uint unsigned int#define uchar unsignedchar/定义控制LED灯的端口#defineLED1P1_0/ 定义 LED1 为 P10 口控制#defi
7、neLED2P1_1/函数声明void Delayms(uintxms);void InitLed(void);void InitUart(); / 初始化串口 voidUart_Send_String(char*Data,intlen);charRxdata50; ucharRXTXflag= 1; char temp; uchardatanumber = 0;/* 延时函数*/ void Delayms(uintxms) /i=xms 即延时 i 毫秒 要修改,系统不修改默认使用内部 16M) uinti,j;for(i=xms;i0;i-) for(j=587;j0;j-);/ 延时函数
8、/初始化 P1 口(16M 晶振时候大约数, 32M 需/*/初始化程序*/ voidInitLed(void)P1DIR|= 0x03;/P 1 _0 、 P 1 _ 1定义为输出LED1=1;/LED 灯熄灭LED2=1;/* 串口初始化函数*/ voidInitUart()CLKCONCMD&= 0x40;/ 设置系统时钟源为 32MHZ 晶振 while(CLKCONST&A 0x40); / 等待晶振稳定 CLKCONCMD&= 0x47;/ 设置系统主时钟频率为 32MHZP0SEL= 0x3c;P2DIR&= 0XC0;P0_2,P0_3,P0_4,P0_5用作串口,第二功能/P
9、0 优先作为 UART0,优先级U0CSR|= 0x80;U0GCR|= 11;U0BAUD|= 216;UTX0IF= 0;U0CSR|= 0X40;IEN0|= 0x84;/UART 方式/UOGCR与 UOBAUD配合/ 波特率设为 115200收发时候)/UARTOTX 中断标志初始置位 1 / 允许接收/ 开总中断,接收中断/* 串口发送字符串函数*/ voidUart_Send_String(char*Data,intlen)int j;for(j=O;jlen;j+)UODBUF=*Data+;while(UTXOIF= 0);/发送完成标志位UTXOIF= O;/*/主函数*/
10、void main(void)InitLed();/调用初始化函数InitUart();while(1)if(RXTXflag=1) /接收状态LED1=O;/接收状态指示if( temp != O)if(temp!=#)&(datanumberhdr.eve nt=CMD_SERIAL_MSG;/注册事件号 CMD_SERIAL_MSG;pMsg-msg=(ui nt8*)(pMsg+1);/定位数据位置temp=MT_UartCalcFCS(ui nt8* )&pMsg msg0,MT_RPC_FRAME_HDR_SZ+LEN_Toke n);if(temp=FSC_Toke n)数 据校
11、验 _ /Osal_msg_send(App_TasklD,(byte*)pMsg)把数据包发送到 OSAL层,很重要 else 、osal_msg_deallocate(ui nt8*)pMsg);/清申请的内存空间State=SOP_STATE状态一周期完成 串口从 pc 机接收到信息作如下处理:1. 接收接口数据,判断起始码是否为 0xFE2. 得到数据包长度然后给数据包 pMsg 分配内存3. 给数据包 pMsg 装数据4. 打包成任务发给上层OSAL处理5. 释放数据包内存 我们要做的是简化再简化,流程变成1. 接收到数据2. 判断长度然后给数据包 pMsg 分配内存3. 打包发送给
12、上层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 parameterwhile (Hal_UART_RxBufLen(port)/)/ 检测串口数据是否接收完成HalUARTRead(port,&bufj, 1);/ 把数据接收放到 buf
13、 中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_S ERIAL _MSG;pMsg-msg = (uint8*)(pMsg+1);/ 把数据定位到结构体数据部分pMs
14、g-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
15、 SampleApp_ProcessEventu(int8 task_id, uint16 events ); 加入如下代码if ( events& SYS_EVENT_MS)GMSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SampleApp_TaskID);while ( MSGpkt)switch ( MSGpkt-hdr.event)case CMD_SERIAL_MSG: / 串口收到数据后由 MT_UART层传 递过来的数据SampleApp_SerialCMD(mtOSALSerialData*_)tMSGpkt); bre
16、ak;解释:串口接收到信息后,事件号 CMD_SERIAL_MS就会被登记,便进入case CMD_SERIAL_MS执行 SampleApp_SerialCMD(mtOSALSerialDatsQMSGpkt); 该函数是自己完成,意思是把信息无线发送出去*/ voidSampleApp_SerialCMD(mtOSALSerialData*_ctmdMsg)uint8 i,len,*str=NULL;/len 有用数据长度str=cmdMsg-msg;/指向数据开头len=*str;/msg 里的第 1 个字节代表后面的数据长度/* 打印出串口接收到的数据,用于提示 */for(i=1;ic
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南昆明安琪儿妇产医院招聘17人备考题库及答案详解参考
- 2026年温州榕园学校(温州大学附属学校) 面向全国引进教育人才3人备考题库含答案详解(达标题)
- 2026广东深圳市福田中学教育集团皇御苑实验学校招聘备考题库及答案详解一套
- 2026江西九江市德安县水利水电建筑工程公司招聘1人备考题库及1套完整答案详解
- 2026广东省科学院广州地理研究所财会实习生招聘1人备考题库含答案详解(夺分金卷)
- 2026江苏无锡市惠山区教育局招聘教师41人备考题库及完整答案详解
- 2026河南漯河市中心医院(高水平医院) 引进招聘12人备考题库及参考答案详解1套
- 2026广东河源市连平县城乡投资有限公司招聘7人备考题库含答案详解
- 龙岩市2026电子商务师初级职业技能测试卷(含答案)
- 夜间药店守夜工作制度
- 五年级下学期数学第三单元《长方体和正方体》
- 肿瘤学-肿瘤姑息治疗
- 江苏省南京市2024年高二上学期期中考试英语试题含解析
- DB32T3916-2020建筑地基基础检测规程
- 2024中国心衰器械白皮书-沙利文
- 中深层地热供热技术规范 井下换热
- 人事档案情况摘抄表
- 学生满意度测评 证明
- 基于ABAQUS的刹车盘热应力分析
- 项目任务活动挖掘有价值客户课时
- 2023学年完整公开课版横断面测量
评论
0/150
提交评论