マイコンシステムでスイッチ入力を実現する場合,入力ポートにスイッチを接続して利用するが,その入力ポートは8ビットレジスタで構成されていることが多い.
そのような場合,任意のポートに接続されたスイッチの状態を読み込む際に,8
ビットの入力データ中の不要なビットを 0 もしくは 1 に固定しなければならない場合がある.
そのような処理をマスク処理と呼ぶ.
特に,入力フィルタ処理等において入力データを比較する場合等は,スイッチ入力ポート以外のポートの状態は不要な情報であるのでマスク処理でビットを固定しなければ成らない場合が多い.
以下に,マスク処理のプログラム例を示す.
▼‘0’にマスクする場合 |
不要なビットを 0 にマスクする処理は論理積演算を利用することで実行できる.
すなわち,以下に示すように.0と AND をとったビット(例では第 4〜7 ビット)は 0 となり,1 と AND をとったビット(第 0〜3 ビット)は変化しないことを利用する.
|
|
01011101 |
(元のデータ) |
AND |
00001111 |
(マスクデータ:第 0〜3 ビット以外を 0 にマスクする) |
|
|
|
00001101 |
(マスク処理されたデータ) |
以下に POARTA の RA3 および RA4 に接続されたスイッチ入力処理におけるマスク例を示す.
この処理により,Wreg には RA3 および RA4 ビット以外は 0 にマスクされたデータが格納される.
MOVF PORTA,W
ANDLW B'00011000'
;mask(RA3,4 only) |
|
|
|
▼‘1’にマスクする場合 |
不要なビットを 1 にマスクする処理は論理和演算を利用することで実行できる.
すなわち,以下に示すように.1 と OR をとったビット(例では第 4〜7 ビット)は 1 となり,0と OR をとったビット(第 0〜3 ビット)は変化しないことを利用する.
|
|
01011101 |
(元のデータ) |
OR |
11110000 |
(マスクデータ:第 0〜3 ビット以外を 1 にマスクする) |
|
|
|
11111101 |
(マスク処理されたデータ) |
以下に POARTA の RA3 および RA4 に接続されたスイッチ入力処理におけるマスク例を示す.
この処理により,Wreg には RA3 および RA4 ビット以外は 1 にマスクされたデータが格納される.
MOVF PORTA,W
ANDLW B'11100111'
;mask(RA3,4 only) |
|
|
|
|
|