一个_nop_()函数延时一个机器周期的时间。要通过你的指令周期和晶振来看:如8051 12M晶振 ——nop——() 1个us。
函数名: _nop_原 型: void _nop_(void)
void_tuzi_(void)
void _nop_(void)
功 能:_nop_产生一个NOP 指令,该函数可用作C 程序的时间比较。C51 编译器在_nop_函数工作期间不产生函数调用,即在程序中直接执行了NOP 指令。
扩展资料:
intrins.h内部函数
(1)_crol_ 字符循环左移
(2)_cror_ 字符循环右移
(3)_irol_ 整数循环左移
(4)_iror_ 整数循环右移
(5)_lrol_ 长整数循环左移
(6)_lror_ 长整数循环右移
(7)_nop_ 空 *** 作 (相当于8051 NOP 指令)
(8)_testbit_ 测试并清零位 (相当于8051 JBC 指令)
参考资料:百度百科——intrins.h
NOP指令,也称作“空指令”,在x86的CPU中机器码为0x90(144)。
NOP不执行 *** 作,但占一个程序步。执行NOP时并不做任何事,有时可用NOP指令短接某些触点或用NOP指令将不要的指令覆盖。当PLC执行了清除用户存储器 *** 作后,用户存储器的内容全部变为空 *** 作指令。
NOP指令属于PLC指令,使用时会占用执行一个指令的CPU时间片。常用于程序延时或精确计时,不过在较快的CPU上不明显。
扩展资料:
传送指令:
1、包括通用数据传送指令MOV、条件传送指令CMOVcc、堆栈 *** 作指令PUSH/PUSHA/PUSHAD/POP/POPA/POPAD、交换指令XCHG/XLAT/BSWAP、地址或段描述符选择子传送指令LEA/LDS/LES/LFS/LGS/LSS等。
逻辑运算:
1、这部分指令用于执行算术和逻辑运算,包括加法指令ADD/ADC、减法指令SUB/SBB、加一指令INC、减一指令DEC、比较 *** 作指令CMP、乘法指令MUL/IMUL。
2、除法指令DIV/IDIV、符号扩展指令CBW/CWDE/CDQE、十进制调整指令DAA/DAS/AAA/AAS、逻辑运算指令NOT/AND/OR/XOR/TEST等。
移位指令:
1、这部分指令用于将寄存器或内存 *** 作数移动指定的次数。包括逻辑左移指令SHL、逻辑右移指令SHR、算术左移指令SAL、算术右移指令SAR、循环左移指令ROL、循环右移指令ROR等。
位 *** 作:
1、这部分指令包括位测试指令BT、位测试并置位指令BTS、位测试并复位指令BTR、位测试并取反指令BTC、位向前扫描指令BSF、位向后扫描指令BSR等。
参考资料:百度百科-NOP
你写的这个延时程序的反汇编代码如下:(使用keil3反汇编),使用12MHZ晶振,每个机器周期占用1us,那么只循环一次总共用时为18us.
C:0x0800
EF
MOV
A,R7
C:0x0801
4E
ORL
A,R6
C:0x0802
6009
JZ
C:080D
C:0x0804
00
NOP
C:0x0805
00
NOP
C:0x0806
EF
MOV
A,R7
C:0x0807
1F
DEC
R7
C:0x0808
70F6
JNZ
delay(C:0800)
C:0x080A
1E
DEC
R6
C:0x080B
80F3
SJMP
delay(C:0800)
C:0x080D
22
RET
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)