|
c51單片機(jī),遠(yuǎn)程命令詳解 ******************************************************************************/ #include <AT89X51.H> #include <stdio.h> unsigned int a; int b=1; int c =1; int d =1; int e=1; int f=0; void main(void) { unsigned char ldat; //PCON |=0X80; //是否波特率倍增 SCON=0x50; TMOD=0X20; //設(shè)置定時(shí)器1為模式2,做為波特率發(fā)生器 TL1=0xFD; //9600波特率的初值,板子使用11.592M晶振,初值=256-12000000/32/12/2400 TH1=0xFD; // TI = 1; TR1=1; //啟動(dòng)波特率發(fā)生 //設(shè)置串口方式2 do{ for (a=0; a<50000; a++); //延時(shí)幾秒,讓模塊有時(shí)間啟動(dòng) printf ("AT+CIPMUX=1\n"); //發(fā)送命令A(yù)T+CIPMUX=1,讓模塊進(jìn)入多連接模式 if(RI){ //查詢(xún)是否有數(shù)據(jù)接收 ldat=SBUF; //數(shù)據(jù)暫存于變量中 RI=0; if (ldat=='K')//命令執(zhí)行成功,就會(huì)返回OK,這里就是查詢(xún)是否有K返回,若有K返回,就說(shuō)明執(zhí)行成功,可以執(zhí)行下一條,否則繼續(xù)循環(huán) {b=0 ; d=0;} c++; if (c==1000) {c=1; d=0;}} }while (d); }while(b) ; b=1; c =1; d =1;//b、c、d復(fù)位,便于執(zhí)行下一條命令 do{ for (a=0; a<10000; a++); printf ("AT+CIPSERVER=1,7671\n"); do{ if(RI){ //查詢(xún)是否有數(shù)據(jù)接收 ldat=SBUF; //數(shù)據(jù)暫存于變量中 RI=0; if (ldat=='K')//同上 {b=0 ; d=0;} c++; if (c==1000) {c=1; d=0;}} }while (d); }while(b) ; b=1; c =1; d =1; do{ for (a=0; a<10000; a++); printf ("AT+CIPSTO=50\n"); do{ if(RI){ //查詢(xún)是否有數(shù)據(jù)接收 ldat=SBUF; //數(shù)據(jù)暫存于變量中 RI=0; if (ldat=='K')//同上 {b=0 ; d=0;} c++; if (c==1000) {c=1; d=0;}} }while (d); }while(b) ; b=1; c =1; d =1; //執(zhí)行上述命令,模塊進(jìn)入服務(wù)模式,下面單片機(jī)就可以接收遠(yuǎn)程發(fā)來(lái)的數(shù)據(jù) while(1) { if(RI){ //查詢(xún)是否有數(shù)據(jù)接收 ldat=SBUF; //數(shù)據(jù)暫存于變量中 RI=0; //重新清0等待接收 //命令接收開(kāi)始 if (ldat=='}') { char k[50] ;//設(shè)置接收數(shù)據(jù)緩沖 do{ if(RI){ //查詢(xún)是否有數(shù)據(jù)接收 ldat=SBUF; //數(shù)據(jù)暫存于變量中 RI=0; //重新清0等待接收 k[f]=ldat;//一個(gè)個(gè)字符接收 f++ ; if(ldat==0x0A){e=0;} //若有新行字符,則結(jié)束接收,則說(shuō)明命令接收完畢 } } while (e) ; printf("%s\n", k);//執(zhí)行遠(yuǎn)程發(fā)來(lái)的命令 f=0; e=1; for (a=0; a<50; a++){ k[a]=0; } } //命令結(jié)束 if (ldat==']') {P1_4=1; printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("A"); } if (ldat=='-') {P1_4=!P1_4; } if (ldat=='[') {P1_4=0; printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("B"); } if (ldat=='{') { if(P1_4==0){ printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("B"); } else{ printf ("AT+CIPSEND=0,1\n"); for (a=0; a<10000; a++); printf ("A"); } } } } } |
|