![]() |
你這里問題有; 第一:不能直接判斷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; //清除發送完成標志位 } |