c语言空指令
A. 单片机汇编中为什么要用NOP
在单片机c语言中加入NOP指令是因为标准的C语言中没有空语句。
但备档桐在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
这在汇编语言中很容易实现,写几个nop就行了。
在AVR-GCC中,如下方法嵌入汇编指令:
asm ("nop; nop; nop; nop;" ::);
在keil C51中,直接调用库函数:
#include// 声明了void _nop_(void);
_nop_();// 产生一条NOP指令
(1)c语言空指令扩展阅读
执行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编译器中,对不同的循环方法,采用不同的指令来完成的。仿坦
B. C语言中调用_nop_();应包含什么头文件
#include<intrins.h>
intrins.h一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使扒迅用。
这个头文件中的其他函数:
_crol_ 字符循环左移
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作 (相当于8051 NOP 指令)
_testbit_ 测试春败此并清零位 (相当于8051 JBC 指令)
函数名: _crol_,枯厅_irol_,_lrol_
原 型:
unsigned char _crol_(unsigned char val,unsigned char n);
unsigned int _irol_(unsigned int val,unsigned char n);
unsigned int _lrol_(unsigned int val,unsigned char n);
C. C中 _nop_()是什么意思
C中 _nop_()是空指令,延时一个指令周期;
闹凳如果是51单片机,外部晶振是12M,那么延时时间为1、12M*12=1us;
C语蔽乎言是一门通用计算机编程语言,应用广泛。
C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及液并旅不需要任何运行环境支持便能运行的编程语言。
D. 在c语言中仅由一个分号构成的语句为空语句他什么也不做
c语言中虚旁的空语差虚橡句经编译后就成了空誉孝指令,而空指令不会执行任何运算,但同样会消耗CPU的执行时间。
E. 51单片机c语言 _nop_()是一个空指令短时间延时的空几个机器周期
这个_nop_()等效与汇编里面的,NOP指令,也就是空一个机器周期,如果是传统51单片机的话,等于空12个时钟周期【即一个机器周期】山前,操作方法如下:
1、首先,可以利用keil来进行模拟实验,观察软件所显示的数值,然后再进行相关的运算,即可得出结果侍唯猛。
F. c语言空操作可执行多少次
执行次数不受限制。
c语言中空操作的指令是只由分号构成的语句,任何空语句都是可执行的源丛源,当你执行一个空语句时和普通雹态语句没有区别,只是空语句什么也不做而已,当你执行完一个空语句的时候(也就是什么都不用做郑悔就执行完了),自然就到语句的结束点,进而执行下一条语句。
G. C语言中 空操作的指令是什么
C语言中 空操作的指令是只由分号构成的语句
解释:C语言都是以;结尾的,所以空操作直接打一个;就可以,
H. 汇编空行指令是什么
没听说什么叫“旦信好空行指令”。一般的CPU倒是有一条什么都不操作模铅的空指令,其汇编格式大多为:NOP
不同的CPU是有不同的指令的,其表示方法也不坦早一定相同。
I. 汇编程序中nop的作用是什么
在单片机的C语言编程中,经常需要许多空指令来产生短延迟效应。
很容易做的汇编语言,只写几个空操作。
avr-gcc采用以下方法嵌入组装说明:
Asm(nop”;nop。nop。nop。”:);
在keilC51中,直接调用库函数:
包括//声明void_nop_(void);
_nop_();//生成一个NOP指令
(9)c语言空指令扩展阅读:
执行NOP指令只会增加程序计数器1个人电脑,所以需要一个机器周期。实例:MOVLW0xof;将OFH发送到WMOVWFPORT_B;在B端口写W到NOP;空操作MOVFPORT_B,W。
读指令:这三个端口B的连续操作指令的I/O端口,目的是为了写的内容读端口B,需要确保一个稳定的读写之间的时间,所以NOP添加空操作指令。
效果:很短的延迟,需要“_nop_”功能在美国水平,而编译NOP指令延迟的几微秒。NOP指令是单周期指令,延迟时间可以通过晶体振荡器的频率来计算。对于一个12M的晶体振荡器,延迟时间是1uS。
对于一个相对较长的延迟,要求大于10us,使用C51中的loop语句弊桐来实现。
在C51中选择loop语句时,要注意以下几点:
首先,在C51中定义了循环变量,尽量使用无符号字符变量。
其次,在FORloop语句中,尝试使用变量-来执行循租唯坦环。
第三,在while和while语句中,循环体变量也使用了减法。
这是因为山早在C51编译器中,不同的指令用于不同的循环方法。
J. C语言 #if……#else……的意思
预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:
指令
用途
#
空指令,无任何效果
#include
包含一个源代码文件
#define
定义宏#undef
取消已定义的宏#if
如果给定条件为真,则编译亩裤塌下面代码
#ifdef
如果宏已经定义,则编译下面代码
#ifndef
如果宏没有定义,则编译下面代码
#elif
如果前面的#if给定条件不为真,当前条件为真,则编译下面代码,其实就是else
if的简写
#endif
结束一个#if……#else条件编译块#error
停止编译并显示错误信息
#if……#else……
就是预编译,比如:
#if
1
。。。。
#else……
这里#if
1表示此次编译把其下的纯启代码编译进去,如果改为#if
0,则表示此次编译把#else后面的代码编译进去,而不是#if
0下的代码。
#if
TT
……#else……
TT是一个宏,这里表示如果TT这个宏定义的话,则编译#if
下的代码,否则#else下的迅圆代码。
具体可以参考:
http://blog.csdn.net/qiantuo1234/article/details/6976072