- 締切済み
PIC 10ビットをBCD変換をする方法おしえて
あるサイトで、8bitをBCD変換する方法をみつけました。それは 『 BCD変換くらいは人のプログラムを見るより算数で考えたほうが理解は簡単です。 ある8bit数 x があります。0~255ですね。求める10進数各桁は、100の位をA、10の位をBとします。 A、Bの初期値を0にします。 xが100以上なら、xから100を引いてAに1を加え、この行を繰り返します。xが100未満なら次の行へ。 これで100の位Aが分かり、xには元の数を100で割った余りが入っています。 xが10以上なら、xから10を引いてBに1を加え、この行を繰り返します。xが10未満なら次の行へ。 これで10の位Bが分かり、xには元の数を10で割った余りが入っています。つまり1の位はxです。 』 非常にわかりやすい説明です。ところで、10bitをBCD変換するには どうしたらいいでしょうか。たとえば、PICの10bitのA/Dコンバーターを 使うと、2bitのX_HIGHと8bitのX_LOWの二つのファイルに分割 されてでてきます。これをBCD変換したいんですが。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kuro804
- ベストアンサー率29% (523/1762)
PICのRAMは8bitの単位で構成されています。PICの命令(コード)もほとんどは8bitの数値を処理する命令です。従って10bitの値を扱うには工夫が必要です。 まず、数値の保存は8bitのRAMを2つ使います。これで8ビット以上16ビットまでの数値の保管ができます。ついでに上位桁をX_HIGHと、下位桁をX_LOWという名称を付けます。 例えばRAMの絶対アドレスとして割付例を示しますと(適当です) 50H X_LOW : A/D下位8ビット格納 bit0=A/D bit0 bit7=A/D bit7 51H X_HIGH : A/D上位2ビット格納 bit0=A/D bit8,bit1=A/D bit9 52H T_LOW : 保存用D下位8ビット格納 bit0=A/D bit0 bit7=A/D bit7 53H T_HIGH : 保存用上位2ビット格納 bit0=A/D bit8,bit1=A/D bit9 54H XBCD_LOW : 表示用BCDデータ1、2桁目格納 55H XBCD_HIGH: 表示用BCDデータ3、4桁目格納 56H TBCD_LOW : 処理用BCDデータ1、2桁目格納 57H TBCD_HIGH: 処理用BCDデータ3,4桁目格納 さて、質問者様は8ビットの例ではとてもわかりやすいとおっしゃってますので、”十分理解出来る”と解釈して同様のことを2バイトに渡って処理を行えば良いことになります。 しかしながら一般的には、基本は簡単もしくは理解可能の範囲で、現実的対処はとても煩雑です。努力しかありません。ただ同じ努力量を有効に使う手だてをお教え致します。 PICのメーカーサイトに行けば、数値演算用のライブラリーがあります。アッセンブラのソースが公開されていますので、これらを利用する方向で努力されれば1を知って100の応用が可能です。 PICの開発用総合環境ではシミュレーションが可能だと思いましたので、数値演算関連は容易に検証がおこなえます。 ”面倒だと”いうのは見なかったことにします。
- takepon256
- ベストアンサー率41% (391/936)
8bitが10bitになったところで計算方法はまったく変わりません。 入力値が0~1024になるので、最初に1000以上か/以下かの判定が入るだけです。 入力値をX、1000の位をA、100の位をB、10の位をCとすると、 x を1000で割った商=A、その余りを100で割った商=B、その余りを10で割った商=C、その余りが1の位になります。 (『 』の方法は引き算を繰り返すことで割り算を実現しています) >2bitのX_HIGHと8bitのX_LOWの二つのファイルに分割されてでてきます。 ここで何故「ファイル」が出てくるのか意味が良く分かりません・・・ ターミナルからそういうフォーマットにして出力し、ファイル化していると言うことでしょうか??
補足
マイコンチップpicの場合、処理能力が低くて一度に8bitの 数しか処理できません。10bitの数が出てきた場合、二つに わけて処理しなければならないのでめんどうです。 そこを知りたかったわけです。
お礼
回答ありがとうございます。 自己流プログラムでは、ひたすら引き算を繰り返す、という方法で やっておりまして、100をひいてカウントし、次に10をひくと いうのは、うまいと思いました。 10bitでもうまい方法があるのかと期待したのですが、そうは 簡単にはいかないようです。 とりあえずは「煩雑で、努力がいる」ということは理解しました。