基于GSM模塊與AT89C51的接口設(shè)計(jì)及應(yīng)用
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;短消息號(hào)
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;錯(cuò)誤時(shí)轉(zhuǎn)移
SETB F0;刪除成功
RET
CMGD4:
CLR F0;刪除失敗
RET
AT指令的指令符號(hào)、常數(shù)、PDU數(shù)據(jù)等都是以ASCII編碼形式傳送;傳送透明數(shù)據(jù)必須把TC35i模塊的工作模式設(shè)置為PDU模式;單片機(jī)向TC35i模塊發(fā)送每一條指令后,必須以回車符作為該條指令的結(jié)束,例如單片機(jī)向手機(jī)發(fā)送“AT+CMGF=0”這條指令,其ASCII編碼序列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后一個(gè)字節(jié)0DH就是回車符,表示該條指令結(jié)束,如果沒有這個(gè)回車符,手機(jī)將不識(shí)別這條指令。當(dāng)TC35i模塊接收到一條完整的AT指令后,TC35i模塊并不立即執(zhí)行該條指令,而是先把剛才接收到的AT指令的ASCII編碼序列全部反發(fā)送出來(含0DH);其次發(fā)送一個(gè)回車符和一個(gè)換行符的ASCII編碼,即0DH和0AH;然后執(zhí)行該指令。
單片機(jī)讀取TC35i模塊的PDU數(shù)據(jù)時(shí),原始數(shù)據(jù)應(yīng)該是16進(jìn)制數(shù),但讀回的數(shù)據(jù)仍然是ASCII表示的16進(jìn)制數(shù)。這樣一個(gè)字節(jié)的16進(jìn)制數(shù)就變成了2個(gè)字節(jié)的ASMII碼。但是PDU數(shù)據(jù)包中的數(shù)據(jù)字節(jié)長度部分仍然是實(shí)際字符長度。而不是變成ASCII碼的字節(jié)長度,這在編程時(shí)應(yīng)特別注意,否則,接收的數(shù)據(jù)就不完整。單片機(jī)接收到PDU數(shù)據(jù)包數(shù)據(jù)后,必須將其恢復(fù)成16進(jìn)制數(shù)據(jù),其算法如下:設(shè)a為接收的ASCII碼,b為轉(zhuǎn)換后的16進(jìn)制數(shù)。那么如果a39H,則b=a-30H;如果a>39H,則b=a-30h-07H。最后把前后兩個(gè)數(shù)合并為一個(gè)字節(jié)。
TC35i模塊向單片機(jī)應(yīng)答PDU數(shù)據(jù)包的字節(jié)數(shù)時(shí)不包括前9個(gè)字節(jié)數(shù)據(jù),但向單片機(jī)傳送PDU數(shù)據(jù)包時(shí),包括這9個(gè)字節(jié)的數(shù)據(jù)。例如,如果TC35i模塊應(yīng)答的PDU數(shù)據(jù)長度為50,而實(shí)際向單片機(jī)傳送的16進(jìn)制數(shù)據(jù)為59字節(jié),ASCII碼為2×59字節(jié),所以單片機(jī)必須按2×59個(gè)字節(jié)接收PDU數(shù)據(jù)。
5、結(jié)論:
使用手機(jī)模塊利于系統(tǒng)集成,成本較低。在偏遠(yuǎn)地區(qū)等架設(shè)通信線路困難或不經(jīng)濟(jì)的地方,工程服務(wù)設(shè)施可以自由靈活的設(shè)置,不再受地形條件的限制??傊?,GSM模塊價(jià)格低廉、應(yīng)用廣泛,應(yīng)用前景誘人,通過與手機(jī)模塊接口可以很方便的設(shè)計(jì)出用戶所需要的數(shù)據(jù)接收終端。
評(píng)論