真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

延時函數(shù)c語言代碼 c語言延時函數(shù)用法

C語言延時程序編程

在單片機中,要延時程序盡量準確,可以:

成都網(wǎng)站制作、做網(wǎng)站的關注點不是能為您做些什么網(wǎng)站,而是怎么做網(wǎng)站,有沒有做好網(wǎng)站,給成都創(chuàng)新互聯(lián)公司一個展示的機會來證明自己,這并不會花費您太多時間,或許會給您帶來新的靈感和驚喜。面向用戶友好,注重用戶體驗,一切以用戶為中心。

-延時循環(huán)盡量簡單,盡量少開變量比如:

Delay(unsigned int uDelay) { while ( uDelay-- ); }

-在主程序中用一個GPIO測試,如:

SetGPIOHigh(); Delay(1000); SetGPIOLOW();

-用示波器測量該GPIO波形及頻率

-調(diào)整Delay函數(shù)的調(diào)用值,可以用變量,在調(diào)試時實時修改變量值,找到延時1毫秒的值,把Delay函數(shù)改名為Delay1ms,之后調(diào)用這個函數(shù)完成精確延時

-其他的延時函數(shù)也可以類似上述方法完成,但記住在調(diào)試和實際使用時要用同樣的CPU主頻。

-最精確的還是用定時器中斷程序計時

C語言編程中的延時

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

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

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

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

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

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

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

方式三:利用COleDateTime類和COleDateTimeSpan類結合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)的當前時間,并且能在非常精確的時間間隔內(nèi)完成一個事件、函數(shù)或過程的調(diào)用。不同之處在于調(diào)用DWORD timeGetTime(void) 函數(shù)之前必須將 Winmm.lib 和 Mmsystem.h 添加到工程中,否則在編譯時提示DWORD timeGetTime(void)函數(shù)未定義。由于使用該函數(shù)是通過查詢的方式進行定時控制的,所以,應該建立定時循環(huán)來進行定時事件的控制。如示例工程中的Timer5和Timer5_1。

單片機流水燈C語言程序(8個燈,依次點亮每個燈,延時500MS)

單片機流水燈C語言程序的源代碼如下:

#include //51系列單片機定義文件

#define uchar unsigned char //定義無符號字符

#define uint unsigned int //定義無符號整數(shù)

void delay(uint); //聲明延時函數(shù)

void main(void)

{

uint i;

uchar temp;

while(1)

{

temp=0x01;

for(i=0;i8;i++) //8個流水燈逐個閃動

{

P1=~temp;

delay(100); //調(diào)用延時函數(shù)

temp=1;

}

temp=0x80;

for(i=0;i8;i++) //8個流水燈反向逐個閃動

{

P1=~temp;

delay(100); //調(diào)用延時函數(shù)

temp=1;

}

temp=0xFE;

for(i=0;i8;i++) //8個流水燈依次全部點亮

{

P1=temp;

delay(100); //調(diào)用延時函數(shù)

temp=1;

}

temp=0x7F;

for(i=0;i8;i++) //8個流水燈依次反向全部點亮

{

P1=temp;

delay(100); //調(diào)用延時函數(shù)

temp=1;

}

void delay(uint t) //定義延時函數(shù)

{

register uint bt;

for(;t;t--)

for(bt=0;bt255;bt++);

}

擴展資料

51單片機流水燈的源代碼如下

#includereg51.h

#includeintrins.h

void?delay(int?a)

{

int?i;

while(a--)for(i=0;i110;i++);

}

main()

{

int?i;

while(1)

{

P0=0xfe;

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

{

P0=_crol_(P0,1);

delay(500);

}

}

}

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

c語言,微秒級延時

void?Delay_us?(unsigned?char?time_us)

{

unsigned?long?int??TM_LODAE;

TR2???=?0;??????????????????????????//?Stop?timer

TF2H??=?0;??????????????????????????//?Clear?timer?overflow?flag

TM_LODAE?=?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us);

//?TMR2??=?-(?(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)?);

TMR2H?=??TM_LODAE8;

TMR2L =??TM_LODAE0x00FF;

TR2???=?1;??????????????????????????//?Start?timer

while?(!TF2H);??????????????????????//?Wait?till?timer?overflow?occurs

TR2???=?0;??????????????????????????//?Stop?timer

}

程序分析:

前面一起住航分析一下該代碼,

unsigned?long?int??TM_LODAE;??聲明一個長整型數(shù)據(jù),

TR2???=?0;????定時器2停止計時

TF2H??=?0;??????清除定時器2中斷標志

TM_LODAE?=?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us);????計算定時器初值。?SYSCLK是系統(tǒng)的晶振頻率,SYSCLK/1000000是系統(tǒng)?1uS?執(zhí)行的指令。?(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)就是系統(tǒng)?time_us執(zhí)行的指令數(shù)。?65535-(UINT)(SYSCLK/1000000)?*?(UINT)(time_us)定時器需要?TM_LODAE指令周期才會溢出。

該單片機的一個指令周期就是一個時鐘周期.TMR2H?=??TM_LODAE8;??TMR2L =??TM_LODAE0x00FF;置定時器寄存器的初值、

TR2???=?1;???啟動單片機計時? while?(!TF2H); ?等待定時器2寄存器溢出。TR2???=?0;停止計時,在這段代碼注釋中已經(jīng)說明了應該有50nS的誤差,這個是函數(shù)調(diào)用產(chǎn)生的。

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

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

舉個例子:

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

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

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

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


新聞標題:延時函數(shù)c語言代碼 c語言延時函數(shù)用法
分享地址:http://weahome.cn/article/docjoeh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部