記事「加算と減算」で、論理演算については実際に使う場面で紹介することにしていましたが、「LCDに自動転送2」と言う記事で OR と AND を使っています。 各々の真理値表は下図の通りです。
OR と AND を演算を行う18Fシリーズの命令は以下のものがあります。
IORWF f , d , a ; データ・メモリー f の値と W の値の OR を W または f に記録
IORLW k ; 値 k と W の値の OR を W または f に記録
ANDWF f , d , a ; データ・メモリー f の値と W の値のANDを W または f に記録
ANDLW k ; 値 k と W の値のANDを W または f に記録
下図は「LCDに自動転送2」に紹介したアセンブラ・ソースで、84行目に IORWF 命令を使っています。 <PICデバイス=18F1320>
ここで W には上位 4bit が0の値が入っていて、LATA(ポートA)の出力値と W の値のORをLATA(ポートA)に出力する目的で使っています。 LATAの下位 4bit は直前の80~83行目で0クリアしていますから、LATAの上位 4bit に影響を与えることなく、W の下位 4bit をLATA(ポートA)に出力しています。
同じ記事にANDも登場します。 ここでは 0FH と W の値をANDすることで、Wの値の上位 4bit を0クリアしています。 W の値の下位 4bit に変化はありません。
このように 1byte データの一部を構成する複数の bit を他の bit に影響を与えずにまとめて変化させる場面で OR と AND を使うことがあります。
なお、上図の例で SWAPF 命令が使われていますが、この命令はデータメモリー f の値の上位 4bit と下位 4bit を入れ替えた値を f または W に記録する命令です。 ここでは 1byte 長の値を上位・下位 4bit に分けて転送する目的で使っています。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。
OR と AND を演算を行う18Fシリーズの命令は以下のものがあります。
IORWF f , d , a ; データ・メモリー f の値と W の値の OR を W または f に記録
IORLW k ; 値 k と W の値の OR を W または f に記録
ANDWF f , d , a ; データ・メモリー f の値と W の値のANDを W または f に記録
ANDLW k ; 値 k と W の値のANDを W または f に記録
下図は「LCDに自動転送2」に紹介したアセンブラ・ソースで、84行目に IORWF 命令を使っています。 <PICデバイス=18F1320>
ここで W には上位 4bit が0の値が入っていて、LATA(ポートA)の出力値と W の値のORをLATA(ポートA)に出力する目的で使っています。 LATAの下位 4bit は直前の80~83行目で0クリアしていますから、LATAの上位 4bit に影響を与えることなく、W の下位 4bit をLATA(ポートA)に出力しています。
同じ記事にANDも登場します。 ここでは 0FH と W の値をANDすることで、Wの値の上位 4bit を0クリアしています。 W の値の下位 4bit に変化はありません。
このように 1byte データの一部を構成する複数の bit を他の bit に影響を与えずにまとめて変化させる場面で OR と AND を使うことがあります。
なお、上図の例で SWAPF 命令が使われていますが、この命令はデータメモリー f の値の上位 4bit と下位 4bit を入れ替えた値を f または W に記録する命令です。 ここでは 1byte 長の値を上位・下位 4bit に分けて転送する目的で使っています。
一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。
「楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。