當前位置:首頁 » 編程語言 » c語言延時計算

c語言延時計算

發布時間: 2023-06-14 22:36:26

① 關於c語言for循環延時函數

for循環實現C語言精確延時
(晶振12MHz,一個機器周期1us.)
一. 500ms延時子程序
程序:
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--);
}
產生的匯編:
C:0x0800 7F0F MOV R7,#0x0F
C:0x0802 7ECA MOV R6,#0xCA
C:0x0804 7D51 MOV R5,#0x51
C:0x0806 DDFE DJNZ R5,C:0806
C:0x0808 DEFA DJNZ R6,C:0804
C:0x080A DFF6 DJNZ R7,C:0802
C:0x080C 22 RET
計算分析:
程序共有三層循環
一層循環n:R5*2 = 81*2 = 162us DJNZ 2us
二層循環m:R6*(n+3) = 202*165 = 33330us DJNZ 2us + R5賦值 1us = 3us
三層循環: R7*(m+3) = 15*33333 = 499995us DJNZ 2us + R6賦值 1us = 3us
循環外: 5us 子程序調用 2us + 子程序返回 2us + R7賦值 1us = 5us
延時總時間 = 三層循環 + 循環外 = 499995+5 = 500000us =500ms
計算公式:延時時間=[(2*R5+3)*R6+3]*R7+5

二. 200ms延時子程序
程序:
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--);
}
產生的匯編
C:0x0800 7F05 MOV R7,#0x05
C:0x0802 7E84 MOV R6,#0x84
C:0x0804 7D96 MOV R5,#0x96
C:0x0806 DDFE DJNZ R5,C:0806
C:0x0808 DEFA DJNZ R6,C:0804
C:0x080A DFF6 DJNZ R7,C:0802
C:0x080C 22 RET

三. 10ms延時子程序
程序:
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--);
}
產生的匯編
C:0x0800 7F05 MOV R7,#0x05
C:0x0802 7E04 MOV R6,#0x04
C:0x0804 7DF8 MOV R5,#0xF8
C:0x0806 DDFE DJNZ R5,C:0806
C:0x0808 DEFA DJNZ R6,C:0804
C:0x080A DFF6 DJNZ R7,C:0802
C:0x080C 22 RET

四. 1s延時子程序
程序:
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--);
}
產生的匯編
C:0x0800 7F05 MOV R7,#0x05
C:0x0802 7E04 MOV R6,#0x04
C:0x0804 7D74 MOV R5,#0x74
C:0x0806 7CD6 MOV R4,#0xD6
C:0x0808 DCFE DJNZ R4,C:0808
C:0x080A DDFA DJNZ R5,C:0806
C:0x080C DEF6 DJNZ R6,C:0804
C:0x080E DFF2 DJNZ R7,C:0802
C:0x0810 22 RET

在精確延時的計算當中,最容易讓人忽略的是計算循環外的那部分延時,在對時間要求不高的場合,這部分對程序不會造成影響.

② c語言延時的計算

演算法是這樣的:
這個用編譯軟體,如keil,編譯通過之後,進入軟體調試功能,就可以測出來是延時多少秒。
具體我幫你調試過了,如果單片機接12mhz晶振的話,這個是延時0.2秒的子程序。你調用一次delay();就延時0.2秒。
請選為最佳答案哦親。

③ 用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--);
}

④ C語言delay函數延時計算

C語言delay函數延時計算源代碼如下:

#include "stdlib.h"

void delay()

{

time_t start,end;

start=time(null);

unchar i;

while(z--)

{

for(i=0;i&lt;121;i++);

}

end=time(null);

printf("%f",difftime(end,start));

}

(4)c語言延時計算擴展閱讀

1、對於要求精確延時時間更長,這時就要採用循環嵌套的方法來實現,因此,循環嵌套的方法常用於達到ms級的延時。

對於循環語句同樣可以採用for,do…while,while結構來完成,每個循環體內的變數仍然採用無符號字元變數。

⑤ 請問下面的C語言延時函數是如何計算延時時間的for循環中的四個nop是否可以省略

一個nop為1個指令周期,通過nop指令可以產生一定的延遲,但是對於快速的CPU來說效果不明顯,因此可以多寫幾個,便可以多延遲幾個時鍾(具體應該說是一個指令佔用了3個時鍾脈沖);所以,一個for循環會執行4*250個指令周期,那麼總共延時4*250*ms個指令周期~~

熱點內容
linuxc當前時間 發布:2025-02-12 21:03:32 瀏覽:28
雲鎖神伺服器 發布:2025-02-12 21:03:29 瀏覽:487
c語言int和float 發布:2025-02-12 21:03:24 瀏覽:20
我的世界有什麼好玩的大伺服器 發布:2025-02-12 21:01:59 瀏覽:98
方舟手游如何解鎖自己的伺服器 發布:2025-02-12 20:54:09 瀏覽:657
貓影視源碼 發布:2025-02-12 20:42:05 瀏覽:923
區域網如何訪問其他電腦 發布:2025-02-12 20:39:06 瀏覽:378
新平板電腦的數字密碼如何知道 發布:2025-02-12 20:31:19 瀏覽:345
打包php整站 發布:2025-02-12 20:29:48 瀏覽:358
施工作業現場拍攝腳本 發布:2025-02-12 20:20:22 瀏覽:137