因仑“3+1”工程特种兵精英论坛

标题: 51单片机自带的延时函数_nop_() [打印本页]

作者: lucky80204    时间: 2014-7-23 14:58
标题: 51单片机自带的延时函数_nop_()
在keil C51中,直接调用库函数:
#include<intrins.h>       // 声明了void _nop_(void);
_nop_();                         // 产生一条NOP指令
作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。

_nop_()的延时计算方法:
1、时钟周期=振荡周期,名称不同而已,都是等于单片机晶振频率的倒数,如常见的外接12M晶振,那它的时钟周期=1/12M。 2、机器周期,8051系列单片机的机器周期=12*时钟周期,之所以这样分是因为单个时钟周期根本干不了一件完整的事情(如取指令、写寄存器、读寄存器等),而12个时钟周期就能基本完成一项基本操作了。
3、指令周期。一个机器周期能完成一项基本操作,但一条指令常常是需要多项基本操作结合才能完成,完成一条指令所需的时间就是指令周期,当然不同的指令,其指令周期就不一样的了。
4. _nop_()要用1个指令周期

如何使用——nop_()


作者: SDC158477392    时间: 2014-7-27 09:55
这个_nop_()还不是很精确的,所以我还是觉得用中断定时好点
作者: lwy    时间: 2014-7-28 21:05
__nop()__好像是汇编指令NOP的一个宏定义。
作者: 张衍波    时间: 2014-8-3 09:22
延时这个东西,可以用软件写,不过自己理解了才是正道




欢迎光临 因仑“3+1”工程特种兵精英论坛 (http://bbs.enlern.com/) Powered by Discuz! X3.4