PIC用nop関数

#define JOIN(x, y) x ## y
#define nop() asm("nop")
#define NOP1 nop()
#define NOP2 NOP1;nop()
#define NOP3 NOP2;nop()

/* 中略 */

#define NOP100 NOP99;nop()

#define NOP(n) JOIN(NOP, n)

NOP(10); /* これでnop10回分になる */

このコードの良いところは、__delay()関数シリーズより正確(本当にnopを並べているだけだから)という点です。
いちいちNOP1から1つずつ定義する必要がありますが
(マクロ関数なので再帰関数は作れない)、
必要なものだけ作ってもいいので、その辺は臨機応変に。
例えば、NOP30とNOP40だけほしいのなら、

#define JOIN(x, y) x ## y
#define nop() asm("nop")
#define NOP5 nop();nop();nop();nop();nop()
#define NOP10 NOP5;NOP5
#define NOP30 NOP10;NOP10;NOP10;
#define NOP40 NOP30;NOP10

#define NOP(n) JOIN(NOP, n)

とやればOKです。