通常,發(fā)送和接收短信的終端都是通過串行接口連接電腦,這類設備用得比較多的是GSM Modem和手機。這類設備通常都支持PDU模式,但仍有少數(shù)設備只支持Text模式。
設備硬件連接好以后可以通過發(fā)送AT指令測試設備是否連接正確能否正常通訊。在這里我使用Windows自帶的“超級終端”工具進行通訊。此工具可以在程序——附件——通訊里面找到,如果沒有請確認是否安裝了此組件?;蛘咴谶\行里面輸入“hypertrm”也可以快速啟動“超級終端”。
以下所有范例均以Siemens M55手機作為終端,有可能跟你設備返回的不同。具體參數(shù)清參閱設備相關AT指令集。本手機AT指令集在我主頁上有下載。
準備工作:
1、 測試連接:“AT8 ”測試終端是否連接正確。成功后返回“OK”。
2、 設置回顯:(此步驟為了測試方便)ATE18
3、 查閱及設置字符集:
AT+CSCS=?8 +CSCS: ("GSM","UCS2") 說明該終端支持GSM與UCS2兩種字符集。一般對于中文環(huán)境設置為UCS2 AT+CSCS="UCS2"8 4、 取得短信中心號碼:
AT+CSCA? 8 +CSCA: "+8613800280500",145 5、 查詢并設置SMS格式:
查詢:AT+CMGF= 8 返回:+CMGF: (0) 0代表PDU模式。你的設備可能有其他的選項,請參考設備的AT指令集。 設置:AT+CMGF=08 6、 查詢并設置短信儲存位置:
查詢:AT+CPMS=?8 返回:+CPMS: ("MT","SM","ME"),("MT","SM","ME"),("MT","SM","ME") 其中MT表示設備所有可用儲存位置。SM代表SIM卡,ME代表機身。 一般設置為:AT+CPMS= "MT","MT","MT"8 查詢短信:
1、 查詢具有相同狀態(tài)的所有短信
指令:AT+CMGL=n 其中n代表0-4的數(shù)字。 0——未讀得短信。執(zhí)行命令以后自行變?yōu)橐炎x取。 1——已讀短信。 2——草稿。 3——已發(fā)送短信。 4——全部 返回(例): +CMGL: 76,3,,20 0891683108200805F011620D91683194041338F50000FF0530972D8603
76——序號 3——狀態(tài):發(fā)送
20——PDU串長度
2、 查詢特定序號的短信
指令:AT+CMGR=n8 其中n代表序號 返回(例): +CMGR: 3,,20 0891683108200805F011620D91683195041338F50000FF0530972D8603 3——狀態(tài):發(fā)送 20——PDU串長度 注意:PDU串長度表示PDU中除去短信中心部分剩下的代碼的長度的1/2。例如上述PDU中PDU長度部分為11620D91683195041338F50000FF0530972D8603,40個字符,表示20個字節(jié)。
儲存PDU
指令: AT+CMGW=[PDU長度] 8 >[PDU串] 例如: AT+CMGW=208 > 0891683108200805F011620D91683195041338F50000FF0530972D8603
注意,輸入PDU后按“CTRL+Z”終止。程序中使用0x1A,0x1D作為終止。 返回:+CMGW: 85
85——序號 發(fā)送PDU串
1、 發(fā)送輸入的PDU串
指令: AT+CMGS=[PDU長度] 8 >[PDU代碼] 2、 發(fā)送指定序號的PDU串
指令: AT+CMSS=[序號] 8 接收短信
接收剛收到的短信有兩種方法:輪詢終端;使用事件
輪詢終端可以定期的使用AT+CMGL=0指令讀取未讀取得指令。方法簡單,但許多時候都在做無用功,效率低下,一般不建議采用。下面主要講解事件法:
指令:
AT+CNMI=<mode>,<mt>,<bm>,<ds>,<brf> 參數(shù):
mode: 0——緩存在終端
1——直接發(fā)送到TE
mt:
0——接收到新的SMS不返回事件
1——如果接收到的SMS存儲在ME,則返回
+CMTI:<mem>,<index> 2——除了Class2 SMS,新的SMS直接發(fā)送到終端,返回:
+CMT:<length><CR><LF><PDU> 3——Class3 SMS使用mt=2的方法返回,其他類型的使用mt=1的方法返回。
bm:
0——小區(qū)廣播不通知
2——新的小區(qū)廣播通知,返回
+CBM:<length><CR><LF><pdu> 3——Class3格式的小區(qū)廣播通知,使用bm=2格式
ds:
0——狀態(tài)報告不通知
1——新的狀態(tài)報告通知,返回:
+CDS:<length><CR><LF><pdu> 2——如果新的狀態(tài)報告存儲到ME,則返回:
+CDSI:<mem>,<index>
brf:
1——始終為1
例:
一般我們使用AT+CNMI=1,1,0,2,1
當收到新的短信時終端返回:
+CMTI:ME,5
新的狀態(tài)報告:
+CDSI:ME,6
程序可以通過判斷返回值并使用AT+CMGR指令返回新到短信
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/qibingzheng/archive/2009/07/22/4369762.aspx |
|