請教老師,51微控制器在12M晶振,C語言程式設計時,延時函式120次1ms(書本上是這樣的,不懂),是怎樣得來的

2021-05-04 23:59:46 字數 1753 閱讀 8615

1樓:

c的話其實時間沒有辦法完全定性地計算的

如果非得精確的話只能使用定時器了,或者彙編的也行不過時間要求精度不是很高的話使用下面的**就行了當時使用示波器把時間完全調準的,65536ms範圍內還是比較準的,已經可以滿足通常的要求了:

#include "reg51.h" //標頭檔案包含//巨集定義

#define uint unsigned int#define uchar unsigned charvoid delay(uint ms) // 毫秒級延時(at89c52 @ 11.0592mhz)

//112}}

呼叫方式如下:

delay(400); //開機延時400ms夠詳細了吧?!

2樓:

12m晶振,cpu時鐘也為12m,即每秒12*10^6條指令,因此如果延時函式為100條指令的話呼叫120次就是1ms

當然,如果cpu有分頻或倍頻的話,延時函式可能不為100條指令,因此關鍵需要看延時函式的設計。

3樓:

這個要通過反彙編看當延時1次時,為多少,而跟120次=1ms沒任何關係。

4樓:匿名使用者

指令的執行是需要時間的。

mcs-51微控制器的程式設計題:已知系統晶振頻率為12mhz,採用定時器t0的方式1,請程式設計實現1s的延時。 20

5樓:cindere鞡

中斷服務抄函式就不用寫了吧,就寫個初始化函式:

void inition()

這樣初始化就沒問題了,另外要實現1s延時,需要在中斷函式里加個變數自增,因為我定義的是50ms中斷一次,那麼這個變數值自增到20後就代表1s時間到,清零這個變數之後方可寫你的服務程式。

希望我的回答能幫助到你。

6樓:匿名使用者

#include

#define uchar unsigned charuchar times;

void delay()}}

}main()

7樓:匿名使用者

#include

void inittimer0(void)

我的微控制器用的11.0592m的晶振,想寫一個大概延時1ms的子程式,應該怎樣寫?(用c語言)

8樓:匿名使用者

void delay(uint n)

}當n=1是延時大約是1ms,就是說n等於都少就延時多少ms,當然n的值不超過uint的最大值。

標頭檔案下請定義巨集

#define uchar unsigned char#define uint unsigned int

9樓:匿名使用者

11.0592的晶振,很熟悉,51系列微控制器經常用,建議多看下書,我說下大致的原理,fosc=11.0592m,一條指令的時間是多少?

可能有分頻,可以設定,具體的微控制器不一樣,反正你要得到執行一條指令的時間,比如是1us,那麼1usx1000=1ms,例如:

for(i=0;i<998,i++)

10樓:o幽蘭葳蕤

void delay(char x)

11樓:匿名使用者

void delay(uint)

12樓:匿名使用者

void delay1ms()

51微控制器怎麼通過串列埠傳送小數,51微控制器怎麼通過串列埠傳送小數?

方法多的去了,把數字37.5轉換為字串 37.5 傳送可以,用壓縮bcd碼0x37 0x05傳送也可以,多得是。不一定一定要浮點處理。你自己定一個協議,1次發6個資料,選擇其中的2個作為資料,其他作為驗證碼,另一個微控制器接收到就演算法處理 微控制器不支援浮點運算的,你可以申請兩個變數,把整數和小數...

關於51微控制器的中斷,關於51微控制器的中斷。

中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷髮生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5箇中斷源 中斷號 優...

51微控制器控制舵機,51微控制器控制一個舵機

據我瞭解,舵機是用來固定角度的。lz 所謂平滑的轉動,是個啥意思?是說,我想讓舵回機定位在60 然後它必須從答0 60 的時候,是平滑的 連續的 0.1 增長 0.01 增長 轉過去?還是說,需要讓它在 0 180 之間自己平滑的 連續的 0.1 增長 0.01 增長 來回跑?好哈哈哈哈哈,就一個舵...