打印
[PIC®/AVR®/dsPIC®产品]

这段延时是多少毫秒?

[复制链接]
4103|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qianlong30|  楼主 | 2013-8-6 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC16F73,4M晶振
void  delay()
{
  unsigned char  i;
  for(i=0;i<250;i++)
  {
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
   }
}

-------------------- 这段延时程序,延时了多少时间?  
是否是晶振4M,所以每条指令1US,  250*8=2000US=2毫秒?对否?

沙发
yewuyi| | 2013-8-6 11:33 | 只看该作者
16F73是四分频的,所以4M晶体,内核的振荡频率相当于1M,对应的机器周期就是1us。
一个空指令的指令周期等于一个机器周期。

所以根据以上的规则就可以知道这个函数执行的时间(前提是这个函数过程中没有任何中断打扰,现实中不太可能):
1、函数现场保护和跳转进来的时间。
2、多个空指令的循环体执行时间。
3、函数现场恢复和跳转回去的时间。

使用特权

评论回复
板凳
qianlong30|  楼主 | 2013-8-6 11:38 | 只看该作者
谢谢版主,我程序就在这里等待,不执行其他,此时无中断,时间也不用很精确,毫秒即可,那我的计算就对了吧,谢谢了。

使用特权

评论回复
地板
qianlong30|  楼主 | 2013-8-6 23:08 | 只看该作者
我刚用示波器看了波形,这段延时程序延时了4毫米,怎么回事?其中没中断等,CPU就是在这里纯粹执行这段延时程序。

使用特权

评论回复
5
haitun1895| | 2013-8-7 17:27 | 只看该作者
qianlong30 发表于 2013-8-6 23:08
我刚用示波器看了波形,这段延时程序延时了4毫米,怎么回事?其中没中断等,CPU就是在这里纯粹执行这段延时 ...

你怎么看的啊?

使用特权

评论回复
6
y651503148| | 2013-8-7 17:46 | 只看该作者
振荡周期和机器周期不一样的,C写的话还是软件仿真看吧

使用特权

评论回复
7
NE5532| | 2013-8-8 13:17 | 只看该作者
你就直接用示波器看着调就可以了,注意优化级别不同,延时时间也会变滴。

使用特权

评论回复
8
weplove| | 2013-9-11 18:11 | 只看该作者
你的看法是250*8=2000US=2毫秒,但是每一次for的执行也是需要时间的,刚好也是8个指令周期,所以还要加一倍的时间。刚好是4ms。

使用特权

评论回复
9
opal11| | 2013-9-11 23:46 | 只看该作者
仿真测试一下就好了。

使用特权

评论回复
10
zhengzhou86| | 2013-9-12 16:53 | 只看该作者
如果你想知道精确时间,又不想自己算,直接软件仿真,设置好你的晶振频率,用STOPWATCH可以查看,比较精确

使用特权

评论回复
11
jimmy817| | 2013-9-27 16:12 | 只看该作者
置一引脚为1,delay,置引脚为0,delay,在置1, 抓为0的时间不就好了,肯定不是2MS,汇编一条指令为1US,C又不是,用C语言写程序,会用到单片机更多的资源。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

150

主题

353

帖子

2

粉丝