![]() |
發(fā)布時間: 2018-5-30 12:23
正文摘要:初學單片機,哪位大哥幫我看下如何在主函數(shù)里面調(diào)用我在串口助手里面輸入的數(shù)字,我下面的不行啊幫忙看下哪里錯了 |
你這里問題有; 第一:不能直接判斷SBUF寄存器里面的數(shù)據(jù) 第二:你得確定串口來的數(shù)據(jù)是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); } |
串口助手輸入的“數(shù)字”其實是字符,并且有對應的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; //設置計數(shù)器工作方式2 PCON=0X80; //波特率加倍 TH1=0XF3; //計數(shù)器初始值設置,注意波特率是4800的 TL1=0XF3; ES=1; //打開接收中斷 EA=1; //打開總中斷 TR1=1; //打開計數(shù)器 } 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;//出去接收到的數(shù)據(jù) RI = 0;//清除接收中斷標志位 SBUF=receiveData;//將接收到的數(shù)據(jù)放入到發(fā)送寄存器 while(!TI); //等待發(fā)送數(shù)據(jù)完成 TI=0; //清除發(fā)送完成標志位 } |
Powered by 單片機教程網(wǎng)