ハード制御等で、タイミングを取るためにCPUに対してなるべく正確で短いWaitを入れたい場合、NOPなどの方法があるが、なるべくコード数を減らしたい場合以下のコードはいかが?
最大3ワード(PIC18Fの1命令は16bitです。)のサブルーチンです。
NOPを16個並べるよりも、Call wait1us としたほうが可読性もあがります。
**********************************************************************************
PIC18Fで4Foscで1命令実行するので、Fosc=64MHz動作時の場合、InstCycle=62.5nSとなります。
最大3ワードのサブルーチンですが、Call命令で呼出す位置により1uS,0.5uS,0.25uSのWaitを生成できます。
; 64MHz Inst/4clk 1Instruction 数値は消費クロック数 (62.5nS/Inst)
wait1us ; 2[call] + (8+4) + 2[ret] =16Clk = 1uS
call wait500ns ; 8ck
wait500ns ; 2[call] + 4 + 2[ret] =8Clk = 500nS
call wait250ns ; 4ck
wait250ns ; 2[call] + 2[ret] =4Clk = 250nS
return