1、延時時間是由產(chǎn)生的匯編代碼所決定的,C語言語句只是個假象,千萬不要以為C語言一行就是一條指令!此處由于涉及到雙字節(jié)減法,因此會有額外的判斷,編譯結果每次循環(huán)耗費幾十個周期毫不奇怪。
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比康縣網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式康縣網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋康縣地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。
2、在使用PIC16F877A單片機時,如果使用定時器0,那么最好不要寫TMR0,因為每次的寫操作都會導致定時器0的預分頻器清零。一般都是定義一個變量,來做定時器0計時值的累計,這樣才會將誤差降到最小。
3、每一遍,如果是1us,才能是延時約1s。但是,晶振是12MHz,一條匯編的指令就至少是1us,C語言的語句,就要更多。
4、void delay(uint n){ uint i,j;for(i=n;i0;i--){ for(j=110;j0;j--);} } 當n=1是延時大約是1ms,就是說n等于都少就延時多少ms,當然n的值不超過uint的最大值。
5、可以用_nop_( )函數(shù)來實現(xiàn)微秒級的延時。_nop_(); // 直接當成一條語句使用,產(chǎn)生一條NOP指令NOP指令為單周期指令,可由晶振頻率算出延時時間,對于12M晶振,延時1uS。
6、如果用循環(huán)語句實現(xiàn)的循環(huán),沒法計算,但是可以通過軟件仿真看到具體時間,但是一般精精確延時是沒法用循環(huán)語句實現(xiàn)的。
51單片機12M晶振延時1us,只需要執(zhí)行一個NOP就是了。C語言中也是如此。
但是,晶振是12MHz,一條匯編的指令就至少是1us,C語言的語句,就要更多。
12MHz頻率,延遲1us,是不可能的。就是調(diào)用函數(shù)、什么也不干、馬上就返回,也不止 4us。
1、C程序中可使用不同類型的變量來進行延時設計。經(jīng)實驗測試,使用unsigned char類型具有比unsigned int更優(yōu)化的代碼,在使用時應該使用unsigned char作為延時變量。
2、C語言的延遲函數(shù)一般是利用無意義程序運行來控制時間從而達到延時的目的 舉個例子:for(i=0;ix;i++)for(j=0;j120;j++);這是延時x毫秒的for循環(huán)語句。值得注意的是記得最后的;一定得記得寫。
3、Sleep中的第一個英文字符為大寫的S ,在linux下不要大寫,在標準C中是sleep, 不要大寫,簡單的說VC用Sleep, 別的一律使用sleep。
4、如果采用12Mhz的晶振,一條語句運行一次約為1us,你這個函數(shù)延時應該是Z ms,delay(10)就是10 ms,不是很精確。如果要寫精確的延時函數(shù),就要采用單片機中的定時器,很多單片機的書中都有講到,可以去查相關資料。
5、_nop_(); // 直接當成一條語句使用,產(chǎn)生一條NOP指令NOP指令為單周期指令,可由晶振頻率算出延時時間,對于12M晶振,延時1uS。注:使用該函數(shù)時,需要將頭文件#includeintrins.h包含進源文件中。