1樓:匿名使用者
一條指令需要由12個振盪週期(既晶振振盪週期)組成,即晶振頻率12分頻,也就是執行一條指令的最高頻率1mhz,則對應週期為1us。延時程式執行一次迴圈的時間為1us,則延遲1s需要迴圈1000*1000次。所以你這樣寫是做不到延遲1s的,可以讓a=1000,再第二個for迴圈1000次。
2樓:匿名使用者
這個還得跟微控制器有關係的,比如用的是cisc的微控制器和risc的演算法就不太一樣,你首先要確定一個指令週期的時間,比如pic的微控制器,一個指令週期一般為t=1/(晶振頻率/4),然後再系統無中斷程式的情況下,那你上面的 a = 1/(t*110)
3樓:
在keil裡**的話,在配置裡把晶振調成12mhz,然後在呼叫delay函式的地方設定一個斷點,開始除錯程式,執行到斷點處,注意程式左邊有一個記錄當前暫存器和一些狀態的視窗,其中,裡面有一個是專門記錄當前執行了多少時間的變數,記下當前時間t1,然後按f10(不進入子函式)除錯,再記錄當前時間t2,則延時=t2-t1。多試幾個a,差不多調到1s就夠了。我一般都這麼調。
你要想明白其中原理,想自己算的話,你就看看delay的彙編**段自己算吧。
4樓:匿名使用者
用keil** 除錯一下 如果要求精確就用中斷
微控制器程式延時時間,晶振為12mhz
5樓:志當存高遠
函式的入口引數,當你呼叫延時函式時,... delayms(10);...
目的要延時10ms,這是這個uint的無符號整形變數xms就被賦值為10,
在進入delayms();函式後,i=xms即i=10,然後做for迴圈,
根據系統的時鐘週期做出相應時間的延時。如果沒有xms,你的延時函式只能寫成固定延時的,即在delayms內部確定好i的值,很不方便。有了入口引數,就能像上面說的那樣隨意延時了(數值範圍要在uint定義內,即小於65536)。
51微控制器c語言延時函式 void delay 1ms(unsigned int ms){un
6樓:杜哥是個小天才
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)以及超級電腦等作業平臺。
7樓:匿名使用者
delay函式是一般自己定義的一個延時函式。
c語言定義延時函式主要通過無意義指令的執行來達到延時的目的。
關於微控制器c語言的精確延時,網上很多都是大約給出延時值沒有準確那值是多少,也就沒有達到精確高的要求,而本函式克服了以上缺點,能夠精確計數出要延時值且精確達到1us,本舉例所用cpu為stc12c5412系列12倍速的微控制器,只要修改一下引數值其它系例微控制器也通用,適用範圍寬。
ms=1時,第一個for迴圈進入,然後在第二個for迴圈中執行100次
再回到第一個for迴圈中進行第二次迴圈.
就這樣你可以進入編輯器,新增斷點,自行檢視**執行過程
8樓:匿名使用者
這個延時關鍵看使用的晶振多大,比如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,不太常見喲,特別是在微控制器方面。
9樓:展華威
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
10樓:奮鬥勇士
這是根據for迴圈的執行時間來達到延時的效果,當然不同的微控制器晶片 執行速度不同,產生的效果也不一樣
11樓:聖鸞
c的話其實時間沒有辦法完全定性地計算的
如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:
#include "reg51.h" //標頭檔案包含//巨集定義
#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)
//112}}
呼叫方式如下:
delay(400); //開機延時400ms夠詳細了吧?!
微控制器C語言程式設計題,微控制器C語言程式設計題
爬行的山羊 這是兩個題啊。哈哈好做,第一個有c語言的冒泡法排序,第二個用中斷,讀,輸出就可以 include define led0 0 define led1 1 define led2 2 define ledport p2 sbit sw0 p1 0 sbit sw1 p1 1 sbit sw...
微控制器c語言中定義,微控制器C語言中 定義a1 P0 1 a2 P0 2 a8 P0 7 b P2 0 。a1 a8不斷隨機為1。
這樣實現 sbit p20 p2 0 char consum 0 char i,bitflag 0x01 for i 0 i 8 i if consum 3 p20 1 希望我的回答對你有幫助,有什麼問題歡迎一起 謝謝。 如果是c51微控制器 include void main 如果找完一次p0口後...
微控制器c語言字串對比問題,微控制器C語言字串對比問題
要寫for迴圈判斷,不能直接用 也不能用strcmp等標準庫裡面的函式 風若遠去何人留 c語言字串對比可以呼叫標準庫函式strcmp。該函式宣告在string.h中,形式為 int strcmp char a,char b 返回值有三種情況,1,0或 1.其比較原則為 1 從第一個字元開始按照asc...