㈠ 如何計算單片機延遲程序的延遲時間
Delay: MOV R7,#64H ;本條指令1T
LOOP: MOV R7,#0FAH ;本條指令1T執行100次
DJNZ R6,$ ;本條指令2T執行100*250次
DJNZ R7,LOOP ;本條指令2T執行100次
RET ;本條指令2T
延時時間為:1+100+2*100*250+2*100+2=50303T=100606us=100.606ms
㈡ 單片機延時時間怎樣計算
如果用循環語句實現的循環,沒法計算,但是可以通過軟體模擬看到具體時間,但是一般精精確延時是沒法用循環語句實現的。
如果想精確延時,一般需要用到定時器,延時時間與晶振有關系,單片機系統一般常選用11.059
2
mhz、12
mhz或6
mhz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器周期分別為1
μs和2
μs,便於精確延時。本程序中假設使用頻率為12
mhz的晶振。最長的延時時間可達216=65
536
μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值佔用2個機器周期)。
㈢ 哪位單片機高手詳細的告訴我一下:單片機中的延時程序的延時時間怎樣計算的比如,延遲 1S,2S等等
如果FOSC=12MHZ單片機,那麼一個機器周期為12/12M=1us
如果是匯編語言的話:
L1:MOV
R7,#100
L2:MOV
R6,#100
L3:MOV
R5,#50
DJNZ
R5,$;此句兩個機器周期也就是2T
DJNZ
R6,L3
DJNZ
R7,L2
RET
2T*50*100*100=1,000,000us(共一秒),這是粗略演算法,有誤差,但不是太大。
㈣ 單片機中延時時間怎樣計算
C程序中可使用不同類型的變數來進行延時設計。經實驗測試,使用unsigned char類型具有比unsigned int更優化的代碼,在使用時應該使用unsigned char作為延時變數。 以某晶振為12MHz的單片機為例,晶振為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--); } 計算分析: 程序共有三層循環 一層循環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--);} 三. 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--);} 四. 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--);}
㈤ 單片機的延時,延時時間長度是怎麼算的最好有一個例子,來說明!
如果單片機晶振為6M,機器周期即為2us=12/fosc
匯編語句對時間的把握精確於C語言,所以參考不同指令的長度,
就可以算出你的延遲時間。
單片機的延時程序:
MOV
R7,#200
LOOP1:MOV
R6,#125
LOOP2:DJNZ
R6,LOOP2
DJNZ
R7,LOOP1
RET
第一句為單周期指令,耗時2us
第二句執行了200次,耗時2*200us
第三句為雙周期指令,執行了125*200次,耗時2*2*125*200us
第四句同第三句,耗時2*2*200us
第五句雙指令周期
總夠耗時2+2*200+2*2*125*200+2*2*200+2*2
約為100ms
㈥ 求解單片機延時子程序延時計算
你可以粗略這樣看,在上面的指令中,執行次數最多的是djnz
rn,那麼可以延時就是djnz指令執行時間。這里運用了嵌套,所以要×。
它的順序是先執行djnz
r5,l3
;10次,執行djnz
r6,l2
250次
但是當r6減1那麼就賦予r5初值10,所以r5又得運行10次,而每減一次1都要重復10次。同理,執行r7減一要重復前面的djnz指令10×250次,所以就有了
10×250×200×2us=1s
㈦ 單片機延時程序的延時時間怎麼計算的
如果用循環語句實現的循環,沒法計算,但是可以通過軟體模擬看到具體時間,但是一般精精確延時是沒法用循環語句實現的。
如果想精確延時,一般需要用到定時器,延時時間與晶振有關系,單片機系統一般常選用11.059 2 MHz、12 MHz或6 MHz晶振。第一種更容易產生各種標準的波特率,後兩種的一個機器周期分別為1 μs和2 μs,便於精確延時。本程序中假設使用頻率為12 MHz的晶振。最長的延時時間可達216=65 536 μs。若定時器工作在方式2,則可實現極短時間的精確延時;如使用其他定時方式,則要考慮重裝定時初值的時間(重裝定時器初值佔用2個機器周期)。
㈧ 51單片機延時程序時間是怎麼計算的
51單片機延時時間計算需要考慮以下兩種因素:
1、指令執行時間
2、指令循環次數
㈨ 單片機延時計算方法
以C51為例,12MHZ晶振的話,1個時鍾周期為1/12微秒,1個機器周期=12個時鍾周期,定時器每個機器周期可延時12*1/12微秒=1微秒。如果晶振為8MHZ的話,定時器每個機器周期可延時12*1/8微秒=1.5微秒
㈩ 51單片機中的延時應該怎麼計算
for(a=2;a>0;a--) // 2微秒, 執行2次(a+2)是4微秒;
for(b=142;b>0;b--) // 2微秒, 執行142次,for(a=2;a>0;a--)是4微秒,即2*(142*4);
for(c=1;c>0;c--) // 2微秒, 執行1次,即2*(142*4)=1136微秒;
b=125,1000/8=125,再減去其它調用時間,應該b取值不大於125。