『壹』 c語言延時程序問題
Sleep函數:功 能: 執行掛起一段時間 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用帶上頭文件#include 在VC中,Sleep中的第一個英文字元為大寫的"S" ,在標准C中是sleep, 不要大寫,簡單的說VC用Sleep, 別的一律使用sleep 在VC中,Sleep()裡面的單位,是以毫秒為單位,所以如果想讓函數滯留1秒的話,應該是Sleep(1000); 在Linux下,sleep()裡面的單位是秒,而不是毫秒。 示例: #include int main() { int a; a=1000; Sleep(a); return 0; } usleep函數:功能:usleep功能把進程掛起一段時間, 單位是微秒us(百萬分之一秒)。 delay函數:功 能: 將程序的執行暫停一段時間,單位是毫秒ms(千分之一秒) 用 法: void delay(unsigned milliseconds); 示例: #include int main(void) { sound(440); delay(500); nosound(); return 0; }delay()是循環等待,該進程還在運行,佔用處理器。sleep()不同,它會被掛起,把處理器讓給其他的進程。
『貳』 C語言延時程序編程
在單片機中,要延時程序盡量准確,可以:
-延時循環盡量簡單,盡量少開變數比如:
Delay(unsigned int uDelay) { while ( uDelay-- ); }
-在主程序中用一個GPIO測試,如:
SetGPIOHigh(); Delay(1000); SetGPIOLOW();
-用示波器測量該GPIO波形及頻率
-調整Delay函數的調用值,可以用變數,在調試時實時修改變數值,找到延時1毫秒的值,把Delay函數改名為Delay1ms,之後調用這個函數完成精確延時
-其他的延時函數也可以類似上述方法完成,但記住在調試和實際使用時要用同樣的CPU主頻。
-最精確的還是用定時器中斷程序計時
『叄』 單片機C語言編程關於延時函數
單片機的C語言關於延時函數主要有兩種
一種是用for循環,通過單片機執行空指令達到延時的目的
如:
for(i=0;i<100;i++)
{
;
}
這個簡單的語句會執行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數
第二種是通過定時器的方式來實現
定時器是通過對單片機的晶振進行計數
然後在定時器中斷服務函數裡面實現定時時間的計算及設置
51單片機的定時器0中斷服務函數為
void
time0()
interrupt
1
{
...
}
『肆』 51單片機C語言程序中延時函數delay的原理是什麼
原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量
關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。
(4)c語言程序延時擴展閱讀:
定義延遲XMS毫秒的延遲函數
Voiddelay(unsignedintXMS)//XMS表示需要延遲的毫秒數
{
無符號intx,y;
For(x=XMS;X0;X-)
For(y=110;Y」0;Y-);
}
使用:
VoidDelay10us(ucharMs)
{
Uchar數據我;
(;女士「0;------Ms)
對於(I = 26)我> 0;我-);
}
I=[(延遲值-1.75)*12/ms-15]/4
『伍』 單片機C語言延遲程序
下面的延時的基本程序(中斷加計數器)
********
void
T0_int(void)
interrupt
1
{
TH0
=
0x4C;
//重新裝載,50MS定時器初值
TL0
=
0x00;
T0_count++;
if(T0_count==20)
//1S到
{
T0_count
=
0;
//在這寫程序
}
}
main()
{
TMOD
=
0x01;//定時器0,工作方式1,16位計數
TH0
=
0x4C;
//50MS定時器初值
TL0
=
0x00;
IE
=
0x82;
//開總中斷,開T0中斷
EA
=
1;
ET0
=
1;
TR0
=
1;
T0_count
=
0;
i
=
0;
loop:
goto
loop;
}
還有:
for(us=0;us<60;us++);
/*延時500us*/
for(us=0;us<1;us++);
/*
延時15微秒*/
for(us=0;us<5;us++);
/*
延時51微秒*/
『陸』 c語言的延遲函數 編寫
C語言的延遲函數一般是利用無意義程序運行來控制時間從而達到延時的目的
舉個例子:
for(i=0;i<x;i++)
for(j=0;j<120;j++);
這是延時x毫秒的for循環語句。
值得注意的是記得最後的;一定得記得寫。
『柒』 C語言編程中的延時
您好 這個延時函數很不穩定的,沒有固定的時間
如果您使用tc 您可以用sleep(微秒)來延時
使用vc的話有5種常用方式:
方式一:VC中的WM_TIMER消息映射能進行簡單的時間控制。首先調用函數SetTimer()設置定時間隔,如SetTimer(0,200,NULL)即為設置200ms的時間間隔。然後在應用程序中增加定時響應函數 OnTimer(),並在該函數中添加響應的處理語句,用來完成到達定時時間的操作。這種定時方法非常簡單,可以實現一定的定時功能,但其定時功能如同Sleep()函數的延時功能一樣,精度非常低,最小計時精度僅為30ms,CPU佔用低,且定時器消息在多任務操作系統中的優先順序很低,不能得到及時響應,往往不能滿足實時控制環境下的應用。只可以用來實現諸如點陣圖的動態顯示等對定時精度要求不高的情況。如示例工程中的Timer1。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
方式二:VC中使用sleep()函數實現延時,它的單位是ms,如延時2秒,用sleep(2000)。精度非常低,最小計時精度僅為30ms,用sleep函數的不利處在於延時期間不能處理其他的消息,如果時間太長,就好象死機一樣,CPU佔用率非常高,只能用於要求不高的延時程序中。如示例工程中的Timer2。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
方式三:利用COleDateTime類和COleDateTimeSpan類結合WINDOWS的消息處理過程來實現秒級延時。如示例工程中的Timer3和Timer3_1。以下是實現2秒的延時代碼:
COleDateTime start_time = COleDateTime::GetCurrentTime();
COleDateTimeSpan end_time= COleDateTime::GetCurrentTime()-start_time;
while(end_time.GetTotalSeconds()< end_time =" COleDateTime::GetCurrentTime()-start_time;">
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
方式四:在精度要求較高的情況下,VC中可以利用GetTickCount()函數,該函數的返回值是 DWORD型,表示以ms為單位的計算機啟動後經歷的時間間隔。精度比WM_TIMER消息映射高,在較短的定時中其計時誤差為15ms,在較長的定時中其計時誤差較低,如果定時時間太長,就好象死機一樣,CPU佔用率非常高,只能用於要求不高的延時程序中。如示例工程中的Timer4和Timer4_1。下列代碼可以實現50ms的精確定時:
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);
為使GetTickCount()函數在延時或定時期間能處理其他的消息,可以把代碼改為:
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
MSG msg;
GetMessage(&msg,NULL,0,0);
TranslateMessage(&msg);
DispatchMessage(&msg);
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <50);
雖然這樣可以降低CPU的佔有率,並在延時或定時期間也能處理其他的消息,但降低了延時或定時精度。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
方式五:與 GetTickCount()函數類似的多媒體定時器函數DWORD timeGetTime(void),該函數定時精度為ms級,返回從Windows啟動開始經過的毫秒數。微軟公司在其多媒體Windows中提供了精確定時器的底層API持,利用多媒體定時器可以很精確地讀出系統的當前時間,並且能在非常精確的時間間隔內完成一個事件、函數或過程的調用。不同之處在於調用DWORD timeGetTime(void) 函數之前必須將 Winmm.lib 和 Mmsystem.h 添加到工程中,否則在編譯時提示DWORD timeGetTime(void)函數未定義。由於使用該函數是通過查詢的方式進行定時控制的,所以,應該建立定時循環來進行定時事件的控制。如示例工程中的Timer5和Timer5_1。
『捌』 c語言延時的計算
演算法是這樣的:
這個用編譯軟體,如keil,編譯通過之後,進入軟體調試功能,就可以測出來是延時多少秒。
具體我幫你調試過了,如果單片機接12mhz晶振的話,這個是延時0.2秒的子程序。你調用一次delay();就延時0.2秒。
請選為最佳答案哦親。
『玖』 在c語言中如何實現延時功能
先加個 #include<windows.h>
然後延遲一秒就是 Sleep(1000); 就行了
1000代表1000毫秒 也就是一秒
#include<iostream.h>
#include<windows.h>
void main()
{
for(int i=0;i<50;++i)
cout<<"#";
cout<<endl;
Sleep(1000);
for(i=0;i<50;++i)
cout<<"#";
cout<<endl;
}