ようこそ!JQ2RVNのブログです。
PICを使っていろいろな物を作ろうと画策中です。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
16bitPICには、1つの演算でも色々な形式があるのでまとめてみます。
基本演算(ADDとかANDとか・・・)には引数の形が5つあります。 ADDの場合を例にして、解説します。 ADD f (e.g.) ADD xxx f = f + WREGの演算が行われます。 PIC16などと同じような演算ができます。 ( ADDWF xxx , f と同様) f はレジスタのアドレス。 WREGはW0に入っている実データです。 ADD f , WREG (e.g.) ADD xxx , WREG WREG = f + WREGの演算が行われます。 上記と同様ですが、結果が入る場所が違います。 (PIC16の ADDWF xxx , W と同等) ADD #lit10,Wn (e.g.) ADD #0x21 ,W1 (W1 = 0x21 + W1) Wd = #lit10 + Wdのリテラル計算がおこなわれる。 Wnはポインタ指定可能?? lit10は10ビットのリテラル。 ADDLWと同等。 ADD Wb , Ws , Wd (e.g.) ADD W2 , W3 , W1 ( W1 = W2 + W3 ) (e.g.) ADD W2 , [W3] , [W1 ] (W2の値とW3の示すレジスタの値を足し、W1の示すレジスタに入れる) Wd = Wb + Wsの計算がおこなわれる。 引数の順序は、逆ポーランドっぽいw Ws , Wdはポインタ指定が可能。 ADD Wb , #lit5 , Wd Wsが5ビットのリテラルに変わっただけ。 Wdはポインタ指定が可能。 以上の5つの形式。 なお、Ws , Wdはポインタ指定ができて、 たとえばW0にアドレスを入れてその数値を 読み書きしたい場合には[W0] と書く。 ポインタの場合には、インクリメント・デクリメントも書けるので [W0++] [W0--] [++W0] [--W0]とすることもできる。 Wnは凡例に載ってないからポインタでできるかどうか不明です。 というか、データシートに例もなく、説明も少ない。 MicrochipとしてはC言語を使うのが前提なのでしょうね。 でも、アセンブラを使わないといけないこともあると思うので、 1つ位、例をあげてくれたらいいのになんて思いました。 この形式の演算は 加減:ADD , ADDC , SUB , SUBB シフト:ASR , LSR , SL 論理:AND , XOR , IOR に適応できます。 PIC16にもあるのはパスして、 ADDCはキャリー付き。SUBBはボロー付き。 ASRは算術シフト。LSRは論理シフトです。 (PIC16に比べると便利そうですね~) 以上、もろもろの製作例や、データシートに断片的に出てくるアセンブラなどなどから 類推なども含めてまとめました。 よって間違えがあるかもしれないので、あしからず。 もし、間違えなどありましたら、ご指摘いただければうれしいです。 PR |
カレンダー
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。 まずは、本家を解析しています。
カテゴリー
最新記事
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
ブログ内検索
最古記事
(05/18)
(05/19)
(05/19)
(05/20)
(05/21)
アクセス解析
|