学习picc这么长时间了,但是一直对于软件延时很不理解。发现通过c语言设计的延时函数,经过编译后的汇编代码都不一样,很不明白!例如<br /><br />参考本网站的picc设计技巧的**cypok的言论搜集,发现许多好像不正确。例如文中说<br /><br />x=100;while(--x){;} <br />汇编后: <br /> movlw 100 <br /> bcf 3,5 <br /> bcf 3,6 <br /> movwf _delay <br /> l2 decfsz _delay <br /> goto l2 <br /> return <br /><br />但是我做了不是这样的,还有<br /><br />最能精确控制指令时间的: <br />void delay(char x,char y){ <br /> char z; <br /> do{ <br /> z=y; <br /> do{;}while(--z); <br /> }while(--x); <br />} <br />其指令时间为:7+(3*(Y-1)+7)*(X-1)如果再加上函数调用的call指令、页面设定、传递参数<br />花掉的7个指令。则是:14+(3*(Y-1)+7)*(X-1)。<br /><br />我不知道有没有人用,经过实验了没有?对于高手怎么设计延时函数,难道只看stopwatch?对于简单的延时难道非要用硬件延时?请高手出来说句话阿!<br />
|