直接上代码::::
这个代码是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;
}
如果调试出现问题,,或对以上程序有疑问请留言,,谢谢大家!!!