基于GSM模塊與AT89C51的接口設計及應用
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進制數。那么如果a39H,則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模塊價格低廉、應用廣泛,應用前景誘人,通過與手機模塊接口可以很方便的設計出用戶所需要的數據接收終端。
評論