1樓:杜哥是個小天才
c程式中可使用不同型別的變數來進行延時設計。經實驗測試,使用unsigned char型別具有比unsigned int更優化的**,在使用時應該使用unsigned char作為延時變數。 以某晶振為12mhz的微控制器為例,晶振為12mhz即一個機器週期為1us。
void delay_ms(unsigned int ms_number) // ms延時函式 (at89c51 @ 11.0592mhz) }
void delay()
void delay_ms(unsigned int ms)
}拓展資料
c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。
2樓:匿名使用者
delay函式是一般自己定義的一個延時函式。
c語言定義延時函式主要通過無意義指令的執行來達到延時的目的。
關於微控制器c語言的精確延時,網上很多都是大約給出延時值沒有準確那值是多少,也就沒有達到精確高的要求,而本函式克服了以上缺點,能夠精確計數出要延時值且精確達到1us,本舉例所用cpu為stc12c5412系列12倍速的微控制器,只要修改一下引數值其它系例微控制器也通用,適用範圍寬。
ms=1時,第一個for迴圈進入,然後在第二個for迴圈中執行100次
再回到第一個for迴圈中進行第二次迴圈.
就這樣你可以進入編輯器,新增斷點,自行檢視**執行過程
3樓:匿名使用者
這個延時關鍵看使用的晶振多大,比如12m晶振for(j=0;j<120;j++);大概延時1毫秒,11.0592m晶振那麼for(j=0;j<110;j++);延時1毫秒,你這裡的for(j=0;j<100;j++);延時1毫秒的話,晶振應該是10m,不太常見喲,特別是在微控制器方面。
4樓:展華威
void delay(unsigned int x) //延時 x ms
延時1ms 即為使x=1;
這程式延時約1ms(x=1時用keil測出來約 0.96831272ms,近似1ms),用c語言很難做到準確的1ms。注意晶振為11.
0592mhz的時候用~ 晶振為12mhz時 把 i=120 近似值1ms
5樓:奮鬥勇士
這是根據for迴圈的執行時間來達到延時的效果,當然不同的微控制器晶片 執行速度不同,產生的效果也不一樣
6樓:聖鸞
c的話其實時間沒有辦法完全定性地計算的
如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:
#include "reg51.h" //標頭檔案包含//巨集定義
#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)
//112}}
呼叫方式如下:
delay(400); //開機延時400ms夠詳細了吧?!
51微控制器C語言控制頻率原理,51微控制器改變頻率怎麼實現,最好是用C語言程式
1全部假設你的51微控制器用的晶振是12mhz的,那麼可以得到如下結論 51執行一個指令的時間週期是1us,這個是51的基礎知識,就不深入講解了。然後,如果用定時器0確定輸出頻率,假設定時器0的tl0初始值是0x01,那麼當tl0變為0x02時,就是經過了1us時間 這個懂吧?那麼,設定定時器0為工...
微控制器延時時間計算c語言晶振頻率是
煙火夜空 對for 迴圈的 編譯,不同編譯器的編譯結果不盡 相同 對不同 微控制器系列,編譯結果也不盡相同。以 標準51微控制器,keil 為例 已知12mhz,12t時鐘模式,一個機械週期 t 則為 1us 一條 賦值語句 count 1 2個機械週期 t 一條判斷 c 0 4t 一條自減 c 1...
80C51微控制器數碼管的顯示C語言
include int ss 0 int mm 0 int hh 0 int counttimer 0 unsigned char const number unsigned char code wei void inittimer50ms void void delay int t 下面這個函式是...