PORTA ^= 0x10;
LEDを点滅させるときによく見かけるコード。
この例はRA4に接続してあるLEDを点滅させる。
「ビット単位の排他OR代入演算子」と言うんだって。
そもそも「排他OR」がよく分からないレベルだが、こういうことらしい。
排他的論理和 xor(exclusive or)
同じなら0で違ったら1ってことかな。
PORTAの8ビットに対して上の演算をすると、00010000とのxorを取るので、5ビット目は必ず反転して、その他は元のままということになる。
つまり、RA4に接続してあるLEDを点滅させることになる。
私が書くと、
PORTAbits.RA4 = ~PORTAbits.RA4;
とか、
PORTAbits.RA4 = ^1;
とかかな。
なんで他のビットまで考慮してまとめて扱うのかよく分からないが、PICがらみのコードだとそういう作法が多い。
もしかして、基本、PORT単位での代入しか出来ないんだろうか。
いずれにしても、C言語で書いてコンパイラ任せの場合には考慮する必要のないことなのかもしれない。