• ベストアンサー

2進数が10進数になる途中式

お世話になります。 PICのプログラムでOSCCON = 0b01110000; //内蔵発振器 8MHz使用 この様な記述があります。 どの様にしたら8MHzが0b01110000になるのか 分かりやすく教えてください宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「ICチップの仕様で、そう決まっている」のですから「どの様に」と言われても困ります。 PICの仕様書 http://www37.tok2.com/home/aoijf2/pic/initial.html の「OSCCON」を見てみなさい。 そこに bit 7  未使用 bit 6~4  内蔵オシレータ周波数選択ビット (bit 6 bit 5 bit 4)  ・111 = 8MHz  ・110 = 4MHz  ・101 = 2MHz  ・100 = 1MHz  ・011 = 500kHz  ・010 = 250kHz  ・001 = 125kHz  ・000 = 31.25kHz bit 3  未使用 bit 2  内蔵オシレータ周波数安定ビット  ・1 = 安定  ・0 = 非安定 bit 1~0  未使用 と書いてあります。 OSCCONレジスタに書き込みしている値が0b01110000なら、 bit 7  未使用 bit 6~4  内蔵オシレータ周波数選択ビット (bit 6 bit 5 bit 4)  ・111 = 8MHz bit 3  未使用 bit 2  内蔵オシレータ周波数安定ビット  ・0 = 非安定 bit 1~0  未使用 になるので、8MHzです。 「このビットパターンを書き込んだら、こうなる」って言う仕様があるので、仕様通りに書き込めば、仕様通りの動きをします。 「誰かが、そうなるように決めた」のですから、決まりに従って記述するしかありません。 その決まりには「どうしてそうなる?」と言う疑問を挟む余地はありません。

mihiro3
質問者

お礼

分かりやすく丁寧な回答 まことにありがとうございます。 先入観から10進数を2進数で表した物 だと思っていました。 納得できました。 ありがとうございました。

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

途中式とかいうより……そういう仕様なんでしょう。 おそらくPIC16F88…なんでしょうか。 http://tmp.junkbox.info/e16.html で、OSCCONのBit4~Bit6の値によりクロックが決まるようですが。 000(31.25kHz)の時は元になる入力クロックのまま。 001になると、入力クロックを4倍に。 010になると、入力クロックを8倍に。 011になると、入力クロックを16倍に。 :            : という感じですかね。

mihiro3
質問者

お礼

まだ、プログラム読み始めて日が浅くて この様な決まりで成り立ってるとは知りませんでした。 とても勉強になりました。 ありがとうございました。