ORG 000H
LJMP MAIN
ORG 0030H
MAIN:MOV SP,#60H
LOP:MOV A,#7FH
LOOP:MOV P1,A
MOV R7,#08H;重点求解
LCALL DELAY
RR A
DJNZ R7,LOOP;重点求解
MOV A,#0FEH
LOOP1:MOV P1,A
MOV R7,#08H
LCALL DELAY
RL A
DJNZ R7,LOOP1
SJMP LOP
DELAY:MOV R5,#10;重点求解对象,特别是延时程序时间的算法
DELAY1:MOV R6,#200
DELAY2:MOV R7,#123
DELAY3:DJNZ R7,DELAY3
DJNZ R6,DELAY2
DJNZ R5,DELAY1
RET
END
------解决方案--------------------------------------------------------
延时部分:
DELAY3: DJNZ R7, DELAY3 ;循环123次,
DJNZ R6,DELAY2 ; 循环200次
DJNZ R5,DELAY1 ; 循环50次
故延时总计:123 x 200 x 10 x 2 个指令周期(DJNZ 双周期指令)
R7,R6,R5 都=0后,子程序返回。这时R7=0,《DJNZ R7,LOOP;重点求解》执行后,R7=#0FFH,
所以《DJNZ R7,LOOP;重点求解》以下的代码永远不会执行。把DELAY中的R7改成R4就可以解决这个问题。
------解决方案--------------------------------------------------------
MOV R7,#08H;重点求解:#08h 循环次数,要求循环体内的代码执行8次,使得P1口依次输出:
7F 3F 1F 0F 07 03 01 00