【PIC-BCD変換-AN526】を使ってみる。(「Binary To BCD Conversion Routine」)
マイクロチップ社アプリケーションノートAN526のBCD変換を使ってみます。
動き方を理解しないまま使うなんてできない!
なのでAN526「Binary To BCD Conversion Routine」を元に実数を入れ込んで結果を見てみます!
理論はこちらを参照ください。
シフトを繰り返してキャリーを数珠繋ぎに入れ込んでいけばいいみたいですね。
AN526のダウンロードはこちらから
用意するレジスタ
・BCD変換データ:R0、R1、R2
・Binaryデータ:H_byte、L_byte
・添付(計算時に利用):temp
・カウンター:count
計7byte用意する必要がありますね
各ニブル | R0左ニブル | R0右ニブル | R1左ニブル | R1右ニブル | R2左ニブル | R2右ニブル | Hbyte | Lbyte |
結果 | — | 万の位 | 千の位 | 百の位 | 十の位 | 一の位 | 破損 | 破損 |
フローの簡易説明
・ビットシフト
最初にL_byteを左シフトして結果をH_byteに入れ込む・・・つまり
L_byte→H_byte→R2→R1→R0
のような感じでこれを16回繰り返します。
・10進補正
R0~R2に入ってきた数字が5(B’0101′)を超えたら3を足します。
実際に0x63H(99)を入れてやってみる。
各BYTE | R1 | R2 | Lbyte |
入れる値 | ’00’ | ’00’ | ’63’ |
16bitは面倒くさいので8bitの8ステップでやってみます。
MAX255なのでH_byteは要りませんし3ケタなので、
R0そのものとR1の左ニブルには必要ありません。
各byte | R1右 | R2左 | R2右 | Lbyte | Lbyte右 | memo |
step0 | —- | —- | —- | 0110 | 0011 | 代入 |
step1 | —- | —- | —0 | 1100 | 011X | none |
step2 | —- | —- | –01 | 1000 | 11XX | none |
step3 | —- | —- | -011 | 0001 | 1XXX | none |
step4 | —- | —- | 0110 | 0011 | XXXX | +3 |
step4′ | —- | —- | 1001 | 0011 | XXXX | 補正後 |
step5 | —- | —1 | 0010 | 011X | XXXX | none |
step6 | —- | -010 | 0100 | 11XX | XXXX | none |
step7 | —- | 0100 | 1001 | 1XXX | XXXX | -3 |
step7′ | —- | 0100 | 1100 | 1XXX | XXXX | 補正後 |
step8 | —0 | 1001 | 1001 | XXXX | XXXX | 補正無 |
結果
R1=0、R2=10011001となりました。99っぽいです!
あとはキャラ変換すればシリアル通信でも使えそうですね!
例)百の位=H’30’+R1右、十の位=H’30’+R2左、一の位=H’30’+R2右
ニブルとは・・・4ビット。
ディスカッション
コメント一覧
まだ、コメントがありません