51单片机 汇编语言 点亮第一个LED

ORG 0000H
 LJMP MAIN

ORG 0100H
 MAIN:
 SETB P2.0            ;将P2.0口对应的LED点亮
 ACALL DELAY          ;调用延时子程序
 CLR P2.0             ;关闭P2.0口的输出,即灭灯
 ACALL DELAY          ;调用延时子程序
 SJMP MAIN            ;短转移指令,跳转到main,死循环
 
ORG 0150H
 DELAY: 
 MOV R7, #28H         ;28H=40D   ,单周期指令 1.085US  晶振频率=11.0592M,则单周期指令的执行时长为1.085us
 D1:
 MOV R6, #0F9H        ;F9H=249D  ,单周期指令 1.085US 
 D2:
 MOV R5, #0AH         ;AH=10D    ,单周期指令 1.085US
                           
 DJNZ R5,$            ;双周期指令  2.17US ,$为本行的地址,即将R5的内容减1,若不等于0则跳转到本行
 DJNZ R6,D2           ;双周期指令  2.17US ,将R6的内容减1,若不等于0则跳转到D2
 DJNZ R7,D1           ;双周期指令  2.17US ,将R7的内容减1,若不等于0则跳转到D1
 RET ;2US
END

;%%%%%%%%以下为matlab计算的DELAY延时程序各阶段所耗时间%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;R7=40;
;R6=249;
;R5=10;
;T1=1.085;  %单周期指令所耗时间 1.085us
;T2=2*T1;   %双周期指令所耗时间 2.17us
;%%%%%%%%%%第一阶段: DELAY子程序的14到18行 所耗时间 
;t0=3*T1;
;%%%%%%%%%%第二阶段: DJNZ R5,$  所耗时间 
;t1=R5*T2;
;%%%%%%%%%%第三阶段: DJNZ R6,D2 所耗时间 
;t2=R6*(T2+T1+t1);
;%%%%%%%%%%第三阶段: DJNZ R7,D1 所耗时间 
;t3=R7*(T2+T1+T1+t1+t2);
;%%%%%%%%%%DELAY 子程序总耗时t
;t=t0+t1+t2+t3  = 2.5583e+5us=0.25583s
;两次亮灯之间的时间间隔为2*t=0.51166s,实验测了100次亮灯,总用时50.16s,基本于理论相符合

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值