赤外線リモコンの受信に挑戦中です。 Webでの調査と予め入手していたセンサの波形確認を終えてコーディングに取り掛かったところです。 このブログで製作する道具の一部に使いたいと考えていますから、赤外線リモコン用に専用のタイマーを割り付けるのではなく、キー走査やイベントタイマー用に使っているTIMER0を読み出して使おうと考えています。 うまく出来たら紹介します。
コーディング中にビットシフト命令を使う場面があったので紹介します。
PIC18Fシリーズのビットシフト命令は以下の4つです。
RLCF f , d , a ; f の値を左シフトした値 を W または f に記録 キャリー使用
RLNCF f , d , a ; f の値を左シフトした値 を W または f に記録 ループ
RRCF f , d , a ; f の値を右シフトした値 を W または f に記録 キャリー使用
RRNCF f , d , a ; f の値を右シフトした値 を W または f に記録 ループ
「キャリー使用」と書いたものは以下( RLCF )のようにキャリーフラグを使ってシフトします。
実行前C→bit0 bit0→bit1 bit1→bit2 bit2→bit3 bit3→bit4
bit4→bit5 bit5→bit6 bit6→bit7 bit7→実行後C
「ループ」と書いたものは以下( RLNCF )のようにループ状にシフトします。
bit0→bit1 bit1→bit2 bit2→bit3 bit3→bit4
bit4→bit5 bit5→bit6 bit6→bit7 bit7→bit0
下図は「キャリー使用」のアセンブラ・ソースです。 <PICデバイス=18F1320> 32bit( 4byte )のデータを左シフトしています。 最後に実行前キャリーの値によって不定になる 32bit 中の最下位ビットを0クリアしています。 2byte 以上のデータをシフトする時には「キャリー使用」の命令を使います。
今度も「キャリー使用」ですが右シフトです。 16bit( 2byte )のデータを右に3回シフトしています。 最後に上位データーの bit5bit7 を0クリアしています。 「キャリー使用」のビットシフトは byte の手順(上位と下位)も重要です。
「ループ」と書いたシフト命令はステッピングモーターの制御信号など、1byteの同じ値をグルグル回し続ける用途に使います。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
コーディング中にビットシフト命令を使う場面があったので紹介します。
PIC18Fシリーズのビットシフト命令は以下の4つです。
RLCF f , d , a ; f の値を左シフトした値 を W または f に記録 キャリー使用
RLNCF f , d , a ; f の値を左シフトした値 を W または f に記録 ループ
RRCF f , d , a ; f の値を右シフトした値 を W または f に記録 キャリー使用
RRNCF f , d , a ; f の値を右シフトした値 を W または f に記録 ループ
「キャリー使用」と書いたものは以下( RLCF )のようにキャリーフラグを使ってシフトします。
実行前C→bit0 bit0→bit1 bit1→bit2 bit2→bit3 bit3→bit4
bit4→bit5 bit5→bit6 bit6→bit7 bit7→実行後C
「ループ」と書いたものは以下( RLNCF )のようにループ状にシフトします。
bit0→bit1 bit1→bit2 bit2→bit3 bit3→bit4
bit4→bit5 bit5→bit6 bit6→bit7 bit7→bit0
下図は「キャリー使用」のアセンブラ・ソースです。 <PICデバイス=18F1320> 32bit( 4byte )のデータを左シフトしています。 最後に実行前キャリーの値によって不定になる 32bit 中の最下位ビットを0クリアしています。 2byte 以上のデータをシフトする時には「キャリー使用」の命令を使います。
今度も「キャリー使用」ですが右シフトです。 16bit( 2byte )のデータを右に3回シフトしています。 最後に上位データーの bit5bit7 を0クリアしています。 「キャリー使用」のビットシフトは byte の手順(上位と下位)も重要です。
「ループ」と書いたシフト命令はステッピングモーターの制御信号など、1byteの同じ値をグルグル回し続ける用途に使います。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。