想請問各位大大關於使用8051撰寫AT command的뀠…

看板C_and_CPP作者 (不彥其煩)時間14年前 (2009/12/14 14:21), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串1/2 (看更多)
這是我第一次的發文唷,如果違規敬請見諒! 有高手會這一部份的,可以向我丟水球嗎?急需要有人可以替我解惑,謝謝唷! 我的問題如下: 我軟體想要的動作是每當senser = = 0, 8051就發送AT command,每發送一段 command, 與8051連接的的LED會閃爍一次,最後將AT command傳送給GSM模組,發送簡訊出去。 我是使用宣告字元的方式來發送AT command,可是不知道這樣可不可行,希望各位大大 幫我解答,該怎麼樣才能順利的將AT command傳送出去。 還是我RS-232定義的部分有錯誤呢? 使用的8051是AT89S52 我是將LED定義為P1^0 senser定義為P2^0 利用RS-232做串列傳輸 程式碼如下: #include<AT89x52.h> sbit led = P1^0;//LED腳位定義 sbit sensor = P2^0;//感應器 char *C1="AT"; char *C2="AT+CMGF=1"; char *C3="AT+CMGS=0986426579"; char *C4="THIS IS A TEST"; delay(int d) //延遲副程式 { int i,j; for(i=0;i<d;i++) for(j=0;j<200;j++); } init_rs232() //初始化RS232通訊介面 <<這裡怪怪的 分號的部份>> { //通訊協定:<9600 N 8 1> SCON=0x50; //設定串列界面工作模式1,接收資料致能 TMOD=0x20; //設定計時器1工作於模式2 TH1=0xFD; //設定鮑率為9600BPS TR1=1; //啟動計時器1開始計數 TI=1; //設定串列傳送中斷產生旗號 } tx_char(unsigned char c) //傳送一位元組資料 { while(1) if(TI)break; //等待傳送中斷旗號產生 TI=0; //清除串列傳送中斷旗號 SBUF=c; //由串列埠傳送資料出去 } tx_str(char*str) //傳送字串資料 { do{tx_char(*str++);} while(*str!='\0'); } void main(void) { int i=0; init_rs232(); //初始化RS232通訊介面 delay(500); while(i==20) { led=0; delay(500); led=1; delay(500); i=i+1; } while(sensor ==1) { if (sensor ==0)//收到訊號 { tx_str(C1); //傳送執行訊息出去 led=0;//LED亮 delay(500); led=1;//LED不亮 tx_str(C2); //傳送執行訊息出去 led=0;//LED亮 delay(500); led=1;//LED不亮 tx_str(C3); //傳送執行訊息出去 led=0;//LED亮 delay(500); led=1;//LED不亮 tx_str(C4); //傳送執行訊息出去 led=0;//LED亮 delay(500); led=1;//LED不亮 } led=1;//LED不亮 } } 拜託各位大大了! 非常非常迫切的需要神手替我解答,我是code超新手,專題卡關! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.96.47.178

12/14 20:48, , 1F
init_rs232()中 TI不應設為1
12/14 20:48, 1F
※ 編輯: maxwellyann 來自: 118.168.47.118 (12/14 22:37)
文章代碼(AID): #1B9TbVnn (C_and_CPP)
文章代碼(AID): #1B9TbVnn (C_and_CPP)