「赤外線リモコン6」の続きです。 今回はTIME0で行っている受信終了のタイマー処理と、メイン処理で行っているLCD用仮想V-RAMへの転送(表示)、受信再開処理について説明します。 <PICデバイス=18F1320> 受光モジュールは PL-IRM1261-C438 です。

INT1 割り込み処理は前回までに全て説明しました。 下図は TIMER0 割り込み処理のアセンブラ・ソース( intlow.asm の一部)です。 赤外線リモコンの 32bit データ受信に要する時間はデータによって増減しますが、およそ70msec程度です。 ただし、中には 32bit より多くのデータを送信するリモコンがありますから、150 ~ 200msec 待って受信完了することにしました。 この時間を計る為に 50msec 間隔で発生する TIMER0 割り込みでカウンター irtout をカウントダウン(ゼロでクリップ)しています。 下図の66~67行目がその記述です。 最初に irtout が0であれば何もしないで TIMER0 の処理を終了しますが、そうでなければ irtout をデクリメント(-1)してから TIMER0 の処理を終了します。

intlow_TIMER0


下図は、メイン処理( test4.asm )の一部で、赤外線リモコンの受信コードを ASCII コードに変換して LCD 用仮想 V-RAM に転送して表示しています。

irc1st の bit7 をチェックして受信待ち状態でなければ、irtout が0であることを確認して受信完了と判断します。 受信完了でなければ何もしないで処理を終わります。 (下図127~131行目)

受信完了であれば受信コード( ircd0 , ircd1 , ircd2 , ircd3 )を順に ASCII コードに変換して LCD 用仮想 V-RAM の所定のアドレスに転送します。 tmp1 の値は 03AH です。 上位または下位 4bit を切り出して 30H を加えて16進数 0~9 までの変換を行い、tmp1との比較の結果 16進数 A~F までの値であればさらに 07H を加えて ASCII 変換しています。

test4_vram1

   <<< 途中省略 >>>

test4_vram2

4byte 分の転送後に irc1st の bit0 によって以下いずれかの表示をしています。
 (1) irc1st (bit0) = 0 の時アルファベット小文字の o
 (2) irc1st (bit0) = 1 の時アルファベット大文字の N

以上で、赤外線リモコン受信の説明を終わります。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-4.lzh


赤外線リモコン受信の関連記事インデックスはこちら → 「赤外線リモコン受信


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。