查看: 2437|回复: 3
打印 上一主题 下一主题

51单片机自带的延时函数_nop_()

[复制链接]
跳转到指定楼层
沙发
发表于 2014-7-23 14:58:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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_()

回复

使用道具 举报

板凳
发表于 2014-7-27 09:55:14 | 只看该作者
这个_nop_()还不是很精确的,所以我还是觉得用中断定时好点
回复 支持 反对

使用道具 举报

地板
发表于 2014-7-28 21:05:38 | 只看该作者
__nop()__好像是汇编指令NOP的一个宏定义。
回复 支持 反对

使用道具 举报

4#
发表于 2014-8-3 09:22:28 | 只看该作者
延时这个东西,可以用软件写,不过自己理解了才是正道
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表