DJNZ 指令练习
DJNZ 指令练习
1、假设fosc=12MHz,则一个机器周期为1us,若要求达到10ms延时,
则: MOV R6,#20 ; 1个机器周期 D2: MOV R7,#249; 1个机器周期 DJNZ R7,$ ; 2个机器周期 DJNZ R6,D2; 2个机器周期 t=1+20×(1+249×2+2)=10021μs≈10ms
2、闪烁灯 在P1.0端口上接一个发光二极管L1,使L1不停一亮一灭,亮0.2S,灭0.2S。(声波发生器——形成频率可调的方波) ORG1000H START: SETB P1.0 LCALL DELAY CLR P1.0 LCALL DELAY SJMP START DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#249 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END t=20×[1+(1+249×2+2)×20+2] =200460μs≈0.2s
3、流水灯 用P1口通过一定时间的延时轮流产生低电平输出 ,以达到发光二极管轮流点亮的效 ORG 0030H MAIN: MOV A,#0FFH MOV P1,A //灭掉所有的灯 MOVA,#0FEH MAIN1: MOV P1,A //开P1.0口的灯 ACALL DELAY RL A //依次开灯 SJMP MAIN //循环 DELAY: MOV 30H,#0FFH D1: MOV 31H,#0FFH DJNZ 31H,$ DJNZ 30H,D1 RET END
延时t=255(1+255×2+2)=130815μs=0.13s