求问这段汇编语言的延时程序怎么计算延时时间

DELAY:MOVR2,#10L1:MOVR3,#100L2:MOVR4,#250L3:DJNZR4,L3DJNZR3,L2DJNZR2,L1ret用的stc89c52R... DELAY:
MOV R2,#10
L1: MOV R3,#100
L2: MOV R4,#250
L3: DJNZ R4,L3
DJNZ R3,L2
DJNZ R2,L1
ret
用的stc89c52RC整段程序如下:
MOV R0,#0
START:MOV A,R0
MOV DPTR,#TAB2
MOVC A,@A+DPTR
MOV P3,A
INC R0
ACALL DELAY
CJNE R0,#00BH,START
MOV R0,#0
SJMP START

DELAY:
MOV R2,#10
L1: MOV R3,#200
L2: MOV R4,#450
L3: DJNZ R4,L3
DJNZ R3,L2
DJNZ R2,L1
ret
展开
 我来答
做而论道
高能答主

推荐于2020-12-27 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
采纳答案,数字,算错了吧?
应该是 500 多毫秒。

51 单片机的指令,执行时间,是一个机器周期或二个机器周期。
只有乘除指令,是四个机器周期。
机器周期,称为T。

正确计算如下:

MOV R2, #10 ;1T
L1: MOV R3, #100 ;1T
L2: MOV R4, #250 ;1T
L3: DJNZ R4, L3 ;2T 2 * 250 = 500T
DJNZ R3, L2 ;2T (1+500+2) * 100 = 50300T
DJNZ R2, L1 ;2T (1+50300+2) * 10 = 503030T
RET ;2T (1+503030+2) = 503033T

总共执行时间是:503033T。

当晶振是 12MHz,T 就是 1us。

那么,延时时间就是 503033us,约等于 500 毫秒。
NJGQZF
2015-03-05 · TA获得超过1.1万个赞
知道大有可为答主
回答量:3165
采纳率:0%
帮助的人:1256万
展开全部
现在单片机种类太多,即便都是8051内核,系统架构也不完全一样,一个差别就是执行一条指令的时间不尽相同。所以你要根据具体的芯片资料,看看延时程序里用到的各条指令执行时间都是多少,然后计算总延时时间。
追问
不大懂。。。用的是12mhz的石英晶振
追答
12M晶体,一个机器周期是0.08333微妙,下面我注释上各条指令机器周期数
3018240*0.08333=251520

大概延时251毫秒

DELAY:

MOV R2,#10 ;6
L1: MOV R3,#100 ;6
L2: MOV R4,#250 ;6
L3: DJNZ R4,L3 ;12 250*12=3000
DJNZ R3,L2 ;12 (6+12)*100+3000*100=301800
DJNZ R2,L1 ;12 (6+6+12)*10+301800*10=3018240
ret ;12
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式