汇编的延时问题

xingfengcc_ 2011-04-13 05:13:45

org 0000h
ajmp main
org 0030h
main:

MOV R2,#08H
DLV1: MOV R3,#0FAH
DLV2: CPL P1.5
LCALL DELAY1 ;延时
// DJNZ R3,DLV2
// DJNZ R2,DLV1
MOV R2,#10H ;改变循环初值

DLV3: MOV R3,#0FAH
DLV4: CPL P1.5
LCALL DELAY2
// DJNZ R3,DLV4
// DJNZ R2,DLV3
ajmp main
delay1:
mov r7,#00h

LLA: DJNZ R7,LLA
ret

delay2:
mov r7,#128

LLB: DJNZ R7,LLB
ret

end
想问的是,去掉//的语句为什么循环不对了?求高手解释一下
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Great_Bug 2011-04-18
  • 打赏
  • 举报
回复
人家就是靠循环来延时的,结果你把循环删了,还延个啥。。。。。。????
吻花者 2011-04-18
  • 打赏
  • 举报
回复
恩,你删掉//的那些都整个程序循环一遍就只有几十个微秒了,人的肉眼能够看到的变化时几十毫秒啊,一般的汇编(89s52,晶振12m)的一个指令的周期是1个微秒,极少数的是2个微秒,肉眼是看不出来的,不过用keil软件仿真是可以看出效果来哦,实际的硬件还是要加上延时的!!!
xingfengcc_ 2011-04-14
  • 打赏
  • 举报
回复
恩,延时明白了,那是不是就是说,如果删去,延时太少,看不出来了?
yuanhaididai 2011-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xingfengcc_ 的回复:]
专门的汇编板块?什么意思?
[/Quote]给你个汇编延时模板

;延时子程序,12M晶振延时约253毫秒
DELAY:
MOV R4,#2------执行1个机器周期,耗时1微秒
L3: MOV R2 ,#250---执行1个机器周期,耗时1微秒
L1: MOV R3 ,#251---执行1个机器周期,耗时1微秒
L2: DJNZ R3 ,L2---执行2个机器周期,反复执行251次(2x251)=502微秒)
DJNZ R2 ,L1-----执行2个机器周期,反复执行250次(1+502+2)*250=126250微秒)
DJNZ R4 ,L3-----执行2个机器周期,反复执行2次 (1+1+502+126250+2)*2=253512微秒)

RET

delay 加上第一条总共延时1+253512=253513微秒
xingfengcc_ 2011-04-14
  • 打赏
  • 举报
回复
专门的汇编板块?什么意思?
durant 2011-04-13
  • 打赏
  • 举报
回复
不是有专门的汇编板块吗

6,125

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 硬件设计
社区管理员
  • 硬件设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧