cc2530 串口实验--控制led灯
2014-02-08 13:06
357 查看
[cpp] view
plaincopy
/************************
* project : PC机向cc2530发送指令,控制led的亮灭
指令格式为“xy#”,其中x可以是B或Y,
代表着蓝灯或黄灯。y可以是0或1,0代表
关灯,1代表亮灯
* 时间 :2014年1月10
* 作者 :林少游
************************/
#include <ioCC2530.h>
#include <string.h>
#define YLED P1_0
#define BLED P1_1
#define LIGHTOPEN 1
#define LIGHTCLOSE 0
#define uint unsigned int
#define uchar unsigned char
char ReceiveData[3]; //接收到的数据
int DataNumber=0; //接收到的数据的长度
char temp; //接收到的临时字符
void Delay(uint n);
void Led_Init();
void Usart0_Init();
void Usart0_Send_String(char *Data,int len);
void Usart0_Receive_String();
void Led_Contral(char *Data,int len);
/************************
* @brief : LED初始化函数
************************/
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/************************
* @brief : LED初始化函数
************************/
void Led_Init()
{
P1DIR |= 0X03; //P1.0,P1.1设置为输出
YLED = LIGHTCLOSE;//黄灯灭
BLED = LIGHTCLOSE;//蓝灯灭
}
/************************
* @brief : 串口初始化函数
************************/
void Usart0_Init()
{
CLKCONCMD &= ~0X40; //系统时钟源选择32MHz
while(CLKCONSTA&0X40); //等待晶振稳定
CLKCONCMD &= ~0X47; //时钟速度设置为32MHz
PERCFG = 0X00; //P0设置为外设
P0SEL |= 0X3C; //P1.2,P1.3,P1.4,P1.5设置为串口引脚映射
P2DIR |= 0XC0; //P0中的USART0的优先级最高
U0CSR |= 0X80; //选择UART模式
U0GCR |= 9;
U0BAUD|= 59; //波特率选择为19200
U0CSR |= 0X40; //USART允许接收
IEN0 |= 0X84; //打开总中断开关和串口接收中断使能
URX0IF = 0; //串口接收中断标志位清零
UTX0IF = 0; //串口发送中断标志位清零
}
/************************
* @brief : Led灯控制函数
************************/
void Led_Contral(char *Data,int len)
{
if(len == 3 && Data[0] != '#' && Data[1] != '#' && Data[2] == '#')
{
switch(Data[0])
{
case 'B':
case 'b':
BLED = (Data[1] == '1');
Usart0_Send_String("蓝色灯被控制\n",sizeof("蓝色灯被控制\n"));
break;
case 'Y':
case 'y':
YLED = (Data[1] == '1');
Usart0_Send_String("黄色灯被控制\n",sizeof("黄色灯被控制\n"));
break;
default:
Usart0_Send_String("指令输入有误请重新输入\n",sizeof("指令输入有误请重新输入\n"));
}
}
else
Usart0_Send_String("指令输入有误,请重新输入\n",sizeof("指令输入有误,请重新输入\n"));
}
/*************************
* @brief : 串口发送函数
* param :Data - 要发送的数据
len - 要发送的数据的长度
*************************/
void Usart0_Send_String(char *Data,int len)
{
uint i;
for(i = 0; i < len; i++ )
{
U0DBUF = *Data++; //将数据字符一个一个的填充到U0DBUF中(8个位)
while(UTX0IF == 0); //等待数据发送完毕
UTX0IF = 0; //串口发送中断标志位清零
}
}
/*************************
* @brief : 串口数据接收
*************************/
void Usart0_Receive_String()
{
if(temp != 0) //接收到数据
{
if(temp != '#')
{
ReceiveData[DataNumber++] = temp;
}
else
{
ReceiveData[DataNumber++] = temp;
Led_Contral(ReceiveData,DataNumber); //Led灯控制
DataNumber = 0;//重新计数
}
if(DataNumber == 3)
{
Led_Contral(ReceiveData,DataNumber); //Led灯控制
DataNumber = 0;//重新计数
}
temp = 0;
}
}
/*************************
* @brief : 主函数
*************************/
main()
{
Led_Init();
Usart0_Init();
while(1);
}
/*************************
* @brief : 中断服务程序--串口数据接收
*************************/
#pragma vector = URX0_VECTOR
__interrupt void URX0_ISR(void)
{
URX0IF = 0; //串口接收中断清零,准备下一次的数据接收
temp = U0DBUF; //将缓冲器中的数据保存到temp中
Usart0_Receive_String();//接收并保存数据
}
plaincopy
/************************
* project : PC机向cc2530发送指令,控制led的亮灭
指令格式为“xy#”,其中x可以是B或Y,
代表着蓝灯或黄灯。y可以是0或1,0代表
关灯,1代表亮灯
* 时间 :2014年1月10
* 作者 :林少游
************************/
#include <ioCC2530.h>
#include <string.h>
#define YLED P1_0
#define BLED P1_1
#define LIGHTOPEN 1
#define LIGHTCLOSE 0
#define uint unsigned int
#define uchar unsigned char
char ReceiveData[3]; //接收到的数据
int DataNumber=0; //接收到的数据的长度
char temp; //接收到的临时字符
void Delay(uint n);
void Led_Init();
void Usart0_Init();
void Usart0_Send_String(char *Data,int len);
void Usart0_Receive_String();
void Led_Contral(char *Data,int len);
/************************
* @brief : LED初始化函数
************************/
void Delay(uint n)
{
uint i;
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
for(i=0;i<n;i++);
}
/************************
* @brief : LED初始化函数
************************/
void Led_Init()
{
P1DIR |= 0X03; //P1.0,P1.1设置为输出
YLED = LIGHTCLOSE;//黄灯灭
BLED = LIGHTCLOSE;//蓝灯灭
}
/************************
* @brief : 串口初始化函数
************************/
void Usart0_Init()
{
CLKCONCMD &= ~0X40; //系统时钟源选择32MHz
while(CLKCONSTA&0X40); //等待晶振稳定
CLKCONCMD &= ~0X47; //时钟速度设置为32MHz
PERCFG = 0X00; //P0设置为外设
P0SEL |= 0X3C; //P1.2,P1.3,P1.4,P1.5设置为串口引脚映射
P2DIR |= 0XC0; //P0中的USART0的优先级最高
U0CSR |= 0X80; //选择UART模式
U0GCR |= 9;
U0BAUD|= 59; //波特率选择为19200
U0CSR |= 0X40; //USART允许接收
IEN0 |= 0X84; //打开总中断开关和串口接收中断使能
URX0IF = 0; //串口接收中断标志位清零
UTX0IF = 0; //串口发送中断标志位清零
}
/************************
* @brief : Led灯控制函数
************************/
void Led_Contral(char *Data,int len)
{
if(len == 3 && Data[0] != '#' && Data[1] != '#' && Data[2] == '#')
{
switch(Data[0])
{
case 'B':
case 'b':
BLED = (Data[1] == '1');
Usart0_Send_String("蓝色灯被控制\n",sizeof("蓝色灯被控制\n"));
break;
case 'Y':
case 'y':
YLED = (Data[1] == '1');
Usart0_Send_String("黄色灯被控制\n",sizeof("黄色灯被控制\n"));
break;
default:
Usart0_Send_String("指令输入有误请重新输入\n",sizeof("指令输入有误请重新输入\n"));
}
}
else
Usart0_Send_String("指令输入有误,请重新输入\n",sizeof("指令输入有误,请重新输入\n"));
}
/*************************
* @brief : 串口发送函数
* param :Data - 要发送的数据
len - 要发送的数据的长度
*************************/
void Usart0_Send_String(char *Data,int len)
{
uint i;
for(i = 0; i < len; i++ )
{
U0DBUF = *Data++; //将数据字符一个一个的填充到U0DBUF中(8个位)
while(UTX0IF == 0); //等待数据发送完毕
UTX0IF = 0; //串口发送中断标志位清零
}
}
/*************************
* @brief : 串口数据接收
*************************/
void Usart0_Receive_String()
{
if(temp != 0) //接收到数据
{
if(temp != '#')
{
ReceiveData[DataNumber++] = temp;
}
else
{
ReceiveData[DataNumber++] = temp;
Led_Contral(ReceiveData,DataNumber); //Led灯控制
DataNumber = 0;//重新计数
}
if(DataNumber == 3)
{
Led_Contral(ReceiveData,DataNumber); //Led灯控制
DataNumber = 0;//重新计数
}
temp = 0;
}
}
/*************************
* @brief : 主函数
*************************/
main()
{
Led_Init();
Usart0_Init();
while(1);
}
/*************************
* @brief : 中断服务程序--串口数据接收
*************************/
#pragma vector = URX0_VECTOR
__interrupt void URX0_ISR(void)
{
URX0IF = 0; //串口接收中断清零,准备下一次的数据接收
temp = U0DBUF; //将缓冲器中的数据保存到temp中
Usart0_Receive_String();//接收并保存数据
}
相关文章推荐
- CC2530基础实验之串口控制LED灯
- cc2530 串口实验--控制led灯
- CC2530学习路线-基础实验-GPIO 控制LED灯亮灭(1)
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
- CC2530基础实验之采集光照模拟量控制LED状态
- 第11章 CC2530串口通讯-串口控制LED
- CC2530学习路线-基础实验-定时器控制LED灯亮灭(3)
- cc2530实验小项目-循环控制LED灯 (基于ZigBee协议)
- 嵌入式成长轨迹51 【Zigbee项目】【CC2430基础实验】【在PC用串口控制LED】
- zigbee协议栈应用(三)无线收发控制LED与串口使用
- [ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭
- 02-ZYNQ学习(逻辑篇)之FPGA LED控制实验
- JTAG_UART控制LED实验(转帖)
- BeagleBone Black板第四课:简单LED控制实验
- 上位机串口控制FPGA开发板LED
- 【iCore1S 双核心板_ARM】例程四:USART通信实验——通过命令控制LED
- 【51单片机实验】INT0中断控制LED
- CC2530--串口实验的回显
- 实验1:small rtos51-------led控制
- 基于Arduino+LabVIEW的串口控制LED亮灭