アマチュア無線や電子工作,バイクの話などを徒然なるままに書き散らすメモ程度のblogです.


by jq1ocr

__delay_ms を作る

昔のトラ技のオマケ基板 dsPIC30F2012 を使って実験していますが(コンパイラは C30),HI-TECH-C で使っていた__delay_ms に相当するものが分かりませんでした.仕方ない.空ループで作ってみよう.というわけで,やってみることにしました.クロックは 29.48MHz らしいのですが,空ループ命令が何ステップなのか知らないので,まずはどれだけ空回しすれば 1ms になるのか調べてみます.まずは1000ループ.
#include <p30f2012.h>
void main(void){
 int i;
 TRISCbits.TRISC13=0;

 while(1){
   _RC13=0; // set LED in red
  for(i=0;i<1000;i++){}
  _RC13=1; // set LED in green
  for(i=0;i<1000;i++){}
  }
}
こうしてオシロで見ると,LED が約 2.75ms 毎にオンオフすることが分かりました.ここから逆算して364回で 1ms になるわけですが,実際には調整して362回がほぼ1msになりました.見た目が悪い(というか,今後プログラムを書くときに面倒な)ので,関数にして外に置いたところ,1ms より大きくなりましたので,計算し直したところ,256回ループが丁度良くなりました.

うーん,しかしこれはあまりスマートじゃないなぁ.やっぱりタイマーを使った関数を作ろう.でもリソース的にはこっちのほうが小さくなったりして?
[PR]
by jq1ocr | 2009-10-27 21:26 | マイコン・電子工作 | Comments(0)