c語言的延時函數
① 單片機C語言編程關於延時函數
單片機的C語言關於延時函數主要有兩種
一種是用for循環,通過單片機執行空指令達到延時的目的
如:
for(i=0;i<100;i++)
{
;
}
這個簡單的語句會執行100次空指令
每一次指令的時間可以大概確定
因此這個是最簡單的延時函數
第二種是通過定時器的方式來實現
定時器是通過對單片機的晶振進行計數
然後在定時器中斷服務函數裡面實現定時時間的計算及設置
51單片機的定時器0中斷服務函數為
void
time0()
interrupt
1
{
...
}
② 如何計算C語言中的延時函數
你
的程序有問題額。
void
daly()
{unsigned
char
j;
for(j=60;j〈=0;j--)
}
你可去看看單片機的時鍾信號產生電路中的有關
節拍:指振盪脈沖周期
狀態:振盪脈沖盡過2分頻後,就是單片機時鍾信號的周期,定義為狀態,一個狀態等於兩個節拍
機器周期:單片機採用定時控制方式,有固定的機器周期,一個機器周期等於6個狀態,
機器周期=6個狀態=12個節拍
當振盪脈沖頻率為12mhz時,一個機器周期為1微秒,振盪脈沖頻率為6mhz,一個機器周期為2微秒
數據類型中unsigned
char為無符號字元型值域是在0~~~255范圍里
在上面我設的是60次的循環,且晶振是約在12mhz,那麼可以看出我們的算值是用60x1微秒,即可得到我們所要的延時值啊
③ C語言中 delay 函數如何運用
1、delay函數是一般自己定義的一個延時函數。
2、C語言定義延時函數主要通過無意義指令的執行來達到延時的目的。下面給出一個經典的延時函數。
//定義一個延時xms毫秒的延時函數
voiddelay(unsignedintxms)//xms代表需要延時的毫秒數
{
unsignedintx,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--);
}
④ C語言編程中的延時
如果你指的是嵌入式方面的,這樣的延遲是有作用的,也是一種非精確計時器的一個實現方法。
我以12M的晶振為例,給你講一下:
12M的晶振的機器周期是1/12M*12,就是1us
不同的單片機執行語句的機器周期也不一定一樣(比如:Atmel 51系列及大多數51的一個機器周期是12個時鍾周期,華邦的只需要4個時鍾周期)。不過大體來說,一條for循環大概8個機器周期,在12M晶振下,通常用以下代碼實現1ms的延時:
void delayms(unsigned int ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
大概算一下,120*8*1us=1ms,如果需要精確的定時,還是得用基於Tick定時器。
如果是
void delay(int d)
{
for(; d; --d);
}
d=1000的話,
那麼
大概算一下,1000*8*1us=8ms
所以,這可以實現一個大體8ms的延遲
⑤ 在C語言程序中,延時函數的時間是怎麼算的
這個是和你機器的運算速度有關的
你要計算出這個函數用了多少時間就要用時間函數,我很久沒用了。
#include "stdlib.h"
void delay()
{
time_t start,end;
start=time(null);
unchar i;
while(z--)
{
for(i=0;i<121;i++);
}
end=time(null);
printf("%f",difftime(end,start));
}
//time_t是在頭文件中定義的,可能是個結構體類型裡面的成員定義了一些時間的單位,如年、月、日。在這里調用這個結構體定義2個變數;
//start=time(null);
將其中一個變數賦值。它的值等於當前的系統時間
//end=time(null);
在程序結束的時候再給另一個變數賦值,值等於當前的系統時間。
//difftime(end,start)
函數difftime();是double類型,用來計算運行的時間,用第一個參數的時間減去第二個參數的時間,得到的值就是運行用了多少時間。單位為秒
⑥ C語言中用什麼函數來延時 謝謝
頭文件里加上#include <windows.h> 函數是 ::Sleep(),注意前面有倆冒號,s大寫,括弧里填數字,表示毫秒