你这里问题有; 第一:不能直接判断SBUF寄存器里面的数据 第二:你得确定串口来的数据是1.2.3,或者是ASCII码值 void main() { u8 receiveData; receiveData=SBUF; UsartInit(); switch(receiveData) { case(1): //可能是ASSCII码0X31 display() ;break; case(2): //可能是ASSCII码0X32 display1() ;break; case(3): //可能是ASSCII码0X33 display2() ;break; } while(1); } |
串口助手输入的“数字”其实是字符,并且有对应的ASCII码值,你把case里的123当做字符用单引号括起来就可以了,或者使用ASCII值 |
你把switch放到中断看看,感觉是sbuf的问题 |
sbit led=P2^0; //D1 sbit led1=P2^1; //D1 sbit led2=P2^2; //D1 void delay(u16 i) { while(i--); } void display() { while(1) { led=0; delay(50000); //大约延时450ms led=1; delay(50000); //大约延时450ms } } void display1() { while(1) { led1=0; delay(50000); //大约延时450ms led1=1; delay(50000); //大约延时450ms } } void display2() { while(1) { led2=0; delay(50000); //大约延时450ms led2=1; delay(50000); //大约延时450ms } } void UsartInit() { SCON=0X50; //设置为工作方式1 TMOD=0X20; //设置计数器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //计数器初始值设置,注意波特率是4800的 TL1=0XF3; ES=1; //打开接收中断 EA=1; //打开总中断 TR1=1; //打开计数器 } void main() { UsartInit(); switch(SBUF) { case(1): display() ;break; case(2): display1() ;break; case(3): display2() ;break; } while(1); } void Usart() interrupt 4 { u8 receiveData; receiveData=SBUF;//出去接收到的数据 RI = 0;//清除接收中断标志位 SBUF=receiveData;//将接收到的数据放入到发送寄存器 while(!TI); //等待发送数据完成 TI=0; //清除发送完成标志位 } |