1. 程式人生 > >C51 彙編 雙層迴圈延時程式碼

C51 彙編 雙層迴圈延時程式碼

---------------------------------------------
-- 時間:2018-10-29
-- 建立人:Ruo_Xiao
-- 郵箱:[email protected]
---------------------------------------------

一、ASM

DELAY:MOV R3,#7FH
DEL2: MOV R4,#0FFH
DEL1: NOP
DJNZ R4 ,DEL1
DJNZ R3 ,DEL2
RET

二、解釋

1、DJNZ的功能有兩點,首先是將R4減1,然後看等於0否,二是轉移,減1後結果不是0,則轉移到指定的地址,如EDL1,DEL2,結果=0,則往下執行。就這麼簡單的事。
2、整個子程式是個兩層迴圈的延時程式,開始,R3=7FH,是127,再是:R4=FFH,是255,下面開始迴圈,一條

NOP空操作,就是為了延時的,然後DJNZ,R4減1,不為0,轉移到EDL1,又是NOP延時,如此,迴圈255次後,R4=0,內層循結束,往下,R3減1,R3不為0,轉移到DEL2,重新開始R4=FFH,再迴圈255次。這樣,外層迴圈是R3的127次,內層是R4的255次,一共迴圈是255*127次,結束返回。

 

(SAW:Game Over!)