第三次无线传感器网络实验
更新时间:2024-04-02 03:10:01 阅读量: 综合文库 文档下载
南昌航空大学实验报告
二O 一六 年 四 月 20 日
课程名称: 无线传感器网络 实验名称:CC2530 串口指令控制LED灯 班级: 姓名:
指导教师评定: 签名:
一、实验目的
1. 通过实验掌握CC2530 芯片串口配置与使用 2. 观察底板上RX、TX串口发送指示灯的变化
3. 接收串口发送过来的数据,通过数据内容分析控制LED
注:嵌入式开发中,当程序能跑起来后,串口是第一个要跑起来的设备,所有的工作状态,交互信息都会从串口输出。
二、实验内容
1. 查看数据手册,了解CC2530的串口功能,熟悉串口的相关配置寄存器; 2. 根据实验手册内容配置CC2530的串口相关寄存器,使用P0_2和P0_3的外设功能将其配置为串口方式,并设置波特率为115200后处理串口的中断,使其允许接收数据并产生中断; 3. 配置所需LED灯的I/O口;
4. 编写串口的初始化、发送数据以及中断处理函数;
5. 在程序入口函数中,设置系统时钟源和主频,初始化完毕后,进入while循环处理相应指令并控制LED灯。
三、实验相关电路图
图1
PL2303HX串口转换芯片电路原理图
P0_2、P0_3配置为外设功能时:P0_2为RX, P0_3为TX. USART0和USART1是串行通信接口,它们能够分别运行于异步UART模式或者同步SPI模式。两个USART具有同样的功能,可以设置在单独的I/O 引脚 。
四、实验过程
1. 串口的配置
1)配置IO,使用外部设备功能。此处配置P0_2和P0_3用作串口UART0。
2)配置相应串口的控制和状态寄存器。 3)配置串口工作的波特率。 波特率由下式给出:
F 是系统时钟频率,等于16 MHz RCOSC 或者32 MHz XOSC。
2. 中断的初始化
1)标志位清0;
2)处理串口的默认接收状态; 3)开启系统中断。
3. 使用串口调试助手对程序进行调试检验,注意发送的指令必须以字符串形式发送而不能以hex形式发送;
4. 源代码
#include
typedef unsigned char uchar; typedef unsigned int uint; #define UART0_RX 1 #define UART0_TX 2 #define CONTROL_LED 3 #define SIZE 4 #define ON 0 #define OFF 1 #define LED1 P1_0 #define LED2 P1_1 char RxBuf; char UartState; uchar count;
char RxData[SIZE]; //存储发送字符串 void DelayMS(uint msec) {
uint i,j;
for (i=0; i void InitLed(void) { P1DIR |= 0x03; //P1.0和P1.1定义为输出口 } void InitUart(void) { PERCFG = 0x00; //外设控制寄存器 USART 0的IO位置1 P0SEL = 0x0c; //P0_2,P0_3用作串口(外设功能) P2DIR &= ~0xC0; //P0优先作为UART0 U0CSR |= 0x80; //设置为UART方式 U0GCR |= 11; U0BAUD |= 216; //波特率设为115200 UTX0IF = 0; //UART0 TX中断标志初始置位0 U0CSR |= 0x40; //允许接收 IEN0 |= 0x84; //开总中断允许接收中断 } void UartSendString(char *Data, int len) { uint i; for(i=0; i U0DBUF = *Data++; while(UTX0IF == 0); UTX0IF = 0; } } #pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) { URX0IF = 0; // 清中断标志 RxBuf = U0DBUF; } void main(void) { CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振 while(CLKCONSTA & 0x40); //等待晶振稳定为32M CLKCONCMD &= ~0x47; //设置系统主时钟频率为32MHZ InitLed(); //设置LED灯相应的IO口 InitUart(); //串口初始化函数 UartState = UART0_RX; //串口0默认处于接收模式 memset(RxData, 0, SIZE); while(1) { if(UartState == UART0_RX) //接收状态 { if(RxBuf != 0) { if((RxBuf != '#')&&(count < 3))//以'#'为结束符 RxData[count++] = RxBuf; else { if(count >= 3) //判断数据合法性,防止溢出 { count = 0; //计数清0 memset(RxData, 0, SIZE);//清空接收缓冲 } else UartState = CONTROL_LED;//进入发送状态 } RxBuf = 0; } } if(UartState == CONTROL_LED) //控制LED灯 { //判断接收的数据合法性 if((RxData[0]=='d'||RxData[0]=='D')&&(RxData[1]=='1'||RxData[1]=='2')) { if(RxData[1]=='1') LED1 = ~LED1; //低电平点亮 else LED2 = ~LED2; } else if((RxData[0]=='a'||RxData[0]=='A')&&(RxData[1]=='0'||RxData[1]=='1')) { if(RxData[1]=='0') { LED1 = ON; LED2 = ON; } else { LED1 = OFF; LED2 = OFF; } } UartState = UART0_RX; count = 0; memset(RxData, 0, SIZE); //清空接收缓冲区 } } } 五、实验心得 本次实验主要是熟悉串口功能的使用,通过实验弄清了串口相关的寄存器及 配置方法,通过自己动手写代码配置寄存器加强了对串口功能的掌握,进一步熟悉了对于硬件编程的特点,即寄存器的配置,也巩固了对串口通信的理解和运用,还有一点是在调试程序过程中积累了经验,有助于后期对CC2530芯片编写程序和调试程序。
正在阅读:
第三次无线传感器网络实验04-02
假如我是校长作文400字07-13
二手房购房协议书05-12
河北省承德市2018 - 2019学年高一英语下学期第三次月考试题01-04
尔雅《诗经》导读 期末考试答案97分04-02
对新形势下地方高校招生宣传工作的若干思考03-11
本科人才培养方案修订调研报告11-25
《望岳》教学设计03-17
- 《江苏省环境水质(地表水)自动监测预警系统运行管理办法(试行)》
- 安乐死合法化辩论赛立论稿(浙大新生赛)
- 公共科目模拟试卷公务员考试资料
- 我国固定资产投资FAI对GDP的影响
- 大学生创新创业训练计划项目申请书大创项目申报表
- 完美版—单片机控制步进电机
- 2013资阳中考化学试题
- 18.两位数减一位数退位(397道)
- 工程量计算规则
- 二年级操行评语(下)
- 第3章 流程控制语句
- 浅基桥墩加固技术
- 课题研究的主要方法
- 5100软件说明书 - 图文
- 车间技术员年终总结
- 关于印发《中铁建工集团开展项目管理实验室活动方案》的通知
- 经典诵读结题报告
- 地下水动力学习题答案
- 2018年全国各地高考数学模拟试题平面解析几何试题汇编(含答案解
- 街道办事处主任2018年度述职述廉报告
- 传感器
- 无线
- 实验
- 网络