nop不同晶振频率下的延时时间

 

_nop_()函数

包括在库函数intrins.h中的
表示空循环一个
机器指令的时间,12M中表示1us;6M中表示2us;24M中表示0.5us(微妙)
1S=1000ms=1000000us;
NOP,常在通信驱动中用到,如IIC(I2C)等

12MHz  晶振的话,一个机器周期是1us,因此
单周期指令为1us,如NOP,MOV Rn,#data等等
双周期指令为2us,如SJMP等等
四周期指令为4us,如DIV,MUL等等。
11.0592MHz晶振的话,一个周期是1.085us,也就是时间是12M周期的1.085倍。

51单片机12M晶振,晶振周期1/12微秒,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微秒=1微秒 。11.0592M的晶振就将上文公式中12换成11.0592即可

/*************************************************************************

*  函数名称:SamplingDelay

*  功能说明:简单延时程序,应用范例:SamplingDelay(1);

*           一个nop延时一个机器指令周期,延时时间因单片机晶振频率而异

*           此处所用晶振频率为11.0592MHz,故一个nop为1.085μs,为就是12MHz晶振

*           时间的1.085倍,此处大致约等于1μs。所以执行一条SamplingDelay(1);延时2μs

*  参数说明:无

*  函数返回:无

*************************************************************************/

#if 0

void SamplingDelay(unsigned int n)

{
   volatile unsigned int i ;

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

   {
        _nop_();//一个指令周期

        _nop_();

    }

}



#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值