首页 > 其他 > 详细

_nop()

时间:2019-11-29 11:50:05      阅读:65      评论:0      收藏:0      [点我收藏+]

相当于汇编里的nop伪指令,表示的是空操作,可是实现延时,表示执行一条没有什么意义的指令,例如 MOV r0 ,r0。因为是执行“指令”,所以花的时间是一个指令周期,指令周期是以机器周期为单位计算的(有的指令周期是2个或者以上的机器周期,但是nop指令就是花费一个机器周期),所以:1个NOP = 1个机器周期 = 12 * 时钟周期(51而言)= 12 * 1 / f; f 表示的是你的晶振频率,
例如6Mhz的晶振,f = 6000000,带入上式,结果单位为s。

 

使用nop延时
通过使用__NOP()函数进行延时,因为使用了8M晶振4倍频,所以是32MHz,所以一个nop约等于1/32us,所以使用32个nop函数为一个us,然后根据需要的定时时间进行计算。

 

void delay_us(uint32_t time) //us延时
{
uint32_t i=0;
for(i=0;i<time;i++)
{
__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP ();__NOP();__NOP();__NOP();__NOP();__NOP();

__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP ();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();
}
}
void delay_ms(uint32_t time) //ms延时
{
uint32_t i=1000*time;
delay_us(i);
}

_nop()

原文:https://www.cnblogs.com/qifeng1024/p/11956588.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!