51单片机汇编语言延时子程序怎样计算?

晶振是11.0592Mhz,程序为:
DELAY:  MOV   R2,#200      
DELAY2: MOV   R3,#200
DELAY3: MOV   R4,#100
        DJNZ  R4,$
        DJNZ  R3,DELAY3
        DJNZ  R2,DELAY2
        RET

请问延时时间怎么计算的?

;以下按12M晶振计算,#后面的数最大可以是255
DELAY:MOV R7,#10 ;1
MOV R6,#100 ;10*1
MOV R5,#200 ;10*100*1
DJNZ R5, $ ; 10*100*200*2
DJNZ R6, $ - 4 ;10*100*2
DJNZ R7, $ - 8 ;10*2
RET ;2
Total=1+10*1+10*100*1+10*100*200*2+10*100*2+10*2+2=403033微秒追问

直接复制有意思吗

温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机使用汇编语言循环延迟时间怎么算?
第一步:在延时程序没行后边标注该指令执行的机器周期第二步:在机器周期后边乘以该指令循环的次数第三步:计算总共用的机器周期数第四步:计算总延时时间。 本回答由网友推荐 举报| 答案纠错 | 评论(4) 10 1 zhxiufan | 高级工程师 向TA咨询 擅长: IT 其他回答 ;===<延时子程序>===882usDELAY882: ;1...

51单片机用汇编语言设计1S延时子程序,晶振为12MHz。 (麻烦附上详细计算...
如果单纯延时,可以用实验的办法,在keilc51里面仿真 void Delay1S(char n){ char i,j;n=n*4;for(;n;n--){ for(i=6;i;i++){ for(j=7;j;j++) \/\/ 一个循环约为1mS ;} } } 看编译后的汇编:C:0x0805 7D01 MOV R5,#0x06;j=1,1时钟 C:0x0807 0D INC ...

51单片机用汇编语言设计0.2S延时子程序,晶振12MHz变为晶振为1MHz...
原来12Mhz的,机器周期是1us, 但是在循环程序,没运行一次空语句需要花2us, 因此原来程序中为 20*20*248*2=198400,大约是200000us,即0.2s..如果变为1Mhz后,机器周期是1\/12us,没运行一次空语句需要花1\/6us, 然后把R3*R4*R5*1\/6=200000,把R3、R4、R5取整数值就可以 ...

汇编语言编写一段延时1000个指令周期的子程序
要求编写延时子程序,就不要使用定时器;也不要用C语言,因为C语言的执行时间,并不确定。用汇编语言,是最简单、准确的。51单片机的程序如下:DL1000:MOV R7,#248 DJNZ R7,MOV R7,#250 DJNZ R7,RET 正好1000个机器周期。R7,是8位寄存器,其最大数值是255,不能直接存入500。

51单片机,求用汇编语言编写延时1小时的子程序,要精确到秒级别
共延时时间:3592.9s误差为7.1秒,如果再精确的话,再加一点延时就可以了。DELAY_20S: ;Total=19.960603s MOV R2,# ;1 DLY1:MOV R3,#200 ;1*200 DLY2:MOV R4,#248 ;1**200*200 DJNZ R4,$ ;2**248*200*200 DJNZ R3,DLY2 ;2*200*200 DJNZ R2,DLY1 ;2*...

51单片机中,写个延时函数,延时1ms,该怎么写,为什么?
用汇编语言写可以精确计算,但有时想拼出整数的ms或10ms也不容易,计算方法如下图说明:而C语言靠经验和实验得来的,如下面程序 如果不准(与晶振频率有关),调K的值,,软件仿真查看,直到大致准确,想更精确用定时器 void delay(unsigned char i) \/\/延时程序{ unsigned char i,k;for(j=i;j...

请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢
2.4 使用反汇编工具计算延时时间用Keil C51中的反汇编工具计算延时时间,在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。为了说明这种方法,还使用“for (i=0;i<DlyT;i++) {;}”。在程序中加入这一循环结构,首先选择build taget,然后单击start\/stop debug session按钮...

单片机中的延时程序的延时时间怎样计算的?
允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法 ...

一个51单片机软件延时问题
程序延时本来就是一个大概的数。这个也不是很准的。中间的for循环120次大约是962周期,加上每次循环前后的“准备工作”,再加上函数调用\/返回的时间,接近1Ms.实没为993个周期。如果把for循环次数改为121,则参数1的延时为1001个机器周期。

求单片机软件延时精确计算公式。C编程,for语句。好像与单片机、晶振有关...
{ while (i--);}这个是用来微秒级延时的,他在不同的参数i下,延时时间分别为实际为(9*i+16)us,这些延时的实际时间一般可以通过开发环境keil C51中模拟一下,看下时钟就知道了。汇编好点的话也可以直接看汇编计算或者直接写汇编程序。 这时我们可以使用下面宏去调用上面的接口#define _delay_us...

相似回答
大家正在搜