GSMモジュールは、GSM(Global System for Mobile Communications)テクノロジに基づく多くの通信デバイスで使用されています。これは、コンピューターを使用してGSMネットワークと対話するために使用されます。GSMモジュールはATコマンドのみを理解し、それに応じて応答できます。最も基本的なコマンドは「AT」です。GSMがOKと応答した場合は正常に機能しており、そうでない場合は「ERROR」と応答します。通話に応答するためのATA、通話をダイヤルするためのATD、メッセージを読み取るためのAT + CMGR、SMSを送信するためのAT + CMGSなどのさまざまなATコマンドがあります。ATコマンドの後にはキャリッジリターン、つまり\ r(16進数で0D)を続ける必要があります。 )、「AT + CMGS \ r」のように。これらのコマンドを使用してGSMモジュールを使用できます。
8051とのGSMインターフェース
PCを使用する代わりに、マイクロコントローラーを使用してGSMモジュールおよびLCDと対話し、GSMモジュールからの応答を取得できます。そこで、GSMを8051マイクロコントローラー(AT89S52)とインターフェースさせます。 GSMと8051のインターフェースは非常に簡単です。マイクロコントローラーからATコマンドを送信し、GSMから応答を受信して、LCDに表示するだけです。マイクロコントローラーのシリアルポートを使用してGSMと通信できます。つまり、PIN 10(RXD)および11(TXD)を使用します。
まず、LCDを8051に接続する必要があります。これは、ここから学ぶことができます:8051マイクロコントローラーとのLCDインターフェース。次に、GSMモジュールを8051に接続する必要があります。ここで、注意を払う必要があります。まず、GSMモジュールがTTLロジックで動作できるかどうか、またはRS232でのみ動作できるかどうかを確認する必要があります。基本的に、モジュールにRXピンとTX(GND付き)ピンが搭載されている場合は、TTLロジックで動作します。また、RX、TXピンがなく、RS232ポート(9のシリアルポート)しかない場合は、MAX232ICを使用してシリアルポートをマイクロコントローラーに接続する必要があります。基本的にMAX232マイクロコントローラーはTTLロジックでしか機能しないため、シリアルデータをTTLロジックに変換するために使用されます。ただし、GSMモジュールにRX、TXピンがある場合は、MAX232やシリアルコンバーターを使用する必要はありません。GSMのRXを8051のTX(PIN 11)に、GSMのTXを8051のRX(PIN 10)に直接接続できます。 。私たちの場合、SIM900Aモジュールを使用しましたが、RX、TXピンがあるため、MAX232は使用していません。
AT89S52マイクロコントローラーとインターフェースするGSMの回路図を上の図に示します。接続後、ATコマンドをGSMに送信し、LCDでその応答を受信するプログラムを作成する必要があります。上記のように多くのATコマンドがありますが、この記事の範囲はGSMを8051とインターフェースすることだけなので、コマンド「AT」に続いて「\ r」(16進数で0D)を送信します。これにより、「OK」という応答が返されます。ただし、このプログラムを拡張して、GSMのすべての機能を使用することができます。
コードの説明
LCD関連のすべての機能に加えて、ここではシリアルポートとタイマーモードレジスタ(TMOD)を使用しました。LCD機能やその他のコードについては、8051プロジェクトのセクションを参照して学ぶことができます。ここでは、シリアル通信関連のコード機能について説明しています。
GSM_init()関数:
この関数は、マイクロコントローラのボーレートを設定するために使用されます。ボーレートは、送信または受信されたビット/秒に他なりません。また、8051のボーレートをGSMモジュールのボーレート(9600)に一致させる必要があります。TMODレジスタを0X20およびタイマー1の上位バイトに設定することにより、モード2(8ビット自動リロードモード)でタイマー1を使用しました。 (TH1)を0XFDに設定して、9600のボーレートを取得します。また、SCONレジスタを使用してシリアル通信のモードを設定し、受信を有効にしてMode1(8ビットUART)を使用しました。
GSM_write関数:
SBUF(シリアルバッファ特殊機能レジスタ)はシリアル通信に使用されます。シリアルデバイスにバイトを送信する場合は常に、そのバイトをSBUFレジスタに配置し、バイト全体が送信されると、ハードウェアによってTIビットが設定されます。次のバイトを送信するためにリセットする必要があります。これは、バイトが正常に送信されたことを示すフラグです。TIはSCONレジスタの2番目のビットです。この機能を使用して「AT」を送信しました。
GSM_read関数:
送信と同じように、外部デバイスからバイトを受信するたびに、そのバイトはSBUFレジスタに格納され、それを読み取る必要があります。また、バイト全体が受信されると、RIビットがハードウェアによって設定されます。次のバイトを受信するためにリセットする必要があります。RIはSCONレジスタの最初のビットです。この関数を使用して、応答「OK」を読み取りました。