A. 单片机C程序 -nop-();-nop-();什么意思
这个函数是延时一个机器周期的意思,它包含在头文件intrins.h中,只要程序应用到_nop_(),就需要有头文件intrins.h的声明。
B. 51单片机 c语言里 _nop_ 函数怎么用 具体一点 求高手指教
一个nop为1个指令周期,主要用于精确定时或者延时
nop指令的作用:
1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)
2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲!
3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;
4)清除由上一个算术逻辑指令设置的flag位;
5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;
6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/erazy0/archive/2010/12/12/6071281.aspx
C. 单片机程序中 _nop_()干什么用的
具体含义要看这个子程序的具体内容。字面上的意思似乎是延时几个NOP(空操作)
D. 51单片机NOP是什么意思啊!如下图,坐等!!!
NOP在汇编语言里是 空操作指令 说白了就是让51单片机执行到此命令时什么都不做在等会,起到延时作用。
E. 51单片机c语言 _nop_()是一个空指令短时间延时的空几个机器周期
这个_nop_()等效与汇编里面的,NOP指令,也就是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期【即一个机器周期】,操作方法如下:
1、首先,可以利用keil来进行模拟实验,观察软件所显示的数值,然后再进行相关的运算,即可得出结果。
F. 在51单片机中_nop_()延时多长时间
_nop_()要延时1个指令周期。
1、时钟周期=振荡周期,名称不同而已,都是等于单片机晶振频率的倒数,如常见的外接12M晶振,那它的时钟周期=1/12M。
2、机器周期,8051系列单片机的机器周期=12*时钟周期,之所以这样分是因为单个时钟周期根本干不了一件完整的事情(如取指令、写寄存器、读寄存器等),而12个时钟周期就能基本完成一项基本操作了。
3、指令周期。一个机器周期能完成一项基本操作,但一条指令常常是需要多项基本操作结合才能完成,完成一条指令所需的时间就是指令周期,当然不同的指令,其指令周期就不一样的了。
G. 单片机c语言中可以直接用NOP();而不用_nop_()不
NOP();这个好像只要在MSP430单片机中用过,而_nop_()这个是用在51单片机中的,不过要加头文件#include <intrins.h>。
H. 51单片机中nop函数是干嘛的
51的指令周期是对晶振12分频
如果晶振是12m
那么执行一条一个周期的的指令就是1us
即1s/(12m/12分频)
=1us
nop是一个周期
所以
20m下
1s/(20m/12)=0.6us
I. 51单片机c语言里 _nop_ 函数怎么用
在单片机c语言中直接调用库函数即可,具体如下:
#include<intrins.h> // 声明了void_nop_(void);
_nop_(); // 产生一条NOP指令。
该函数的作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
J. 单片机汇编中为什么要用NOP
在单片机C语言中加入NOP指令是因为标准的C语言中没有空语句。
但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在AVR-GCC中,如下方法嵌入汇编指令:
asm ("nop; nop; nop; nop;" ::);
在keil C51中,直接调用库函数:
#include// 声明了void _nop_(void);
_nop_();// 产生一条NOP指令
(10)单片机nop扩展阅读
执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W 。
读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
作用:对于延时很短的,要求在us级的,采用“_nop_ ”函数,这个函数相当汇编NOP指令,延时几微秒。NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
在选择C51中循环语句时,要注意以下几个问题:
第一、定义的C51中循环变量,尽量采用无符号字符型变量。
第二、在FOR循环语句中,尽量采用变量减减来做循环。
第三、在do,, while, while 语句中,循环体内变量也采用减减方法。
这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。