89S52 透過RS232 對GSM Modem 下AT Command 無法 |
答題得分者是:taishyang
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
請各位大大幫忙看看有什麼問題,以下程式也是引站上文章測試過可用的,目前這個程式我直接對一般在PC端的RS232程式收送字串都是正常,所以我就改對GSM Modem 下AT Command ,但奇怪的是,我可以確定發送出的字串是 ATD0928115xxx;及換行,但GSM Modem 就是沒回應,以同樣的字串用PC端一般RS232 程式對GSM Modem 傳送是可以撥號的,所以
PC端RS232 對 GSM Modem 下 AT Command 正常 89S52端RS232 對 GSM Modem 下 AT Command 不正常 是否還有那邊沒注意到的,請各位大大幫忙,感謝 我用的GSM Modem 是Wavecom WMOD2 [code cpp] #include bit rx_flag; bit tx_flag; void init_rs232 (void); unsigned char ch,i; unsigned char str_buf[]={"ATD0928115xxx;\r\n"}; // ATD後的電話請自己修改 main (void) { init_rs232(); for(i=0;i<17;i ) { while (tx_flag == 0); tx_flag = 0; SBUF = str_buf[i]; } while (1) { if (rx_flag == 1) { rx_flag = 0; while (tx_flag == 0); tx_flag = 0; SBUF = ch; } } } void interr_s (void) interrupt 4 { if (RI) { RI = 0; rx_flag = 1; ch = SBUF; }else{ TI = 0; tx_flag = 1; } } void init_rs232 (void) { SCON = 0x50; TMOD = 0x20; TH1 = 0xfd; TR1 = 1; IE = 0X90; tx_flag = 1; } [/code] 編輯記錄
fakevin 重新編輯於 2010-02-08 11:02:55, 註解 無‧
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
各位大大好,我目前用的PC端程式是 Send232.exe 這支,測試功能也可以像 http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=96728 這篇由SRC大大po的範例一樣,當PC端發送字串時,51端會回傳,所以可以確定有丟出訊號,程式reset 也會丟出 "ATD0928115xxx;\r\n , 過程中也有改成把 \n 去掉 ,廻圈值改為15,但還是不行
目前測試如下 89S52端RS232 對 PC端RS232 正常 , PC端RS232 對 GSM Modem 下 AT Command 正常 89S52端RS232 對 GSM Modem 下 AT Command 不正常 目前我有在開發版,及面包板上都測過,由於開發板上的石英振盪為12MHZ ,而面包板上的為 11.0592MHZ,所以我在程式前用define 做為編譯時的區分,以下為目前程式碼, 明天我也會請我朋友幫我用LA及示波器看一下, [code cpp] #include //#define _XT110592_ bit rx_flag; bit tx_flag; void init_rs232 (void); char ch; unsigned char str_buf[]={" main (void) { unsigned char i; init_rs232(); for(i=0;i<16;i ) { while (tx_flag == 0); tx_flag = 0; SBUF = str_buf[i]; } while (1) { if (rx_flag == 1) { rx_flag = 0; while (tx_flag == 0); tx_flag = 0; SBUF = ch; } } } void interr_s (void) interrupt 4 { if (RI) { RI = 0; rx_flag = 1; ch = SBUF; } else { TI = 0; tx_flag = 1; } } void init_rs232 (void) { #ifdef _XT110592_ SCON = 0x50; TMOD = 0x20; TH1 = 0xfd; TR1 = 1; IE = 0X90; #else EA=1; RCAP2L=0XD8; RCAP2H=0XFF; TL2=0XD8; TH2=0XFF; T2CON=0X34; SCON=0X50; ES=1; #endif tx_flag = 1; } [/code]
編輯記錄
fakevin 重新編輯於 2010-02-08 11:03:26, 註解 無‧
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
fakevin
一般會員 發表:1 回覆:5 積分:1 註冊:2005-07-26 發送簡訊給我 |
Sim Card 是沒加鎖的.
經過一連串測試後,因為一直找不到問題所以一直騷擾我朋友,我朋友終於受不了就先做了一條 Y Cable ,一邊接PC,一邊接GSM Modem ,測試訊號是否有輸出,Y cable 示意圖如下 ----- serial --------- serial ----- | DTE |----------| Y Cable |----------| DCE | ----- --------- ----- | | ---------- | Analyzer | ----------接好後.我們先啟動的GSM Modem ,並同時開啟PC端的超級終端機,然後再啟動51 ,啟動後超級終端機顯示了接收到的訊號,是正確的,然後我看到GSM Modem 的閃燈頻率不同了, 果然,可以撥號了....just moment 我 -> 囧 我朋友 -> 囧 我們同一個疑問是,怎麼可能這樣接就可以撥號了,但因為可以了所以就請我朋友再把線弄好一點,..just moment 我朋友 -> 囧 ,耶...51到GSM Modem 的RS232線接錯了,變Null Modem 了 我 -> 囧 ,所有的迷團終於解開了 ,51對GSM Modem 要用一條Null Modem 的線才可以,我先前用的轉接頭(我朋友借我的)不是Null Modem ... 所以 ----- serial --------- | 51 |-----------| PC | -> 正常 ----- --------- ----- serial --------- | GSM |----------| PC | -> 正常 ----- --------- ----- null modem ------- | 51 |----------------| GSM | -> 正常 ----- ------- 可以撥後我測試 \r 及\r\n 都是可以撥的 感謝我朋友美麗的錯誤,也感謝各位大大支援,造成困擾真不好意思, 祝大家新年快樂.. |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |