欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

c語言微秒級延遲函數(shù),微秒級延時函數(shù)

C語言編程中的延時

您好 這個延時函數(shù)很不穩(wěn)定的,沒有固定的時間

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供杭錦網(wǎng)站建設(shè)、杭錦做網(wǎng)站、杭錦網(wǎng)站設(shè)計、杭錦網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、杭錦企業(yè)網(wǎng)站模板建站服務(wù),10年杭錦做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

如果您使用tc 您可以用sleep(微秒)來延時

使用vc的話有5種常用方式:

方式一:VC中的WM_TIMER消息映射能進行簡單的時間控制。首先調(diào)用函數(shù)SetTimer()設(shè)置定時間隔,如SetTimer(0,200,NULL)即為設(shè)置200ms的時間間隔。然后在應(yīng)用程序中增加定時響應(yīng)函數(shù) OnTimer(),并在該函數(shù)中添加響應(yīng)的處理語句,用來完成到達定時時間的操作。這種定時方法非常簡單,可以實現(xiàn)一定的定時功能,但其定時功能如同Sleep()函數(shù)的延時功能一樣,精度非常低,最小計時精度僅為30ms,CPU占用低,且定時器消息在多任務(wù)操作系統(tǒng)中的優(yōu)先級很低,不能得到及時響應(yīng),往往不能滿足實時控制環(huán)境下的應(yīng)用。只可以用來實現(xiàn)諸如位圖的動態(tài)顯示等對定時精度要求不高的情況。如示例工程中的Timer1。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式二:VC中使用sleep()函數(shù)實現(xiàn)延時,它的單位是ms,如延時2秒,用sleep(2000)。精度非常低,最小計時精度僅為30ms,用sleep函數(shù)的不利處在于延時期間不能處理其他的消息,如果時間太長,就好象死機一樣,CPU占用率非常高,只能用于要求不高的延時程序中。如示例工程中的Timer2。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

方式三:利用COleDateTime類和COleDateTimeSpan類結(jié)合WINDOWS的消息處理過程來實現(xiàn)秒級延時。如示例工程中的Timer3和Timer3_1。以下是實現(xiàn)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()函數(shù),該函數(shù)的返回值是 DWORD型,表示以ms為單位的計算機啟動后經(jīng)歷的時間間隔。精度比WM_TIMER消息映射高,在較短的定時中其計時誤差為15ms,在較長的定時中其計時誤差較低,如果定時時間太長,就好象死機一樣,CPU占用率非常高,只能用于要求不高的延時程序中。如示例工程中的Timer4和Timer4_1。下列代碼可以實現(xiàn)50ms的精確定時:

DWORD dwStart = GetTickCount();

DWORD dwEnd = dwStart;

do

{

dwEnd = GetTickCount()-dwStart;

}while(dwEnd 50);

為使GetTickCount()函數(shù)在延時或定時期間能處理其他的消息,可以把代碼改為:

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()函數(shù)類似的多媒體定時器函數(shù)DWORD timeGetTime(void),該函數(shù)定時精度為ms級,返回從Windows啟動開始經(jīng)過的毫秒數(shù)。微軟公司在其多媒體Windows中提供了精確定時器的底層API持,利用多媒體定時器可以很精確地讀出系統(tǒng)的當(dāng)前時間,并且能在非常精確的時間間隔內(nèi)完成一個事件、函數(shù)或過程的調(diào)用。不同之處在于調(diào)用DWORD timeGetTime(void) 函數(shù)之前必須將 Winmm.lib 和 Mmsystem.h 添加到工程中,否則在編譯時提示DWORD timeGetTime(void)函數(shù)未定義。由于使用該函數(shù)是通過查詢的方式進行定時控制的,所以,應(yīng)該建立定時循環(huán)來進行定時事件的控制。如示例工程中的Timer5和Timer5_1。

C語言中 delay 函數(shù)如何運用?

1、delay函數(shù)是一般自己定義的一個延時函數(shù)。

2、C語言定義延時函數(shù)主要通過無意義指令的執(zhí)行來達到延時的目的。下面給出一個經(jīng)典的延時函數(shù)。

//?定義一個延時xms毫秒的延時函數(shù)

void?delay(unsigned?int?xms)??//?xms代表需要延時的毫秒數(shù)

{

unsigned?int?x,y;

for(x=xms;x0;x--)

for(y=110;y0;y--);

}

單片機C語言中怎么實現(xiàn)微秒級延時?

可以用_nop_( )函數(shù)來實現(xiàn)微秒級的延時。

_nop_();????????????//?直接當(dāng)成一條語句使用,產(chǎn)生一條NOP指令

NOP指令為單周期指令,可由晶振頻率算出延時時間,對于12M晶振,延時1uS。

注:使用該函數(shù)時,需要將頭文件#includeintrins.h包含進源文件中。

求一個C語言的微秒級延時函數(shù)

//***********

微秒延時函數(shù)

********************************************

void

Delayus(unsigned

int

US)

{

unsigned

i;

US=US*5/4;

//5/4是在8MHz晶振下,通過軟件仿真反復(fù)實驗得到的數(shù)值

for(

i=0;iUS;i++);

}

//*********************************************************************

以上函數(shù)式根據(jù)AVR單片機在8MHZ時鐘頻率下得出的結(jié)果。

如果系統(tǒng)頻率不一樣,就按比例改變。

c語言的延遲函數(shù)?編寫

C語言的延遲函數(shù)一般是利用無意義程序運行來控制時間從而達到延時的目的

舉個例子:

for(i=0;ix;i++)

for(j=0;j120;j++);

這是延時x毫秒的for循環(huán)語句。

值得注意的是記得最后的;一定得記得寫。

51單片機求10微秒的延時函數(shù) C語言(晶振11.0592MHz)

1、下面幾個是單片機的延時程序(包括asm和C程序,都是我在學(xué)單片機的過程中用到的),在單片機延時程序中應(yīng)考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網(wǎng)上查找程序時如果涉及到精確延時則應(yīng)該注意晶振的頻率是多大。

2、軟件延時:(asm)

晶振12MHZ,延時1秒

程序如下:

DELAY:MOV

72H,#100

LOOP3:MOV

71H,#100

LOOP1:MOV

70H,#47

LOOP0:DJNZ

70H,LOOP0

NOP

DJNZ

71H,LOOP1

MOV

70H,#46

LOOP2:DJNZ

70H,LOOP2

NOP

DJNZ

72H,LOOP3

MOV

70H,#48

LOOP4:DJNZ

70H,LOOP4

定時器延時:

晶振12MHZ,延時1s,定時器0工作方式為方式1

DELAY1:MOV

R7,#0AH

;;晶振12MHZ,延時0.5秒

AJMP

DELAY

DELAY2:MOV

R7,#14H

;;晶振12MHZ,延時1秒

DELAY:CLR

EX0

MOV

TMOD,#01H

;設(shè)置定時器的工作方式為方式1

MOV

TL0,#0B0H

;給定時器設(shè)置計數(shù)初始值

MOV

TH0,#3CH

SETB

TR0

;開啟定時器

HERE:JBC

TF0,NEXT1

SJMP

HERE

NEXT1:MOV

TL0,#0B0H

MOV

TH0,#3CH

DJNZ

R7,HERE

CLR

TR0

;定時器要軟件清零

SETB

EX0

RET

3、C語言延時程序:

10ms延時子程序(12MHZ)

void

delay10ms(void)

{

unsigned

char

i,j,k;

for(i=5;i0;i--)

for(j=4;j0;j--)

for(k=248;k0;k--);

}

1s延時子程序(12MHZ)

void

delay1s(void)

{

unsigned

char

h,i,j,k;

for(h=5;h0;h--)

for(i=4;i0;i--)

for(j=116;j0;j--)

for(k=214;k0;k--);

}

200ms延時子程序(12MHZ)

void

delay200ms(void)

{

unsigned

char

i,j,k;

for(i=5;i0;i--)

for(j=132;j0;j--)

for(k=150;k0;k--);

}

500ms延時子程序程序:

(12MHZ)

void

delay500ms(void)

{

unsigned

char

i,j,k;

for(i=15;i0;i--)

for(j=202;j0;j--)

for(k=81;k0;k--);

}

本文名稱:c語言微秒級延遲函數(shù),微秒級延時函數(shù)
網(wǎng)站網(wǎng)址:http://chinadenli.net/article15/dsshogi.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站定制網(wǎng)站網(wǎng)站制作小程序開發(fā)標(biāo)簽優(yōu)化App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站