作るって言っても人様のコードをもらって来ただけだ。 C++ #define SYS_CLK_FREQ 8000000 void delay_m(unsigned int msec){ //volatile unsigned int start = _CP0_GET_COUNT(); unsigned int start = _CP0_GET_COUNT(); while( _CP0_GET_COUNT() - start < ( msec * SYS_CLK_FREQ / 2 / 1000 ) ) Nop(); return; } 123456789 #define SYS_CLK_FREQ 8000000 void delay_m(unsigned int msec){ //volatile unsigned int start = _CP0_GET_COUNT(); unsigned int start = _CP0_GET_COUNT(); while( _CP0_GET_COUNT() - start < ( msec * SYS_CLK_FREQ / 2 / 1000 ) ) Nop(); return;} _CP0_GET_COUNT() はコア・タイマーの値を返すらしい。 差を調べてある値になるまで待つというコードになっている。 msecにはミリ秒単位の待ち時間を渡す。 volatile で宣言しないと、という記述を見かけたが、問題無いようだ。 なんか、後で見たら、いろんな種類のPICについてそれぞれdelayの話題を書いてる。 Tweet