51单片机 通过环移指令RL 实现LED的逐个移动点亮

;通过不带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)相符合

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值