1 引 言
隨著通信技術(shù)的發(fā)展,基于移動通信網(wǎng)絡(luò)的服務(wù)功能正向工業(yè)控制和遙控領(lǐng)域擴展。為了適應(yīng)這種需要,西門子公司推出新一代TC35i型無線通信GSM模塊,基于該模塊的短消息功能,可以快速、安全、可靠地實現(xiàn)用戶信息處理等功能,特別適用于控制中心與終端設(shè)備距離很遠或不便采用有線通信介質(zhì)的場合。該系統(tǒng)由控制中心和若干顯示屏組成,控制中心實時將最新信息發(fā)送到各顯示屏,構(gòu)成控制中心與顯示屏端的通信鏈路。
2 TC35i與單片機的硬件接口電路
TC35i可以快速安全可靠地實現(xiàn)系統(tǒng)方案中的數(shù)據(jù)、語音傳輸、短消息服務(wù)和傳真。模塊的工作電壓為3.3 V~5.5 V,可以工作在900 MHz~1800MHz。模塊有AT命令集接口,支持文本和PDU模式的短消息。此外,該模塊還具有電話薄、多方通話、漫游檢測等功能,常用工作模式有省電模式、I-DLE和TALK等模式。通過40引腳的ZIF連接器實現(xiàn)電源連接、指令、數(shù)據(jù)、語音信號及控制信號的雙向傳輸。通過ZIF連接器及50 Ω的天線連接器可分別連接SIM卡支架和天線。
在控制系統(tǒng)中,采用AT89C51型單片機同時擴展RAM6264用于存放與顯示屏對應(yīng)的要顯示的128 B數(shù)據(jù)以及從GSM模塊讀取的信息。為了增大存放數(shù)據(jù)的容量,本設(shè)計采用了AM29F040型FlashMemory(512 KB),它存儲容量大、集成度高、成本低,具有靈活的讀寫性和較好的數(shù)據(jù)非易失性。它有15條地址線,其中低8位地址由P0口經(jīng)74HC373鎖存后提供,高11位地址由P2口與P1.4、P1.5、P1.6共同提供。8位數(shù)據(jù)由PO口直接提供。
采用動態(tài)掃描方式,用74HCl54及74HC595進行16行的逐行掃描,利用人眼的視覺暫留效果,可以節(jié)省I/O資源,減少發(fā)熱量。
3 工作原理
如圖l所示,在接收終端,單片機通過讀取TC35i模塊以短消息形式承載的數(shù)據(jù),經(jīng)處理后把它顯示到LED顯示屏上。因為短信息中的漢字僅僅是1個編碼,單片機應(yīng)用系統(tǒng)將編碼變?yōu)闈h字點陣數(shù)據(jù),必須配置漢字字庫。因此,設(shè)計單片機應(yīng)用系統(tǒng)時,控制中心編輯PDU數(shù)據(jù)包數(shù)據(jù),采用自定義數(shù)據(jù)方式。其中,代表漢字的數(shù)據(jù)直接用漢字的機內(nèi)碼,系統(tǒng)配置的字庫為GB-2312編碼的漢字庫,即區(qū)位碼漢字庫。下面通過對存儲在手機中的待發(fā)信息的分析來介紹SMSPDU的數(shù)據(jù)格式。首先,用手機寫一條信息,發(fā)送手機號碼為13605696031,信息內(nèi)容為“HelloWorld!”。通過執(zhí)行AT+CMGL=2可以讀出此條信息。
圖1 TC35i與AT89C51的接口電路
操作過程如下(斜體字符為響應(yīng)信息,{}內(nèi)為注釋):
AT+CMGL=2{讀未發(fā)短消息}+CMGL:1,2,24{1表示信息個數(shù),2表示未發(fā)信息,24表示信息總?cè)萘浚?
08 91 683108501505FO 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619 OK
下面分析這條消息:
08:短消息中心地址長度
91:短消息中心號碼類型,91是TON/NPI。TON/NPI遵守International/E.164標(biāo)準(zhǔn),指在號碼前需加“+”號,此處還可以有其他數(shù)值,但91最常用。
683108501505FO:短消息號碼,是所使用的服務(wù)中心地址。由于位置上略有處理,實際號碼應(yīng)為86138055155500(字母F意指長度減1),這是作者所在地GSM短信息中心的號碼。
11:文件頭字節(jié)(header byte,是一種bitmask)。這里11指正常發(fā)送短信息。
00:信息類型。
0B:被叫號碼長度。
81:被叫號碼類型。
3106656930F1:被叫號碼,也經(jīng)過了移位處理,實際號碼為13605696031。
0000A7:短信息編碼類型GSM Default Alphabet,如為中文則是0010A7。
0B:短信息長度。
E8329BFD06DDDF723619:短信息內(nèi)容“Hello World!”。
單片機與手機的軟件接口其實就是單片機通過與GSM短信息有關(guān)的AT指令控制手機的技術(shù),如讀取手機的短信息內(nèi)容、刪除短信息內(nèi)容、列出手機中還未讀的短消息等。執(zhí)行l(wèi)條指令,并非某些資料介紹的那么簡單,事實上,指令的執(zhí)行過程需要單片機與手機交互應(yīng)答完成,每一次發(fā)送或接收的字節(jié)數(shù)有嚴格的規(guī)定,二者必須依據(jù)這些規(guī)定實現(xiàn)數(shù)據(jù)交換,否則,通信就是失敗的。表1列出AT指令執(zhí)行過程。
表1 AT指令的執(zhí)行過程
所有AT指令的指令符號、常數(shù)、PDU數(shù)據(jù)包等都以ASCⅡ編碼形式傳送,比如“A”的ASCⅡ編碼為41H,“T”的ASCⅡ編碼為54H,數(shù)字“0”的ASCⅡ編碼為30H等。
單片機控制手機工作,必須把手機的短信息工作模式設(shè)置為PDU格式,即通過指令A(yù)T+CMGF=0完成。
單片機向手機發(fā)送每l條指令后,必須以回車符作為該條指令的結(jié)束,回車的ASCⅡ編碼為ODH,例如單片機向手機發(fā)送“AT+CMGF=0"指令,其ASCⅡ編碼列為“41H、54H、2BH、42H、4DH、47H、46H、3DH、30H、0DH”,最后1個字節(jié)0DH就是回車符,表示該條指令結(jié)束,如果沒有這個回車符,手機將不識別這條指令。
當(dāng)手機接收到一條完整的AT指令后,手機并不立即執(zhí)行這條指令,而是首先把剛才接收到的AT指令的全部ASCⅡ編碼序列全部反發(fā)送出來(含ODH),其次發(fā)送1個回車符和換行符的ASCⅡ編碼即0DH和OAH,最后執(zhí)行該條指令。
手機向單片機發(fā)送短信息內(nèi)容時,其PDU數(shù)據(jù)包的內(nèi)容是16進制表示的數(shù)據(jù),但并不是直接向單片機傳遞16進制數(shù)據(jù),而是仍然把每一位16進制數(shù)以ASCⅡ編碼來發(fā)送,這樣,2個字節(jié)的16進制數(shù)就變成4個字節(jié)的ASCⅡ碼。但是,PDU數(shù)據(jù)包中的數(shù)據(jù)字節(jié)長度部分仍然是實際字節(jié)長度,而不是變成ASCⅡ碼的字節(jié)長度,這在編程時應(yīng)特別注意,否則,接收的數(shù)據(jù)就不完整。單片機接收到PDU數(shù)據(jù)包數(shù)據(jù)后,必須將其恢復(fù)成16進制數(shù)據(jù),其算法如下:
設(shè)a為接收的ASCⅡ碼.b為轉(zhuǎn)換后的16進制數(shù),那么,如果a<39H,則b=a-30H;如果a>39H,則b=a-30H-07H。最后把前后2個數(shù)合并為1個字節(jié)。
手機向單片機應(yīng)答PDU數(shù)據(jù)包的字節(jié)數(shù)不包括前9個字節(jié)數(shù)據(jù)(短信服務(wù)中心地址),但向單片機傳送PDU數(shù)據(jù)包時包括這9個字節(jié)的數(shù)據(jù),例如:如果手機應(yīng)答的PDU數(shù)據(jù)長度為50,而實際向單片機傳送的16進制數(shù)據(jù)為59字節(jié),ASCⅡ碼為2x59字節(jié),所以,單片機必須按2x59個字節(jié)接收PDU數(shù)據(jù)。
為了使MCU操作,可用1個512 KB的存儲器(如本系統(tǒng)中的29F0410)存儲全部的國標(biāo)16x16點陣漢字、8x16的ASCⅡ碼點陣數(shù)據(jù)及漢字語句編碼數(shù)據(jù)。從小到大依次存有國標(biāo)區(qū)位碼表中的所有漢字,每個漢字占用32個字節(jié),每個區(qū)為94個漢字。在文件ASCl6中按ASCⅡ碼從小到大依次存有8x16的ASCⅡ碼點陣,每個ASCⅡ碼占用16個字節(jié)。由于29F040的容量為512 KB,而微控制器只能管理64KB的數(shù)據(jù)空間,所以可將29F040分成16頁,每頁32 KB,占單片機系統(tǒng)數(shù)據(jù)空間的8000H~OFFFFH。首先提取16x16的國標(biāo)漢字點陣和8x16的ASCⅡ碼點陣(如UCDOS軟件中的HZKl6和ASCl6)并將其直接寫入29F040。其中HZKl6(256 KB)占O-7頁。為了便于編程,雖然ASCl6只有4KB,也單獨占用第8頁。
在PC的文本文件中,漢字是以機內(nèi)碼的形式存放的,每個漢字占用2個字節(jié);第一個字節(jié)為區(qū)碼,為了與ASCⅡ碼區(qū)別,范圍從十六進制的0AIH開始(小于80 H的為ASCⅡ碼字符),對應(yīng)區(qū)位碼中區(qū)碼的第一區(qū);第二個字節(jié)為位碼,范圍也從0A1H開始,對應(yīng)某區(qū)中的第一位碼。這樣,將漢字機內(nèi)碼減去0AOAH就是該漢字的區(qū)位碼。如漢字“房”的機內(nèi)碼為十六進制的“B7BF”,其中“B7”表示區(qū)碼,“BF”,表示位碼。所以“房”的區(qū)位碼為0B7BFH-0AOAOH=17lFH。將區(qū)碼和位碼分別轉(zhuǎn)換為十進制得漢字“房”的區(qū)位碼為“2331”,即“房”的點陣位于第23區(qū)的第31個字的位置,相當(dāng)于在文件HZKl6中的位置第32x[(23-1)x94+(3l-1)]=67136 B以后的32個字節(jié)為“房”的顯示點陣。
4 結(jié)束語
在信息化社會中,遠程信息傳遞扮演著重要的角色,GSM模塊以其準(zhǔn)確、低廉、實時的特點為人們獲得某種信息提供便利,同時LED顯示又是溝通的重要窗口,二者結(jié)合顯示可應(yīng)用的領(lǐng)域十分廣泛,如交通、天氣預(yù)報、廣告、通知、工農(nóng)業(yè)生產(chǎn)、商業(yè)信息等,本設(shè)計采用的模塊市場上容易獲得,采用信息直接顯示不用返回,顯示環(huán)節(jié)運用動態(tài)掃描減少LED工作時間,延長壽命且節(jié)能,擴展的數(shù)據(jù)存儲器容量達8 KB,顯示時間較長,較多信息可分時顯示,結(jié)構(gòu)簡單,體積較小,實用性強。