1、概述:
隨著通信技術的發展,基于移動通信網絡服務功能,正向工業控制和遙控領域有不斷擴大的趨勢。為適應這種需要,西門子公司推出了新一代無線通信GSM模塊" title="GSM模塊">GSM模塊——TC35i,基于該模塊的短消息功能,可以快速安全可靠地實現用戶信息處理等功能,特別適用于控制中心與終端設備距離很遠,或不便采用有線通信介質等場合,例如油井信息采集后的傳輸、遠程抄表系統、城市交通導向等均基于TC35i模塊來實現。
2、TC35i模塊介紹
目前,國內已經開始使用的GSM模塊有很多,而且這些模塊的功能、用法差別不大。本設計采用的是西門子TC35系列的TC35i 。這種無線模塊功能上與TC35兼容,設計緊湊,大大縮小了用戶產品的體積。TC35i與GSM2/2兼容、雙頻(GSM900/GSM1800)、RS232數據接口,該模塊及射頻電路和基帶與一體,向用戶提供標準的AT命令接口,為數據、語音、短消息和傳真提供快速、可靠、安全的傳輸,方便用戶的應用開發及設計。
2.1 模塊中與SMS有關的GSM AT指令介紹
GSM引擎模塊提供的命令符合GSM07.05和GSM07.07規范。GSM07.07中定義的AT Command接口,提供了一種移動平臺與數據終端設備之間的通用接口;GSM07.05對短消息作了詳細的規定。在短消息模塊收到網絡發來的短消息時,能夠通過串口發送指示信息,數據終端設備可以向GSM模塊發送各種命令。與SMS有關的GSM AT指令如表一所示。GSM AT指令集,是由諾基亞、愛立信、摩托羅拉和HP等廠家共同為GSM系統研制的,其中包含了對SMS(Short Message Service)的控制。
表一 與SMS相關的若干GSM AT指令
2.2 PDU編碼規則
目前,發送短消息常用Text和PDU(Protocol Data Unit,協議數據單元)模式。使用Text模式收發短信代碼簡單,實現起來十分容易,但最大的缺點是不能收發中文短信;而PDU模式不僅支持中文短信,也能發送英文短信。PDU模式收發短信可以使用3種編碼:7-bit、8-bit和UCS2編碼。7-bit編碼用于發送普通的ASCII字符,8-bit編碼通常用于發送數據消息, UCS2編碼用于發送Unicode字符。一般的PDU編碼由ABCDEFGHIJKLM十三項組成。
A:短信息中心地址長度,2位十六進制數(1字節)
B:短信息中心號碼類型,2位十六進制數。
C:短信息中心號碼,B+C的長度將由A中的數據決定。
D:文件頭字節,2位十六進制數。
E:信息類型,2位十六進制數。
F:被叫號碼長度,2位十六進制數。
G:被叫號碼類型,2位十六進制數,取值同B。
H:被叫號碼,長度由F中的數據決定。
I:協議標識,2位十六進制數。
J:數據編碼方案,2位十六進制數。
K:有效期,2位十六進制數。
L:用戶數據長度,2位十六進制數。
M:用戶數據,其長度由L中的數據決定。J中設定采用UCS2編碼,這里是中英文的Unicode字符。
3、TC35i與單片機的硬件接口電路
TC35i模塊主要由GSM基于處理器、GSM射頻模塊、供電模塊、閃存、ZIF連接器、天線接口六部分組成。通過ZIF連接器與單片機實現電路接口,該接口讀取或發送TC35i模塊中的數據,將是本文論述的重點,也是TC35i應用的核心。TC35i與單片機的硬件接口電路如圖所示。
3、單片機與TC35i的軟件接口及控制原理
單片機與TC35i的軟件接口其實就是單片機通過AT指令控制手機的控制技術,首先設置TC35i模塊的工作模式:AT+CMGF=n,n=0為PDU模式;n=1為文本模式;通常設置為PDU模式,在這種模式下,能傳送或接受透明數據(用戶自定義數據)。AT+CMGR=n為讀TC35i模塊短消息數據,n為短消息號。AT+CMGL=n為列出TC35i模塊內的短消息,n=0是未讀的短消息,n=1位已讀的短消息,n=2位未發送的短消息,n=3為已發送的短消息n=4為所有短消息。AT+CMGD=n為刪除TC35i模塊的短消息,n為短消息編號。
4.1程序設計
軟件編程通過向TC35i寫入不同的AT指令能完成多種功能,如網絡登陸、讀取SIM卡上電話號碼、發送SMS消息、接收SMS消息等。下面給出部分功能程序:
4.1.1啟動TC35i模塊程序
STAR: CLR P1.0 ;IGT=0
LCALL DL100ms;延時100毫秒
SETB P1.0 ;IGT=1啟動TC35i模塊
MOV PCON , #80H
MOV TH1,#0FBH ;采用18.432MHz晶振時,設置串口為19200波特率
MOV TL1, #0FBH
MOV SCON,#50H
SETB TR1
4.1.2設置TC35i模塊為PDU工作模式程序
CMGF:MOV 40H,#41H;A
MOV 41H,#54H;T
MOV 42H, #2BH;+
MOV 43H,#43H;C
MOV 44H,#4DH;M
MOV 45H,#47H,G
MOV 46H,#46H;F
MOV 47H,#3DH;=
MOV 48H,#30H;0
MOV 49H,#0DH;CR發送十個字符
MOV R2,#0AH
MOV R0,#40H
CMGF1:MOV A,@R0
MOV SBUF,A
JNB TI,$
CLR TI
INC R0
DJNZ R2,CMGF1
RET
4.1.3 刪除短消息程序
CMGD:MOV 40H,#41H;A
MOV 41H,#54H;T
MOV 42H, #2BH;+
MOV 43H,#43H;C
MOV 44H,#4DH;M
MOV 45H,#47H,G
MOV 46H,#46H;F
MOV 47H,#3DH;=
MOV 48H,#16H;短消息號
MOV 49H,#17H
MOV 4AH,#0DH;CR
MOV R2,#0BH
CMGD1:
MOV A,@R0
MOV SBUF,A
MOV 1CH,#200
JNB TI,$
CLR TI
DJNZ R2,CMGD1
MOV R2,#0DH
CMGD2:
JNB RI,$
CLR RI
MOV A,SBUF
DJNZ R2,CMGD2
MOV RO,#40H
CMGD3:
JNB RI,$
CLR RI
MOV A,SBUF
MOV @R0,A
INC RO
CJNE A,#0AH,CMGD3;判斷換行字符
MOV A,40H
CJNE A,#4FH,CMGD4;錯誤時轉移
SETB F0;刪除成功
RET
CMGD4:
CLR F0;刪除失敗
RET
AT指令的指令符號、常數、PDU數據等都是以ASCII編碼形式傳送;傳送透明數據必須把TC35i模塊的工作模式設置為PDU模式;單片機向TC35i模塊發送每一條指令后,必須以回車符作為該條指令的結束,例如單片機向手機發送“AT+CMGF=0”這條指令,其ASCII編碼序列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一個字節0DH就是回車符,表示該條指令結束,如果沒有這個回車符,手機將不識別這條指令。當TC35i模塊接收到一條完整的AT指令后,TC35i模塊并不立即執行該條指令,而是先把剛才接收到的AT指令的ASCII編碼序列全部反發送出來(含0DH);其次發送一個回車符和一個換行符的ASCII編碼,即0DH和0AH;然后執行該指令。
單片機讀取TC35i模塊的PDU數據時,原始數據應該是16進制數,但讀回的數據仍然是ASCII表示的16進制數。這樣一個字節的16進制數就變成了2個字節的ASMII碼。但是PDU數據包中的數據字節長度部分仍然是實際字符長度。而不是變成ASCII碼的字節長度,這在編程時應特別注意,否則,接收的數據就不完整。單片機接收到PDU數據包數據后,必須將其恢復成16進制數據,其算法如下:設a為接收的ASCII碼,b為轉換后的16進制數。那么如果a<39H,則b=a-30H;如果a>39H,則b=a-30h-07H。最后把前后兩個數合并為一個字節。
TC35i模塊向單片機應答PDU數據包的字節數時不包括前9個字節數據,但向單片機傳送PDU數據包時,包括這9個字節的數據。例如,如果TC35i模塊應答的PDU數據長度為50,而實際向單片機傳送的16進制數據為59字節,ASCII碼為2×59字節,所以單片機必須按2×59個字節接收PDU數據。
5、結論:
使用手機模塊利于系統集成,成本較低。在偏遠地區等架設通信線路困難或不經濟的地方,工程服務設施可以自由靈活的設置,不再受地形條件的限制。總之,GSM模塊價格低廉、應用廣泛,應用前景誘人,通過與手機模塊接口可以很方便的設計出用戶所需要的數據接收終端。