基于GSM短消息控制的智能照明節電系統設計
注意單片機與MC35i串口不能直接相連,因為89C52管腳為5 V標準TTL電平,而MC35i電平較低,為3 V左右。為解決電平接口不一致的問題,同時避免板間干擾、提高系統通信的靈活性和可擴展性,節電系統中在單片機和GSM模塊之間加了一個MAX232電平轉換電路。
下面重點論述控制系統中微處理器與GSM之間如何實現短消息收發。
4 短消息分析與實現
為實現軟件控制短信息的編輯和收發,我們有必要先分析一下短消息的格式,然后再確定如何通過AT命令實現短消息的收發。
4.1 短消息分析
短消息的發送和接收控制共有三種模式:Block模式、基于AT命令的Text模式和基于AT命令的PDU模式。其中只存PDU模式可以用于中英文短消息傳送,但因為有編碼、解碼過程,所以較Text模式復雜。由于PDU模式有很好的數據信息存儲格式,并對中文有很好的支持.PDU模式在GSM移動設備中使用最為普遍,現在各大網絡公司都采用PDU模式來進行短消息的處理。
根據GSM07.05的定義,只要終端通過UART接口向GSM模塊發送AT命令,就可以直接讀取收到的PDU模式的短消息。PDU模式的數據表面上看是一串ASCII碼,由‘O’~‘9’,‘A’~‘F’這些數字和字母組成,他們是8位字節的十六進制數。PDU數據不僅包含可顯示的消息本身,還以固定格式包含很多其他消息,如SMS服務中心號碼、目標號碼、回復號碼、編碼方式和服務時間等。
目前國內漢字顯示采用GB一2313編碼,而GSM標準中中文編碼采用UTF一8編碼,因此處理短消息時需要進行中文編碼的轉換,才能與采用GB一2313漢字庫相配合顯示漢字字型。
由于UTF一8編碼和GB一2313漢字庫之間不存在一一對應的線性關系,因此嵌入式系統中只能采用查表的方式進行轉換。下面給出一個由UTF一8編碼到GB一2313編碼轉換的算法。
首先在存儲區建立UTF一8和GB一2313兩個編碼表,然后進行軟件解碼。每次從PDU模式的短消息數據串的用戶數據段取出兩個字節,采用二分法快速數據查找算法,在UTF一8編碼表中找到編碼所對應的位置,然后在GB一2313編碼表對應位置上讀出短信內容相對應的GB一2313編碼。相應的軟件流程如圖3所示。二分法的最壞查找次數為lg2(n+1),UTF一8表的長度n為7 445,所以最壞情況查找次數為13次,即一個中文編碼由UTF一8到GB一2313的轉換最多經過13次比較查找就可完成。這比采用簡單的順序查表快地多,大大減少了查表所花費的時間,非常適合在一般的嵌入式系統中使用。
4.2 使用AT命令實現短消息收發
評論