全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3145
推到 Plurk!
推到 Facebook!

89S52 透過RS232 對GSM Modem 下AT Command 無法

答題得分者是:taishyang
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-02-04 15:13:17 IP:114.42.xxx.xxx 訂閱
請各位大大幫忙看看有什麼問題,以下程式也是引站上文章測試過可用的,目前這個程式我直接對一般在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-02-04 15:34:29 IP:122.116.xxx.xxx 訂閱
掛示波器 or LA看信號是否正確
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-02-04 20:02:09 IP:114.46.xxx.xxx 未訂閱
1.只要用 \r 就好. 不要用 \n
2.總字數不是 17 吧. 自己算一下吧.多送一個就等於叫 modem 掛電話了.
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-02-04 22:06:11 IP:219.71.xxx.xxx 訂閱
謝謝大大回覆,我再試看看,^^
今天也有用示波器.和邏輯分析儀...但...還不會用..-___-..學習中.
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-02-05 09:01:08 IP:114.45.xxx.xxx 訂閱
試了一下.改成 \r 及修正長度還是撥不出去.-___-.
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-02-05 10:54:22 IP:114.46.xxx.xxx 未訂閱
把你修好的丟上來呀.

再者. 你確定你的程式真的會丟出訊號嗎?

編輯記錄
暗黑破壞神 重新編輯於 2010-02-05 10:55:41, 註解 無‧
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-02-05 21:11:42 IP:219.71.xxx.xxx 訂閱
各位大大好,我目前用的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[]={"
ATD0928115xxx;\r\n"}; // ATD後的電話請自己修改

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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2010-02-06 00:19:50 IP:114.46.xxx.xxx 未訂閱
for(i=0;i<16;i )
你知道這樣送了幾個字元嗎?
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#9 引用回覆 回覆 發表時間:2010-02-06 00:44:13 IP:219.71.xxx.xxx 訂閱
-___-....耶 .不是0~15 所以是16個字元嗎? 因為我算 "ATD0928115xxx;\r\n" 是16個字元.
編輯記錄
fakevin 重新編輯於 2010-02-08 11:18:09, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#10 引用回覆 回覆 發表時間:2010-02-06 09:53:36 IP:114.46.xxx.xxx 未訂閱
1.不要送出 \n
2.字數算對.
3.你的sim card 有沒有加鎖?
fakevin
一般會員


發表:1
回覆:5
積分:1
註冊:2005-07-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2010-02-08 10:42:28 IP:114.45.xxx.xxx 訂閱
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 都是可以撥的

感謝我朋友美麗的錯誤,也感謝各位大大支援,造成困擾真不好意思,
祝大家新年快樂..

編輯記錄
fakevin 重新編輯於 2010-02-08 10:44:59, 註解 無‧
fakevin 重新編輯於 2010-02-08 10:46:02, 註解 無‧
fakevin 重新編輯於 2010-02-08 10:47:40, 註解 無‧
fakevin 重新編輯於 2010-02-08 10:48:37, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2010-02-08 10:53:28 IP:122.116.xxx.xxx 訂閱
所以我一開始就說用示波器 or LA看訊號
問題就很好釐清
編輯記錄
taishyang 重新編輯於 2010-02-08 10:54:49, 註解 無‧
系統時間:2024-03-28 19:18:37
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!