請問在微控制器C語言程式設計中,用delay延遲的話,1秒程式是什麼?微控制器晶振為12MHZ

2021-08-28 12:19:33 字數 2848 閱讀 3834

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語言

這樣.假設三個按鍵分別連在微控制器p1.0 p1.1 p1.2三個io口上,按下去為低電平,不按為高電平。include 你是什麼微控制器?自己把標頭檔案包含好哦。define keymask 0x07 對應二進位制0000 0111,作用是取出p1連結有按鍵的最低三位 int key 記錄按鍵 i...

程式設計arm微控制器c語言cotex m3嵌入式問題如下。一定採納求高手回答

晶片的各個功能都是有很多設定位的,但是並不是說每個位都要設定。有的位不影響你的功能,有的位在特點應用場合是採用預設值。一般來說你看別人的程式怎麼設定 設定了哪些,你照著做就行了 採用系統庫,逐個初始化,這也許是最好的。或者將自己 他人寫好的 逐步形成自己的 庫,然後按需使用 例如只初始化部分內容 例...

請問微控制器C語言程式設計中那些進位制數是什麼意思啊?下面舉例

這些資料是根據io口輸入輸出的數值來確定的,至於是什麼數值,就看這個io口接什麼電路或者啟動微控制器內部的什麼功能模組,一般都是8位的,例如在微控制器的計時 定時器,中斷等都有說明的,至於你提到的we 0x40,就是在we 這個口輸入或者輸出二進位制數01000000,把這個數轉化為十六進位制就是0...