查看: 2108|回复: 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_()

回复

使用道具 举报

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

本版积分规则

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