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件)
- 最新から表示
- 回答順に表示
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です。
御教授有難うございます。 movlw R2の意味は理解しているつもりですが いまいち理解できないのは定数R2をFSRに入れるプログラムですが、R2の値はrlf命令で変わると思います。その値(番地)がSFRに被りはしないかという事です。初心者なので説明がうまくできていない可能性が有ります。取りあえずブラックbox的に
使用し、徐々理解していきたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- 物理学 この問題における抵抗r1とxってどのように考えれば良いのでしょうか?トルクはT=P2/ωsなのでP2 1 2022/06/19 18:46
- その他(自然科学) 信頼度がR1、R2の機器を並列に接続した場合、システム全体の信頼度はどれか。答え1-(R1)(1- 2 2023/01/15 21:45
- 工学 CR発振回路 C1=C2=C=0.001【uF】 R1=R2=R3=16【kΩ】 R4は出力電圧が正 2 2023/05/10 19:13
- 中学校 中2の理科『電流と回路』について質問です。並列回路全体の抵抗は 1/R=1/R1+1/R2 で求めら 5 2023/02/14 20:52
- 工学 この回路でt=0でスイッチを開く時、t<0(定常状態)の時、電流はR2には流れないのですか? 答えを 3 2022/07/02 15:44
- 工学 図のサイリスタ制御調整回路において、 UJT 電源回路にコンデンサをいれて 、R1-UJT-R2間に 1 2022/06/23 14:03
- 工学 図のサイリスタ制御調整回路において、 UJT 電源回路にコンデンサをいれて 、R1-UJT-R2間に 1 2022/06/25 08:17
- 物理学 写真の問題について質問なのですが、解説を見る限りc1とc2の電気量は等しくないように思えます。 しか 4 2023/07/01 21:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
数字の位ごとの値を表示するプ...
-
VBAで配列のNULL判定
-
VB6.0-整数と余りを求める
-
足して100になるような乱数のア...
-
VBAでC列が入力済みならそのま...
-
1つ前の値を変数に保存する方法
-
Nullってどういう意味ですか?
-
c++ 二体問題のソースコードを...
-
VBAのチェックボックス結果を集...
-
VBAの定数の使い方で、計算値を...
-
C言語でCLAMP(a,b,c)
-
C#の問題で2つの整数a,bの...
-
C言語 乱数を階級分け
-
VBAで72時間タイマーがオーバー...
-
世界のナベアツ
-
ラジオボタンの値の取得につい...
-
c言語で乱数を扱うときの
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
フォームを開くときに、コンボ...
-
Excel-vba 文字列と変数を...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
足して100になるような乱数のア...
-
フリーランタイマーの時間差分...
-
DataGridView 複数行同時変更...
-
相関係数p値の出し方
-
世界のナベアツ
-
10進数をアスキーコードに変換
-
C#で動的にコントロールを取得...
-
ラジオボタンの値の取得につい...
-
DWORDって
-
バッチファイルで正規表現を使...
-
4択問題のプログラムでランダム...
-
1つ前の値を変数に保存する方法
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
おすすめ情報