picc里c语言延时不好计时,需要看汇编代码。我察看了一些资料上说对于<br />while(d--)编译后的汇编代码: <br /> bcf 3,5 <br /> bcf 3,6 <br /> movlw 10 <br /> movwf _delay<br /> l2 <br /> decf _delay <br /> incfsz _delay,w <br /> goto l2 <br /> return <br />但是,我经过试验后发现汇编代码为:<br /><br />while(d--);<br /> 3F5 0820 MOVF 0x20, W<br /> 3F6 1903 BTFSC 0x3, 0x2<br /> 3F7 03A1 DECF 0x21, F<br /> 3F8 03A0 DECF 0x20, F<br /> 3F9 0A20 INCF 0x20, W<br /> 3FA 1903 BTFSC 0x3, 0x2<br /> 3FB 0A21 INCF 0x21, W<br /> 3FC 1D03 BTFSS 0x3, 0x2<br /> 3FD 2BF4 GOTO 0x3f4<br />我就有点搞不明白了,请高手指点一下,难道编译器,编译出的汇编不一样么?<br /><br />对于for(x=100;--x;){;}经过编译后,<br />汇编为:<br />movlw 100 <br /> bcf 3,5 <br /> bcf 3,6 <br /> movwf _delay <br />l2 <br />decfsz _delay <br /> goto l2 <br />return<br />而我实验后汇编为:<br /> 3F3 1283 BCF 0x3, 0x5<br /> 3F4 00A0 MOVWF 0x20<br /> 3F5 01A1 CLRF 0x21<br /> 3F6 30FF MOVLW 0xff<br /> 3F7 07A0 ADDWF 0x20, F<br /> 3F8 1C03 BTFSS 0x3, 0<br /> 3F9 03A1 DECF 0x21, F<br /> 3FA 0821 MOVF 0x21, W<br /> 3FB 0420 IORWF 0x20, W<br /> 3FC 1D03 BTFSS 0x3, 0x2<br /> 3FD 2BF6 GOTO 0x3f6<br /><br /><br />请各位老大给几个延时函数,以便以后软件延时,谢谢 |
|