CC2530判断字符串点亮LED

2019-04-14 18:23发布

直接上代码::::

 

这个代码是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; }

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