アプリ版:「スタンプのみでお礼する」機能のリリースについて

PICの入門者です。温度計を作るべくプログラムを勉強しているのですが、温度表示をする際、バイナリ-からBCDに変換するには、書物によるとMicro chip社のアプリケーションンノートAN526をコピー使用すると良いことが記述されており、実際コピーしてい使用すると問題ないのですが、プログラムのアルゴリズムは何とか理解できましたが、プログラムの詳細が解りません。どなたかアドバイス頂ければ有り難いです。
(理解できない部分)
1、定数 L_byte、H_byte、R2、R1、R0をrlfを実行して decfsz count,Fでcountが16以内であれば adj DECにジャンプする訳ですが、そこでmovlw R2(R1,R0)→ movwf FSR となっていますがこの間接アドレッシングの方法が?  

2、さらにSUBルーチン adjBCD でmovlw 3 →  addwf  0,w  とありますがここでaddwf 0,wの0はINDFを指している理解しましたが正しいでしょうか?

 *R2(R1,R0)の値が指定するメモリー番地の値となると変数R2(R1,R0)の値は8bitの範囲で変化するのでSFRの番地に被ってしまわないか?ということです。
私の考え方間違っていると思いますがご指摘ください。
アプリケーションAN526抜粋
B2_BCD
       bcf  STATUS,0
       movlw .16
      movwf count
       clrf R0
      clrf R1
      clrf R2

RHloop16
       rlf L_byte,F
      rlf H_byte,F
      rlf R2,F
      rlf R1,F
      rlf R0,F

       decfsz count,F
      goto adjBCD
      retlw 0

adjDEC
      movlw R2  ←変数R2の値は8bitの範囲で変わると思われるがSFRに被ることはない 
      movwf FSR  ←
      call adjBCD
      movlw R1
      movwf FSR
      call adjBCD
      movlw R0
      movwf FSR
      call adjBCD
      goto RHloop16

adjBCD
      movlw 3
      addwf 0,w  ←  0はINDFの意味?つまり定数R2,1,0の指定する番地の値に+3する?

  以下省略

A 回答 (1件)

1.


誤読していますね。
> movlw R2  ←変数R2の値は8bitの範囲で変わると思われるがSFRに被ることはない
R2の意味に惑わされないでください。
movlwは、定数をWに入れる命令です。決して変数を扱うことはできません。
R2は変数名のように思っているかもしれませんが、これはただの定数です。
この定数を、
rlf R2,F
と使えば「R2」番地にあるレジスタの内容に対して処理できますし、
movlw R2
と使えばその番地そのものをWに入れることができます。

2.
> addwf 0,w  ←0はINDFの意味?つまり定数R2,1,0の指定する番地の値に+3する?
はい、addwfの1つ目のオペランドはファイルレジスタの番地を示すので、0はINDFです。
    • good
    • 0
この回答へのお礼

御教授有難うございます。 movlw R2の意味は理解しているつもりですが いまいち理解できないのは定数R2をFSRに入れるプログラムですが、R2の値はrlf命令で変わると思います。その値(番地)がSFRに被りはしないかという事です。初心者なので説明がうまくできていない可能性が有ります。取りあえずブラックbox的に
使用し、徐々理解していきたいと思います。

お礼日時:2014/04/15 21:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!