asm(“nop”)是內嵌彙編做空指令延時用的,其中asm()的作用是指函數內部的參數翻譯為彙編指令,其作用是在C語言環境下直接使用彙編指令執行。nop是一個空等待彙編指令,這個指令執行時,單片機是什麼也不做,僅僅起一個時間延時作用。
CC2530屬於8051系列單片機,asm(“nop”)執行的是一條空指令(單周期指令),佔用時間是一個機器周期,晶振為32Mhz。
於是,機器周期=12*1/32=0.375us。即一句asm(“nop”)延時了0.375us。
科普一下刻度,機器周期,指令周期,匯流排周期
刻度:
刻度也稱為振蕩周期,定義為時鐘脈衝的倒數(可以這樣來理解,刻度就是單片機外接晶振的倒數,例如12M的晶振,它的時間周期就是1/12 us),是電腦中最基本的、最小的時間單位。
在一個刻度內,CPU僅完成一個最基本的動作。對於某種單片機,若採用了1MHZ的時鐘頻率,則刻度為1us;若採用4MHZ的時鐘頻率,則時鐘 周期為250us。由於時鐘脈衝是電腦的基本工作脈衝,它控制著電腦的工作節奏(使電腦的每一步都統一到它的步調上來)。顯然,對同一種機型的電腦,時鐘頻率越高,電腦的工作速度就越快。具體計算就是1/fosc。也就是說如果晶振為1MHz,那麼刻度就為1us;6MHz的話,就是1/6us。
8051單片機把一個刻度定義為一個節拍(用P表示),二個節拍定義為一個狀態周期(用S表示)。
機器周期:
在電腦中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、儲存空間讀、儲存空間寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態周期)組成。
8051系列單片機的一個機器周期同6個 S周期(狀態周期)組成。前面已說過一個刻度定義為一個節拍(用P表示),二個節拍定義為一個狀態周期(用S表示),8051單片機的機器周期由6個 狀態周期組成,也就是說一個機器周期=6個狀態周期=12個刻度。 具體計算為:刻度 X cycles。如果單片機是12周期的話,那麼機器周期就是T×12。假設晶振頻率為12M,單片機為12周期的話,那麼機器周期就是1us。
例如外接24M晶振的單片機,他的一個機器周期=12/24M 秒;52系列單片機一個機器周期等於12個刻度。設晶振頻率為12MHz時,52單片機是12T的單片機,即頻率要12分頻。12M經過分頻變為1M,由T=1/f,即一個機器周期變為1us。
指令周期:
執行一條指令所需要的時間,一般由若干個機器周期組成。指令不同,所需的機器周期也不同。通常,包含一個機器周期的指令成為單周期指令,比如CLR,MOV等等。包含兩個機器周期的指令稱為雙周期指令。另外還有4周期指令,比如乘法和除法指令。對於一些簡單的的單位元組指令,在取指令周期中,指令取出到指令寄存器後,立即解碼執行,不再需要其它的機器周期。對於一些比較複雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。
匯流排周期:
由於存貯器和I/O連接埠是掛接在匯流排上的,CPU對存貯器和I/O介面的訪問,是通過匯流排實現的。通常把CPU通過匯流排對微處理器外部(存貯器或 I/O介面)進行一次訪問所需時間稱為一個匯流排周期。
總結一下,刻度是最小單位,機器周期需要1個或多個刻度,指令周期需要1個或多個機器周期;機器周期指的是完成一個基本操作的時間,這個基本操作有時可能包含匯流排讀寫,因而包含匯流排周期,但是有時可能與匯流排讀寫無關,所以,並無明確的相互包含的關係。 指令周期:是CPU的關鍵計量,指取出並執行一條指令的時間。一般以機器周期為單位,分單指令執行循環、雙指令執行循環等。現在的處理器的大部分指令(ARM、DSP)均採用單指令執行循環。機器周期:完成一個基本操作的時間單元,如取指周期、取數周期。刻度:CPU的晶振的工作頻率的倒數。