メディア
連載
» 2021年12月06日 10時00分 公開

BCD(2進化10進数)って何?Q&Aで学ぶマイコン講座(67)(2/3 ページ)

[STマイクロエレクトロニクス,EDN Japan]

BCDとは?

 BCDとは、10進数の1桁を、0から9までを表す2進数の4桁で表現したものです。表1に、0から15までの10進数と、それぞれに対応する2進数、16進数およびBCDを示します。

表1:BCDの対応表[クリックで拡大]

 10進数の0から9までは、16進数と同じなので、BCDに変換する必要はありません。しかし、10進数の10から15までは、16進数では英字になってしまうので、変換しなければなりません。例えば10進数の「10」は、16進数では「A」です。これをBCDに変換すると10になって、1桁上がります。2進数の4桁では9までしか表現できないため、さらに2進数の4桁を追加して、8桁で表現することになります。

 表1には、10進数の15までしか示していませんが、これよりも大きい数字も同じように変換されます。例えば、10進数の20は16進数で14ですが、BCDで20に変換されます。また、10進数の30は16進数で1Eですが、BCDで30に変換されます。10進数の10より大きい数字については、次ページで詳しく解説します。

BCDへの変換方法

 BCDへ変換する方法は、比較的簡単です。数値の大きさによって6の倍数を加えれば良いだけです。演算結果をチェックして、9よりも大きい数であれば、6を加えます。9以下であれば何もしません(表2)

表2:BCDの変換方法[クリックで拡大]

 BCDで9よりも大きい数字を表現するには、2進数の8桁が必要ですので、上位に4桁が追加されます。9よりも大きい数に6を加えると、必ず4桁目にキャリーが発生します。このキャリーをハーフキャリーと呼びます。マイコン内部でBCD変換の演算を行う際には、ハーフキャリーをチェックすることによって、9よりも大きい数を判別します。

 ハーフキャリーについては、「Q&Aで学ぶマイコン講座(66):CCR(Condition Code Register:条件コードレジスタ)の役割」のH(ハーフキャリービット)を参照してください。

 10進数の9から15まで、すなわち16進数のAからFまでには6を加えることでBCDに変換できます。

 さらに、それよりも大きい数字の変換方法を表3に示します。ここでは、10進数の10から39(16進数のAから27)を示します。10進数の10から19の場合は6、20から29の場合は12、30から39の場合は18を加えます。このように、数の大きさによって6の倍数を加えることで、簡単にBCDに変換できます。

表3:BCDの変換方法[クリックで拡大]

 「簡単にBCDに変換できます」と書きましたが、実はこれをソフトウェアで実現するのは結構面倒です。入門編の本記事では詳しく解説しませんが、興味のある方は是非調べてみてください。基本は10で割った商に6をかけて、元の数字に加えれば良いのですが、さらに効率良く変換するさまざま々なアルゴリズムが紹介されています。

マイコン内部のハードウェアでは、商を求めるのが難しい*1)ので、各ビットの値をチェックして、それに応じて6の倍数を加算する回路が使われます。

 例えば、マイコンに内蔵されているリアルタイムクロック(以下、RTC:Real Time Clock)で取り扱う数字を考えてみます。RTCとは時刻クロックタイマーで、時計とカレンダー機能を実現する機能です。

 分や秒を計算する際の最大値は59です。時刻の最大値は12または24です。そのため、BCDに変換する最大値を59や24に制限できます。すなわち、一般的なBCDで2桁を表す場合でも、RTCに限定すれば8ビット全部を必要としないで、6ビットや7ビットで表現できます。さらに1の位と10の位で分けて変換するように設計すれば、ハードウェアの論理規模も最適化できます。

 実際にマイコンに搭載されているRTCのBCDレジスタを次ページで解説します。

*1)マイコン入門!! 必携用語集(5):実は足し算しかできない!?「補数」「シフト」で四則演算しているマイコン

Copyright © ITmedia, Inc. All Rights Reserved.

RSSフィード

公式SNS

EDN 海外ネットワーク

All material on this site Copyright © ITmedia, Inc. All Rights Reserved.
This site contains articles under license from AspenCore LLC.