• 締切済み

バイナリーBCD変換アプリAN526ついて

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する?   以下省略

みんなの回答

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.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です。

o942233k
質問者

お礼

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

関連するQ&A