目次
前
次
シフト処理
シフト処理は、乗算やレジスタの特定ビットのセット
リセットをする場合に使うことが多いでしょう。
自分の場合、次のようなときにシフト処理を使います。
- 2のべき乗の値を知りたい
- 数値の中の指定ビットの値を使いたい
- スイッチのチャタリングを除去したい
- 乗算を高速で実現したい
- レジスタの中の指定ビットのセット、リセット
- マトリクスLEDのパターン移動
シフトのワードは、以下。
- d2* ( d1 -- d2 ) Arithmetric left-shift
- d2/ ( d1 -- d2 ) Arithmetric right-shift
- arshift ( x1 u -- x2 ) Arithmetric right-shift of u bit-places
- dshl ( ud1 -- ud2 ) Logical left-shift, same as d2*
- dshr ( ud1 -- ud2 ) Logical right-shift
- rshift ( x1 u -- x2 ) Logical right-shift of u bit-places
- lshift ( x1 u -- x2 ) Logical left-shift of u bit-places
- shr ( x1 -- x2 ) Logical right-shift of one bit-place
- shl ( x1 -- x2 ) Logical left-shift of one bit-place
これらのワードを利用し、自分が使うときの処理を実験します。
2のべき乗の値を知りたい
左シフトを利用すれば、2の8乗、2の12乗を求められます。
数値の中の指定ビットの値を使いたい
左シフトで指定ビットをセット。
論理積を使い、指定ビットのみ取得して、右シフトでLSB(最下位ビット)
まで移動させて、表示してみます。
スイッチのチャタリングを除去したい
ピンを入力に設定してから、時間をおいて1ビットずつ入力し
連続して2ビットか3ビットが同じ論理値になれば、その値と
して採用します。
乗算を高速で実現したい
2のべき乗を利用して、7倍するようなときは
左シフトを使っています。
16ビット、32ビットのマイコンでは、乗算命令が
あるのが普通ですが、8ビットでは用意されない
ことも多いです。
そこで、シフトを利用して2のべき乗を使って
加算を繰り返すよりも、高速で計算させるときに
使います。
レジスタの中の指定ビットのセット、リセット
レジスタの中で、指定ビットのセット、リセットを使う場面は
マイコン内蔵のモジュールを利用するときでしょう。
A/Dコンバータのための初期化を通して、指定ビットのセット
リセットを見ていきます。
最後のワードを定義では、特定ビットのセット、リセットに
シフトのワードを利用するとともに、スタック内に複数の数値
を入れて、論理和で合体しています。
論理和で数値を合体していくとき、その値をCPUの
レジスタを使うのではなく、スタックに入れてます。
CPUの中のレジスタが少ないマイコンにとっては
レジスタの数が、無尽蔵と解釈できます。
目次
前
次