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 增長 來回跑?好哈哈哈哈哈,就一個舵...