nopoo(nop)
大家好,今天小六子来为大家解答以下的问题,关于nopoo,nop这个很多人还不知道,现在让我们一起来看看吧!
1、在单片机C语言中加入NOP指令是因为标准的C语言中没有空语句。
2、但在单片机的C语言编程中,经常需要用几个空指令产生短延时的效果。
3、这在汇编语言中很容易实现,写几个nop就行了。
4、在AVR-GCC中,如下方法嵌入汇编指令:asm ("nop; nop; nop; nop;" ::);在keil C51中,直接调用库函数:#include// 声明了void _nop_(void);_nop_();// 产生一条NOP指令扩展资料执行NOP指令只使程序计数器PC加1,所以占用一个机器周期。
5、实例:MOVLW 0xOF ;送OFH到W MOVWF PORT_B ;W内容写入B口 NOP ;空操作 MOVF PORT_B,W 。
6、读操作说明:该三条指令是一种对I/O口的B口连续操作的实例,其目的达到写入B口的内容要读出时,应保证写、读之间有个稳定时间,因此加入了空操作指令NOP。
7、作用:对于延时很短的,要求在us级的,采用“_nop_ ”函数,这个函数相当汇编NOP指令,延时几微秒。
8、NOP指令为单周期指令,可由晶振频率算出延时时间,对于12M晶振,延时1uS。
9、对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现。
10、在选择C51中循环语句时,要注意以下几个问题:第一、定义的C51中循环变量,尽量采用无符号字符型变量。
11、第二、在FOR循环语句中,尽量采用变量减减来做循环。
12、第三、在do,, while, while 语句中,循环体内变量也采用减减方法。
13、这因为在C51编译器中,对不同的循环方法,采用不同的指令来完成的。
本文分享完毕,希望对你有所帮助。