楽々PIC

水田除草と言うブログを書いていますが、PIC関連の記事が意外に人気で驚いています。 PICを使った電子工作に興味を持つ方が多いことを知って、一緒にPICを学ぶブログを作りたいと思いました。 「楽々PIC」は教材と言うよりも少し実用性?のある楽しい道具を作りながら学ぶブログを目指します。

Status

18F: DECF とボロー

RRP1320-1-03 は減算タイマーの処理で DECF を使っていますが、2byte 以上のデータを扱うとボロー(桁下がり)の処理が必須にです。 引き算 SUBWF では上位 byte の引き算に SUBFWB を使ってボロー(Cの反転)を引き算しますが、DECF でも同様にキャリーフラグが動作するのか調べてみましたが納得できる資料が見当たらないので実験で確かめることにしました。 <PICデバイス=18F1320>


下図をソースに書き足し、行番号の右隣で灰色の部分をダブルクリックして、ブレークポイントを設定します。

DECF_Break


Run して、ブレークポイントで止まった所で、下図のように Watch ウィンドウで DECF 後の値と、STATUS レジスターの中を表示させます。

DECF_Break_STATUS


プログラムを書き換えて DECF 処理前の値毎に記録したのが下表です。 ついでですから、N , OV , Z , DC , C と言った全てのステータスフラグについて記録しました。

 N     演算結果が負を示すネガティブフラグ
 OV  符号付き演算のオーバーフローフラグ(7bit を超えると1)
 Z     演算結果が0を示すゼロフラグ
 DC  演算結果が下位 4bit からのオーバーフローを示すデジットキャリーフラグ
 C     演算結果が 8bit からのオーバーフローを示すキャリーフラグ

DECF_結果

やはり、DECF 直後にキャリーフラグの反転をボローとして扱えるようです。 DC の反転も上位 4bit からのボローとして機能しています。 何ごとも自分で確かめれば自信を持って先に進めます。


18F ニーモニックと小技のインデックスはこちら → 18F: テーブル・ジャンプ 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。






ゼロフラグ と キャリーフラグ

 演算結果によって変化するステータスフラグの内、ゼロフラグとキャリーフラグについて説明します。 ゼロフラグはループ処理の終了判定と言った場面で頻繁に使いますし、キャリーフラグは8bit長を超える数値演算で重要な役割を果たします。 ニーモニックによってステータスフラグが変化するものと、そうでないものがありますから命令一覧表などで確認して使います。 期待した変化が得られない命令の後でステータスフラグによる分岐命令を書くと、不安定な動作を伴うバグとなって原因解明に苦労する場合があります。

ステータスフラグはSFRの一つ、STATUS の値です。 SFRもデータ・メモリーと同様に読み書きできますが、通常ステータスフラグを直接読んだり書き換えることは行わず、ステータスフラグの内容によって分岐する命令( BC , BNC , BNZ , BZ など)や、キャリーフラグ(またはボロー)の値を演算に含める命令( ADDWFC , SUBFWB , SUBWFB など)を使うことで活用されます。 (PICにボローフラグは無く、減算命令後のキャリーフラグの反転を使います。)


<<< ゼロフラグ >>>

間接アドレッシング」で例示したソースリスト(下図)の31行目に BZ 命令を使っています。 30行目の MOVF で W に読み出した値によってゼロフラグが変化し、31行目でゼロフラグの値が1なら hotz に分岐します。
MOVF 命令でゼロフラグが変化することを確かめて使っています。

Block3



<<< キャリーフラグ >>>

キャリーフラグは8Bit長からの桁あふれ(オーバーフロー)を示すステータスフラグです。 下図の筆算で各桁毎に「1繰り上がる」場面でキャリーフラグの値が1になります。 10進数の筆算では一桁が0~9の値ですが、8bit長では0~255の値をカバーします。

carry

キャリーフラグは「掛け算(乗算)」の例、参照アドレス計算の中で ADDWFC 命令を使って活用しています。

他のステータスフラグについては、必要の応じて別の記事で紹介します。


一連の記事のインデックスは 「とにかくビルド!」の末尾をご覧下さい。


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



ダウンロードコーナー
記事検索
アンケートに御協力下さい


アーカイブ
楽々PIC 宛てBlogMail


--- ご了承下さい ---

注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
QRコード
アクセスカウンター

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ