Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

PIC16F88とPIC16F1827の処理速度の差

某巨大掲示板で、「PIC16F88からPIC16F1827に移植したら、すげえ速くなっちまったのはなぜでしょう。」
と書いてる人がいて、そりゃPLLの設定でしょうと思った。
やり取りを読んでいると、「クロックの設定も同じだし、PLLは使ってない。」とご本人が言い張っている。
へえ、そうなの、変だねと思ったが、本人がそう言うならそうなんだろうと思って口出しせずに黙って見ていた。

その中で、PIC16F88とPIC16F1827では
>メモリーアクセス方法が変わって、
>連続でアクセスできるので、
>バンク切り替えがない分高速になる場合があります
と書いてる人がいたので、それは面白いなと思って確かめてみた。

コードはこんな風に、Configuration BitsとANSEL意外は全く同じ。
もちろん、PIC16F1827のPLLは使わないようにして、両方とも8MHzで動かしている。
pic16f88_1827_01
Simulator上で時間を比べると、確かにこの程度違いが出る。
pic16f88_1827_02
このように、ブレーク・ポイントを設定して、LEDの点滅の間隔を比較している。
pic16f88_1827_03
これが実際にPIC16F88とPIC16F1827を同時に動かして、ロジアナで信号を拾ってみた結果だ。
Simulatorの結果と合っている。
pic16f88_1827_04
実行中の写真。
pic16f88_1827_05
ちなみに、NOP();をひとつはさんだforループを比較するとこんな感じになる。
pic16f88_1827_06
ループのカウンタとして上から順にchar、short、longを使っている。
だからなんだ、といえば特に何でも無いのだが、あえて言えばPIC16F88はもう不要だよねという話になるか。
ちゃんと時間稼ぎするなら__delayを使えばいいし、他の処理に影響しないようにしたければタイマーを使って割り込みを発生されればいいわけで、結局、多少変わってもかまわない適当な時間稼ぎの場合にしか使わないわけだ。
あと、結局のところ、何倍も速くなっちゃう原因は何だったんだろう、こっちにはそれこそ何の興味も無いが。

このエントリーをはてなブックマークに追加

Posted under: PIC16F1827, PIC16F88


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.