回覆列表
-
1 # 使用者8719241321800
-
2 # 使用者5635123734932
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
要延遲的地方直接寫
delay(資料);
比如,delay(5);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=123;y>0;y--);
}
要延遲的地方直接寫
delay(資料);
比如,delay(5);
1.軟體延時
利用多個指令的執行來延時,累加每個指令的執行時間,來計算出延時的總時間。一般寫成一個延時函式。
如,以下是10ms軟體延時。
delay_10ms() {
int c = 1000; // 調整常數,以達到要求的延時,但很難!
while(c != 0) {
c--;
}
}
以上函式被呼叫一次,就延時10ms,多次呼叫可以達到任意更大的時間要求。
!但是,在延時時,就其它什麼事也做不了了,就是乾等啊!
2.硬體延時
利用定時器/計數器晶片,或用微控制器內部的定時器/計數器,實際上,它就是對晶振的分頻(分頻係數可程式設計設定),得到一個精確的低頻的週期訊號,用這個週期訊號(比如10ms)去觸發中斷,每10ms呼叫一次定時中斷服務程式。在定時中斷服務程式中加入計數變數,就可以得到任意的定時了。
在10ms沒有到時,微控制器可以執行其它程式,10ms到時再自動進去中斷服務程式以處理定時任務,不會像軟體延時阻塞了。
3.作業系統中,都有個硬體延時,和定時中斷,可以看ucos ii中的原始碼,節拍時鐘,和組合語言實現的定時中斷。
4.硬體延時,要佔用一個定時器/計數器硬體資源。