最速怪談選手権

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

A 回答 (2件)

「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です。

「このビットパターンを書き込んだら、こうなる」って言う仕様があるので、仕様通りに書き込めば、仕様通りの動きをします。

「誰かが、そうなるように決めた」のですから、決まりに従って記述するしかありません。

その決まりには「どうしてそうなる?」と言う疑問を挟む余地はありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/07 17:08

途中式とかいうより……そういう仕様なんでしょう。



おそらくPIC16F88…なんでしょうか。
http://tmp.junkbox.info/e16.html
で、OSCCONのBit4~Bit6の値によりクロックが決まるようですが。

000(31.25kHz)の時は元になる入力クロックのまま。
001になると、入力クロックを4倍に。
010になると、入力クロックを8倍に。
011になると、入力クロックを16倍に。
:            :
という感じですかね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/07 17:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!