keil模拟单片机延时汇编程序执行,显示的运行时间为什么和理论不一样?

如题所述

仿真模拟 与 电脑速度有关,不可能达到和理论不一样,
只有 在 实际单片机上 运行,才会与 计算理论值一致。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-25
一,晶振的设置是否和你预期的一样
二,你这是应该C语言的程序,不是汇编的,
三,要看实际的运行时间,那么要反汇编就可以看清楚了追问

晶振设置了12兆,程序也是汇编的,如下:
DELAY:
MOV R2,#20
D:
MOV R3,#248
DJNZ R3,$
DJNZ R2,D
END
理论大概10.002毫秒,仿真是9.981毫秒

追答

由于你的程序到此结束了,1+(248*2+2+1)*20,
如果是函数调用的话,前后还要各加上2个指令周期。

第2个回答  2013-01-25
“理论大概10.002毫秒,仿真是9.981毫秒”

那是你理论算错了。
应当是
(1+2×248+2)×20+1 = 9981 个指令周期

对于12MHz晶振,一个指令周期1μs,因此总共9.981ms本回答被提问者和网友采纳
第3个回答  2013-01-25
先看看keil的仿真设置里晶振的频率设置对了没有

keil模拟单片机延时汇编程序执行,显示的运行时间为什么和理论不一...
仿真模拟 与 电脑速度有关,不可能达到和理论不一样,只有 在 实际单片机上 运行,才会与 计算理论值一致。

51单片机keil4单步调试与运行结果不同 why?
IO口输出与仿真与实际不同的话,可能因为实际电路跑不了那么快的输出响应,要是时间容许的好阿,就输出后面加点延时吧。

关于Keil3编译STC89C52RC单片机程序
你好!!没有在硬件验证你的程序,只是做了一下仿真,发现你的延时太长了;去掉一个零试试吧,改成:7000 还有,你的硬件电路检查了吗?程序是不是真正下载到了单片机内?

51单片机C语言for循环延时程序时间计算
不可能的,是不是你的编译有错的啊 我改的晶振12M,在KEIL 4.0 里面编译的,为你得出的结果最大也就是40ms,这是软件的原因,不可能出现100ms那么大的差距,是你的软件的原因。不信你实际编写一个秒钟,利用原理计算编写一个烧进单片机和利用软件测试的秒程序烧进单片机,你会发现原理计算的程序...

单片机的keil+protues软件模拟是不是和实际相差蛮大的?
一般不会,proteus对于一般的程序仿真都还准确,动态显示的仿真自然不在话下,只是对于中断嵌套似乎支持不太好。你的问题我估计主要在于设置或者proteus连线与开发板上的不一致,导致程序与电路实际段位码不匹配。调整一下程序或者连线,问题就能解决,不算大问题。按照我的理解,实际工作中proteus用的并不是...

KEIL模拟仿真的时候执行2次停止 为什么下载到单片机里一直不停的...
因为仿真的时候,KEIL发现已经到程序结尾了,那就不会继续仿真了。而在实际情况中,当程序结束后,CPU会继续往下执行代码,当发现机器码是00时(一般没有程序代码的ROM空间都是00),就会跳到ROM的0000位置,也就相当于重启了,那么当然会反复重启了。给你个建议:for(j=0;j<2;j++){ ...} whil...

KEIL模拟仿真的时候执行2次停止 为什么下载到单片机里一直不停的...
因为仿真的时候,KEIL发现已经到程序结尾了,那就不会继续仿真了。而在实际情况中,当程序结束后,CPU会继续往下执行代码,当发现机器码是00时(一般没有程序代码的ROM空间都是00),就会跳到ROM的0000位置,也就相当于重启了,那么当然会反复重启了。给你个建议:for(j=0;j<2;j++){ ...} whil...

在keil_C51设计中几种精确延时的方法
使用反汇编工具计算延时时间对于不熟悉示波器的开发人员是另一种选择。在反汇编窗口中可用源程序和汇编程序的混合代码或汇编代码显示目标应用程序。通过分析汇编代码,可以计算出延时时间。通过实验发现,使用不同的循环结构,延时精度会有所不同。例如,使用while (DlyT--)循环体时,DlyT的值存放在R7中,...

C51单片机延时问题,使用delay函数。这个延时时间是如何计算的啊?110...
1.你可以通过keil仿真,多试几次找出这个值。仿真可以看时间。2.还可以把程序下到板子上,比如运行1分钟。通过多次试验,也能找出这个值。3.也可以理论计算,51有机器周期、指令周期,考虑晶振,看一个for要多少指令,最后也能算出来。不同单片机不一样,有的没有机器周期,有的指令周期也不一样,...

单片机汇编keil,我改变R5的值,为什么p0显示的速度并没有什么改变,都是...
你这个程序有问题,你没发现吗?取反后应该再进行延时。按下面程序,你试试!ORG 0000H SJMP MAIN MOV A,#0FEH MAIN: MOV P1,A LCALL DELAY CPL A LCALL DELAY SJMP MAIN DELAY: MOV R5,#50 D2: MOV R7,#255 D1: MOV R6,#255 DJNZ R6,DJNZ R7,D1 DJNZ R5,D2...

相似回答