CC2430串口收发数据
//cd wxl
//说明:本实验在成都无线龙提供的CC2430模块中调试通过。http://http://www.c51rf.com/
//cd wxl
/*****************************************
数据格式: 灯选择 开关 #
10# 关RED LED
11# 开RED LED
20# 关GREEN LED
21# 开GREEN LED
*****************************************/
#include <iocc2430.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char
#define FALSE 0
#define TURE 1
//定义控制灯的端口
#define led1 P1_0
#define led2 P1_1
void Delay(uint);
void initUARTtest(void);
uchar Recdata[3]="000";
uchar RTflag = 1;
uchar temp;
uint datanumber = 0;
uint stringlen;
/****************************************************************
*函数功能 :延时
*入口参数 :定性延时
*返 回 值 :无
*说 明 :
****************************************************************/
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++);
}
/****************************************************************
*函数功能 :初始化串口1
*入口参数 :无
*返 回 值 :无
*说 明 :57600-8-n-1
****************************************************************/
void initUARTtest(void)
{
CLKCON &= ~0x40; //晶振
while(!(SLEEP & 0x40)); //等待晶振稳定
CLKCON &= ~0x47; //TICHSPD128分频,CLKSPD不分频
SLEEP |= 0x04; //关闭不用的RC振荡器
PERCFG = 0x00; //位置1 P0口
P0SEL = 0x3c; //P0用作串口
U0CSR |= 0x80; //UART方式
U0GCR |= 10; //baud_e
U0BAUD |= 216; //波特率设为57600
UTX0IF = 1;
U0CSR |= 0X40; //允许接收
IEN0 |= 0x84; //开总中断,接收中断
}
/*****************************************
*函数功能 :初始化P1口为输出
*入口参数 :无
*返 回 值 :无
*说 明 :无
*****************************************/
void Init_LED_IO(void)
{
//P1 out
P1DIR |= 0x03; //P1控制LED
led1 = 1;
led2 = 1; //关LED
}
/****************************************************************
*函数功能 :主函数
*入口参数 :无
*返 回 值 :无
*说 明 :无
****************************************************************/
void main(void)
{
uchar ii;
Init_LED_IO();
initUARTtest();
while(1)
{
if(RTflag == 1) //接收
{
if( temp != 0)
{
if((temp!='#')&&(datanumber<3))
{ //’#‘被定义为结束字符
//最多能接收3个字符
Recdata[datanumber++] = temp;
}
else
{
RTflag = 3; //进入改变小灯的程序
}
if(datanumber == 3)RTflag = 3;
temp = 0;
}
}
if(RTflag == 3)
{
if(Recdata[0]=='1')
{
if(Recdata[1]=='0')led1 = 1; // 10# 关红色LED
else
led1 = 0; // 11# 开红色LED
}
if(Recdata[0]=='2')
{
if(Recdata[1]=='0')led2 = 1; // 20# 关绿色LED
else
led2 = 0; // 21# 开绿色LED
}
RTflag = 1;
for(ii=0;ii<3;ii++)Recdata[ii]=' '; //清除刚才的命令
datanumber = 0; //指针归位
}
}//while
}
/****************************************************************
*函数功能 :串口接收一个字符
*入口参数 : 无
*返 回 值 :无
*说 明 :接收完成后仍然允许接收
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; //清中断标志
temp = U0DBUF;
}
更多资料与技术讨论请联系:
上海无线龙通讯科技有限公司