求问这段汇编语言的延时程序怎么计算延时时间
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 展开
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 展开
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 毫秒。
应该是 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 毫秒。
展开全部
现在单片机种类太多,即便都是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
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询