c語言的延時程序
㈠ 51單片機c語言程序中延時函數delay的原理是什麼
原理:只是執行一些所謂的「無實際意義的指令」,如縮放或執行一個int自加,簡單地說,就像高中數學中的「乘法原理」一樣,很容易迅速增加上面提到的「無意義指令」的數量
關於大小的值:如果是在C語言中,該值不僅與水晶振動、單片機本身的速度,但也與C的編譯器,所以,雖然這個值可以精確計算,但大多數情況下,程序員是經驗值。
當然,如果你在匯編中編程,情況就不同了,因為每條指令使用一定數量的機器周期,你當然可以根據所有指令使用的總時間來計算特定延遲的總時間。
(1)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語言有個可以使程序延時的語句是什麼
Sleep函數:功 能: 執行掛起一段時間 用 法: unsigned sleep(unsigned seconds); 注意: 在VC中使用帶上頭文件#include <windows.h>在VC中,Sleep中的第一個英文字元為大寫的"S" ,在標准C中是sleep, 不要大寫,簡單的說VC用Sleep, 別的一律使用sleep 在VC中,Sleep()裡面的單位,是以毫秒為單位,所以如果想讓函數滯留1秒的話,應該是Sleep(1000); 在Linux下,sleep()裡面的單位是秒,而不是毫秒。 示例: #include <windows.h> int main() { int a; a=1000; Sleep(a); return 0; } usleep函數:功能:usleep功能把進程掛起一段時間, 單位是微秒us(百萬分之一秒)。 delay函數:功 能: 將程序的執行暫停一段時間,單位是毫秒ms(千分之一秒) 用 法: void delay(unsigned milliseconds); 示例: #include<dos.h> int main(void) { sound(440); delay(500); nosound(); return 0; }delay()是循環等待,該進程還在運行,佔用處理器。sleep()不同,它會被掛起,把處理器讓給其他的進程。
㈢ c語言延時1ms程序
這個程序應該是板子上延時的程序。
a就是需要延遲的毫秒數(也可能是其他單位)。
就是說,執行 for(i=0;i<600;i++);的時間應該是一個單位長度(可能為1ms);
這樣,你在調用的時候,賦值給a多少值,實際就是延時多少毫秒。
例如,延時10ms,就用
delay(10);
延時1ms,就用
delay(1);
㈣ 單片機c語言的延時程序500ms
根據外部晶振的不同,延時1毫秒的循環次數也不一樣,一般12M晶振的話用 for(j=time;j>0;j--);延時時,1毫秒time大概為125左右,這里用110,大概晶振為11.0592M,所以這段程序,內部循環完成1毫秒延時,外部循環完成500毫秒延時。
㈤ 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語言 延時程序
這是一個延時程序,c是延時的相對長短
有兩層for循環執行空語句達到延時目的。
c只是延時的相對大小,c大了,外層循環就多,
時間就長一些。反之亦然。
㈦ C語言延時函數
C語言的延遲函數一般是利用無意義程序運行來控制時間從而達到延時的目的
舉個例子:
for(i=0;i<x;i++)
for(j=0;j<120;j++);
這是延時x毫秒的for循環語句。
值得注意的是記得最後的;一定得記得寫。
㈧ 怎麼用C語言寫可以調節的延時程序,請大俠幫忙
延時程序(包括asm和C程序,都是我在學單片機的過程中用到的),在單片機延時程序中應考慮所使用的晶振的頻率,在51系列的單片機中我們常用的是11.0592MHz和12.0000MHz的晶振,而在AVR單片機上常用的有8.000MHz和4.000MH的晶振所以在網上查找程序時如果涉及到精確延時則應該注意晶振的頻率是多大。
軟體延時:(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 ;設置定時器的工作方式為方式1
MOV TL0,#0B0H ;給定時器設置計數初始值
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
C語言延時程序:
10ms延時子程序(12MHZ)
void delay10ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=4;j>0;j--)
for(k=248;k>0;k--);
}
1s延時子程序(12MHZ)
void delay1s(void)
{
unsigned char h,i,j,k;
for(h=5;h>0;h--)
for(i=4;i>0;i--)
for(j=116;j>0;j--)
for(k=214;k>0;k--);
}
200ms延時子程序(12MHZ)
void delay200ms(void)
{
unsigned char i,j,k;
for(i=5;i>0;i--)
for(j=132;j>0;j--)
for(k=150;k>0;k--);
}
500ms延時子程序程序: (12MHZ)
void delay500ms(void)
{
unsigned char i,j,k;
for(i=15;i>0;i--)
for(j=202;j>0;j--)
for(k=81;k>0;k--);
}
下面是用了8.0000MHZ的晶振的幾個延時程序(用定時0的工作模式1):
(1)延時0.9MS
void delay_0_9ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0xa8;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(2)延時1MS
void delay_1ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xfd;
TL0=0x65;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
(3)延時4.5ms
void delay_4_5ms(void)
{
TMOD=0x01; /*定時器0工作在模式1下(16位計數器)*/
TH0=0xf4;
TL0=0x48;
TR0=1; /*啟動定時器*/
while(TF0==0);
TR0=0;
}
㈨ C語言寫延時程序
延時程序
void msec(unsigned int x)
{unsigned char j;
while(x--){
for (j=0;j<125;j++)
{;}
}
}
這是一個延時1MS的程序 如果給它傳遞一個50的數值就可以有50MS的延遲
基本思想就是用嵌套循環產生時間延遲,執行的指令消耗一段已知的時間!
㈩ 用C語言編程如何計算延時時間
那樣子你的調用系統的API來獲得調用此函數之前的系統時間,還有調用此函數返回之後的系統時間進行比較。
#include <windows.h>
#include <stdio.h>
voidmain()
{
SYSTEMTIME sys;
GetLocalTime( &sys );
int start=sys.wMilliseconds;//獲取開始時的毫秒數
//下面調用你的函數
delay(uint型變數);//這裡面的參數你必須自己看著辦
GetLocalTime( &sys );
int end=sys.wMilliseconds;//獲取調用delay函數之後的秒數
printf("調用delay函數消耗了%d毫秒!\n",end-start);
printf("注意:此程序只能處理1秒以內的延遲毫秒數!");
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=125;y>0;y--);
}