CC2530判断字符串点亮LED

直接上代码::::

 

这个代码是MCU接收PC通过串口助手发送字符串来控制LED的亮灭状态。。

 

当PC发送Perea时LED点亮(我的LED高电平点亮)

当PC发送Statr时LED熄灭。

#include 
#include 

#define uint unsigned int
#define uchar unsigned char

//定义控制灯的端口
#define LED1   P1_0


void initUART0(void);

uchar Recdata[5];       //用于存放接收的字符,放在数组中一次性判断
uchar RXTXflag = 1;     //标志位(接收标志、判断标志)
uchar temp;             //存放临时缓存区的字符
uint  datanumber = 0;   //接收字符串的最大字符个数

/****************************************************************
串口(UART0)初始化函数:				
****************************************************************/
void initUART0(void)
{
    /*CLKCONCMD &= ~0x40;                           //设置系统时钟源为32MHZ晶振
    while(CLKCONSTA & 0x40);                      //等待晶振稳定
    CLKCONCMD &= ~0x47;*/                           //设置系统主时钟频率为32MHZ
    
    PERCFG = 0x00;			          //位置1 P0口
    P0SEL = 0x0c;				  //P0用作串口
    P2DIR &= ~0XC0;                               //P0优先作为UART0    
    
    U0CSR |= 0x80;				  //串口设置为UART方式
    U0GCR |= 8;				
    U0BAUD |= 59;				  //波特率设为9600
    UTX0IF = 1;                                   //UART0 TX中断标志初始置位1    
    
    U0CSR |= 0X40;				  //允许接收
    IEN0 |= 0x84;				 //开总中断,接收中断
}
/*****************************************
初始化LED IO口
*****************************************/
void Init_LED_IO(void)
{
    P1SEL&=~0x01;
    P1DIR |= 0x01;
    LED1 = 0;
}
/****************************************************************
主函数				
****************************************************************/
void main(void)
{	CLKCONCMD&=0x80;     //时钟频率为32MHz
        uchar i;             //清空命令
        Init_LED_IO();
	initUART0();
	while(1)
	{
          if(RXTXflag == 1)			 //接收状态
          {
            if( temp != 0)
            {
                //if((temp!='#')&&(datanumber<5))
              if(datanumber<5)
                {                                
                  Recdata[datanumber++] = temp;//每次将缓存区的字符赋到数组当中
                }
                else
                {
                  RXTXflag = 3;             //进入判断字符模式
                }
                if(datanumber == 5)RXTXflag = 3;
              temp  = 0;   //清除缓存区的内容
            }
          }
          if(RXTXflag == 3)  //判断字符串
          {
            if((Recdata[0]=='P')&&(Recdata[1]=='e')&&(Recdata[2]=='r')
               &&(Recdata[3]=='e')&&(Recdata[4]=='a'))
            {
                LED1 = 1;                     
            }
            if((Recdata[0]=='S')&&(Recdata[1]=='t')&&(Recdata[2]=='a')
               &&(Recdata[3]=='t')&&(Recdata[4]=='r'))
            {
                LED1 = 0;     
            }

            RXTXflag = 1;
            for(i=0;i<5;i++)Recdata[i]=' '; //清除刚才的命令
            datanumber = 0;                     //指针归0
          }
        }//while
}
#pragma vector = URX0_VECTOR
 __interrupt void UART0_ISR(void)
 {
 	URX0IF = 0;				//清中断标志
	temp = U0DBUF;
 }

如果调试出现问题,,或对以上程序有疑问请留言,,谢谢大家!!!

你可能感兴趣的:(CC2530)