Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PORTA ^= 0x10;

PORTA ^= 0x10;
LEDを点滅させるときによく見かけるコード。
この例はRA4に接続してあるLEDを点滅させる。
「ビット単位の排他OR代入演算子」と言うんだって。
そもそも「排他OR」がよく分からないレベルだが、こういうことらしい。
排他的論理和 xor(exclusive or)
xor
同じなら0で違ったら1ってことかな。

PORTAの8ビットに対して上の演算をすると、00010000とのxorを取るので、5ビット目は必ず反転して、その他は元のままということになる。
つまり、RA4に接続してあるLEDを点滅させることになる。
私が書くと、
PORTAbits.RA4 = ~PORTAbits.RA4;
とか、
PORTAbits.RA4 = ^1;
とかかな。
なんで他のビットまで考慮してまとめて扱うのかよく分からないが、PICがらみのコードだとそういう作法が多い。
もしかして、基本、PORT単位での代入しか出来ないんだろうか。
いずれにしても、C言語で書いてコンパイラ任せの場合には考慮する必要のないことなのかもしれない。

このエントリーをはてなブックマークに追加

Posted under: PIC


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.