令人头大的单片机延时----这里转一篇关于延时函数的文章看看

本文转自一篇探讨单片机延时函数的文章,主要聚焦于nop()函数。内容涉及单片机编程中如何实现精确延时,以及不同编译器下nop()函数的实现和影响。通过对延时函数的解析,帮助读者深入理解单片机延时的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标题:【转】关于nop()函数
2011-02-11 23:49:29

nop函数可以用来延时,请问1个NOP延时多少时间,怎么计算? 

附一段说明:
void _nop( void );
A NOP instruction is generated, before and behind the nop instruction the peephole is flushed. Code generation for _nop() is exactly the same as the
following inline assembly.
#pragma asm
nop ; inline nop instruction
#pragma endasm
Returns nothing.
value = P0; /* read from port P0 */
MOV R12,P0
_nop(); /* delay for one cycle */
NOP
P1 = value; /* write to port P1 */
MOV P1,R12

 

单片机c语言中nop函数的使用方法和延时计算默认分类 2010-08-28 15:39:40 阅读41 评论0   字号:大中小 订阅 .

标准的C语言中没有空语句。但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。

在keil C51中,直接调用库函数:
#include<intrins.h>          // 声明了void _nop_(void);

_nop_();                               // 产生一条NOP指令

    作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。
     NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。


对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。 
在选择C51中循环语句时,要注意以下几个问题 
第一、定义的C51中循环变量,尽量采用无符号字符型变量。 
第二、在FOR循环语句中,尽量采用变量减减来做循环。 
第三、在do…while,while语句中,循环体内变量也采用减减方法。 
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。

下面举例说明: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值