延時方法很多,用定時/計數比較方便也比較精確。如果用軟體延時,則可以用迴圈(多重、巢狀都行)。根據時間長短確定迴圈次數,力求精確。時間計算以機器的晶振頻率為基準,算出各指令的執行時間(每條指令執行時間乘所迴圈的次數就是該指令的全部執行時間),所有指令執行時間的和就是延時的時間。
比如:設晶振頻率為12MHz 則每機器週期為1us
513us延時程式為
DL513: MOV R7,#0FFH ;1us
DJNZ R7,$;2us *255=510us
RET ;2us
延時時間為1+510+2=513us
延時時間較長則可以用多重迴圈(以四重迴圈為例),如:
KKKK0:MOV R2,#XX ;1us
KKKK1:MOV R3,#LL ;1us*XX
KKKK2:MOV R4,#NN ;1us*XX*LL
KKKK3:MOV R5,#MM ;1us*XX*LL*NN
DJNZ R5,$ ;2us *XX*LL*NN*MM
DJNZ R4,KKKK3 ;2us *XX*LL*NN
DJNZ R3,KKKK2 ;2us *XX*LL
DJNZ R2,KKKK1 ;2us *XX
延時時間為1us+1us*XX+1us*XX*LL+1us*XX*LL*NN+2us *XX*LL*NN*MM+2us *XX*LL*NN+2us *XX*LL+2us *XX+2us
適當確定四個迴圈次數XX、LL、NN、MM就能得到準確的延時時間。
延時方法很多,用定時/計數比較方便也比較精確。如果用軟體延時,則可以用迴圈(多重、巢狀都行)。根據時間長短確定迴圈次數,力求精確。時間計算以機器的晶振頻率為基準,算出各指令的執行時間(每條指令執行時間乘所迴圈的次數就是該指令的全部執行時間),所有指令執行時間的和就是延時的時間。
比如:設晶振頻率為12MHz 則每機器週期為1us
513us延時程式為
DL513: MOV R7,#0FFH ;1us
DJNZ R7,$;2us *255=510us
RET ;2us
延時時間為1+510+2=513us
延時時間較長則可以用多重迴圈(以四重迴圈為例),如:
KKKK0:MOV R2,#XX ;1us
KKKK1:MOV R3,#LL ;1us*XX
KKKK2:MOV R4,#NN ;1us*XX*LL
KKKK3:MOV R5,#MM ;1us*XX*LL*NN
DJNZ R5,$ ;2us *XX*LL*NN*MM
DJNZ R4,KKKK3 ;2us *XX*LL*NN
DJNZ R3,KKKK2 ;2us *XX*LL
DJNZ R2,KKKK1 ;2us *XX
RET ;2us
延時時間為1us+1us*XX+1us*XX*LL+1us*XX*LL*NN+2us *XX*LL*NN*MM+2us *XX*LL*NN+2us *XX*LL+2us *XX+2us
適當確定四個迴圈次數XX、LL、NN、MM就能得到準確的延時時間。