在單片機C語言中加入NOP指令是因為標準的C語言中沒有空語句。
但在單片機的C語言編程中,經常需要用幾個空指令產生短延時的效果。
這在匯編語言中很容易實現,寫幾個nop就行了。
在AVR-GCC中,如下方法嵌入匯編指令:
asm ("nop; nop; nop; nop;" ::);
在keil C51中,直接調用庫函數:
#include// 聲明了void _nop_(void);
_nop_();// 產生壹條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編譯器中,對不同的循環方法,采用不同的指令來完成的。