[求助] 怎么计算计数循环时间

she137249   2011-12-23 23:07 楼主

我是个刚在自学单片机的小菜

一开始就遇到了难题

请大哥大姐们指点下,小弟在此先谢过大家了

 

是这样的

我不明白这定时是怎么计算出来的

例如下面的程序

是怎么计算的呢?

晶振是12M的话

 

 

{inti,j;

for(i=0;i<100;i++)

    for(j=0;j<50;j++)

}

 

回复评论 (13)

你可以先单步调试一下for(i=0;i<50:1++),看一下需要多长时间,然后再乘for(j=0;j<100;j++)中的100或者其他数就行了。
比如for(i=0;i<50:1++)需要0.5ms的话,你想要1秒即0.5ms*2000=1s,那就可以这样写
for(j=0;j<2000;j++)
for(i=0;i<50:1++);在单步调试前先把频率设置成12MHZ,就OK了,我也刚学,交流交流
点赞  2011-12-24 10:21

根据仿真来判断时间

点赞  2011-12-24 18:24
如果标准51可以通过计算汇编语句的执行时间精确几个微妙延时,不过现在的51都是单周期指令了
点赞  2011-12-24 19:05

回复 楼主 she137249 的帖子

最精确的是通过从汇编的指令调试乘以是什么类型的指令计算
通过仿真也是好方法
点赞  2011-12-24 19:26
这样做有个不好的地方,就是中断的影响
点赞  2011-12-24 19:38
开始计算那个地方把IO置高,完成的那个地方置低,用示波器测量
点赞  2011-12-24 21:20

回复 沙发 张丽山 的帖子

非常感谢你的分享,然后我想问除了用调试的方法
用什么机器周期或是晶振之类的概念怎么去理解或是计算这时间
谢谢
点赞  2011-12-25 20:23

回复 5楼 小小白 的帖子

中断延时的话就是计数脉冲=1/12晶振是吧

 

谢谢

也按照你们上面的方法仿真软件仿真过是正确的

那我想问除了用调试的方法用什么机器周期或是晶振之类的概念怎么去理解或是计算这时间

 

就是说这for()语句执行一次要多久?

 

我不怎么会用Keil仿真

 

谢谢

[ 本帖最后由 she137249 于 2011-12-25 20:28 编辑 ]
点赞  2011-12-25 20:24
飘过……
点赞  2011-12-26 09:47
1、时钟周期     时钟周期T又称为状态周期,是时序中最小的时间单位。具体计算就是1/fosc。也就是说如果晶振为1MHz,那么时钟周期就为1us;6MHz的话,就是1/6us。

2、机器周期

    机器周期定义为实现特定功能所需的时间,或完成某一规定操作所需的时间,通常由若干时钟周期构成。具体计算为:时钟周期 X cycles。如果单片机是12周期的话,那么机器周期就是T×12。假设晶振频率为12M,单片机为12周期的话,那么机器周期就是1us。

3、指令周期

    置零周期是时序中的最大时间单位,定义为执行一条指令所需的时间。通常,包含一个机器周期的指令成为单周期指令,比如CLR,MOV等等。包含两个机器周期的指令称为双周期指令。另外还有4周期指令,比如乘法和除法指令。

4、例如:

   标准8051单片机为12时钟周期,即一个机器周期为标准的12个系统时钟周期(时钟周期 X 12)。

   PHILIPS单片机为6时钟周期。

   AVR单片机为单时钟周期。

忘记说了51单片机会对晶振产生的进行十二分平所以执行单周期指令要1Us。。。
点赞  2011-12-26 16:33
好像是,如果你用的是KEIL,你运行后里面有反汇编,通过那个可以大概算出来
貌似在哪里看到过。
点赞  2011-12-26 20:27
若没有中断的干扰,设置keil的晶振为你所用的晶振,然后DEBUG设置断点到进这个函数名前时,记下当前时间,设置断点到大括弧下一行,运行,记下时间,时间之差就是延时时间。注意不要将断点设在函数名前和右括弧内部,涉及到进入时寻址该函数和结束时的出栈时间
点赞  2011-12-28 18:23
可以设个断点,软仿一下!
点赞  2012-1-8 12:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复