--「PIC」プログラミング再び (6)---

 現在使用しているフリーのコンパイラで、__delay_μs()
 という単なる待ち時間の関数が使える。以前から使えたのか、
 あるヴァージョンかから使えるようになったのかは、分から
 ないが、前述の教科書のように自分で関数をつくらなくて
 いいので便利だし、結構使う関数だと思う。
 ただ、実際のところ、どのぐらい時間なのか、あれこれやって
 いるプログラムで簡易的に測定してみた。
 PICで
 for(;;){
RA1=1;
__delay_us(1);
RA1=0;
__delay_us(1);
}
 のプログラムを実行すると、矩形波が生成できるので、
 __delay_us(1)と__delay_us(2)と赤の部分を変更して、両者
 の差を見てみると、たぶん、実際の待ち時間が分かる。
 Cの場合は、1命令の実行時間がわからないので、命令
 の実行時間を相殺しないと、実待ち時間が分からないよう
 に思う。
 __delay_us(1)のオシロの画面で、Hの時間は、約40μs。

 

 __delay_us(2)のオシロの画面で、Hの時間は、約56μs。

 

 56-40で、__delay_us(1)の実時間は、16μsということになる。
 約16倍の待ち時間である。ちなみに、__delay_us(3)にしてみると、
 Hの時間が約72μsなので、16μsずつ増えている。
 やはり、細かい制御をするには、命令のクロック数の分かって
 いるアセンブラー。でも、アセンブラーは、私には、超難解。
 Cが似合ってる。