第三次无线传感器网络实验

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南昌航空大学实验报告

二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

#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

for (j=0; j<1070; j++);

}

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

相关文档
最新文档