;通过不带Cy标志位的环移指令RL,累加器A中的最高位与最低位连接后进行左移,同样,因为板子上LED的排布顺序为从
;左到右,因此展示出的效果为LED的右移
;使接在 P2 管脚的 8 个 LED 灯由(P2.0)依次点亮至最右一个 LED 灯(P2.7)
;各 LED 灯点亮的时间间隔为 0.5s;之后程序不停地重复前述动作
ORG 0000H
LJMP MAIN ;跳转到main函数
ORG 0100H
MAIN:
MOV A,0FEH ;0FEH,11111110,对应P2.0接口,为灯D1
NEXT:
MOV P2,A ;点亮D1
ACALL DELAY ;调用延时子程序
RL A ;从11111110 左移为11111101,对应D1,因实验板上灯的顺序为从左到右,实际上是灯的右移
SJMP NEXT ;短转移指令
;延时子程序 DELAY
ORG 0150H
DELAY:
MOV R7,#5AH ;05A=90 1.085US 晶振频率=11.0592M,则单周期指令的执行时长为1.085us
D1:
MOV R6,#1DH ;1DH=29 1.085US
D2:
MOV R5,#53H ;53H=83 1.085US
DJNZ R5,$ ;2.17US
DJNZ R6,D2 ;2.17US
DJNZ R7,D1 ;2.17US
RET ;2.17US
END
;R7=90;
;R6=29;
;R5=83;
;T1=1.085; %1.085us
;T2=2*T1; %2.17us
;t0=3*T1;
;t1=R5*T2;
;t2=R6*(T2+T1+t1);
;t3=R7*(T2+T1+T1+t1+t2);
;t=t0+t1+t2+t3=5.0068e+05 US=0.50068s
;每颗LED点亮时间为0.5007s,实验测了8次亮灯,总用时3.98s,基本于理论(4.00544)相符合