【PIC-BCD変換-AN526】を使ってみる。(「Binary To BCD Conversion Routine」)

2021年2月21日

マイクロチップ社アプリケーションノート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右ニブルHbyteLbyte
結果万の位千の位百の位十の位一の位破損破損

フローの簡易説明

 ・ビットシフト
  最初にL_byteを左シフトして結果をH_byteに入れ込む・・・つまり
  L_byte→H_byte→R2→R1→R0
  のような感じでこれを16回繰り返します。
 ・10進補正
  R0~R2に入ってきた数字が5(B’0101′)を超えたら3を足します。

AN526のBCD変換

実際に0x63H(99)を入れてやってみる。

各BYTER1R2Lbyte
入れる値’00’’00’’63’

16bitは面倒くさいので8bitの8ステップでやってみます。
MAX255なのでH_byteは要りませんし3ケタなので、
R0そのものとR1の左ニブルには必要ありません。

各byteR1右R2左R2右LbyteLbyte右memo
step0—-—-—-01100011代入
step1—-—-—01100011Xnone
step2—-—-–01100011XXnone
step3—-—--01100011XXXnone
step4—-—-01100011XXXX+3
step4′—-—-10010011XXXX補正後
step5—-—10010011XXXXXnone
step6—--010010011XXXXXXnone
step7—-010010011XXXXXXX-3
step7′—-010011001XXXXXXX補正後
step8—010011001XXXXXXXX補正無

結果

R1=0、R2=10011001となりました。99っぽいです!
あとはキャラ変換すればシリアル通信でも使えそうですね!
例)百の位=H’30’+R1右、十の位=H’30’+R2左、一の位=H’30’+R2右
ニブルとは・・・4ビット。

よろしければバナーをクリックお願いします!