For a more deluxe (but of course larger) delay macro, see the results of the SX Microcontroller Serial Video Display contest at: http://www.sxList.com/techref/ubicom/lib/io/dev/video/servid.htm The delay used by SERVID has to have a lot larger range than 1024 cycles since the SX is running at over 40 million instructions per second. :-) -- Rich Mike Harrison wrote: > > While we're on the subject of inline delays, here's a handy 'delay any > number of cycles' (within reason!) macro I did when messing with > generating TV timings : > > usage : wait(n) delays n cycles, n = 0 to about 1024. > > shortwait macro del ; used by main wait macro > if (del>3) && (del<8) > call del7+(7-(del)) > endif > > if del <4 > if del>=2 > goto $+1 > endif > if ((del) & 1) == 1 > nop > endif > endif > endm > > ; main macro - generates code to wait for (del) cycles) > > wait macro del > > if (del)<0 > error 'negative delay' > endif > if (del)>=8 > movlw ((del)-8) /4 > call delay > shortwait ((del-8) % 4) > else > shortwait (del) > endif > endm > > delay > addlw 0ff > skpnc > goto delay > return > > del7 goto del5 ; 7 cycle delay > del6 goto del4 ; 6 cycle delay > del5 nop ; 5 cycle delay > del4 return ; 4 cycle delay > > -- > http://www.piclist.com hint: To leave the PICList > mailto:piclist-unsubscribe-request@mitvma.mit.edu -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu