什麼函數表示等待一個機器周期
㈠ 單片機中用c語言寫一個延時函數:延時若干機器周期_nop_()
void Delay()
{
_nop_();
_nop_();
_nop_();
。。來。。
_nop_();
}
這能這么源寫,需要延時多少機器周期就寫多少個_nop_();函數
㈡ 什麼是機器周期
在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一版階段權完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。
一般情況下,一個機器周期由若干個S周期(狀態周期)組成。通常用內存中讀取一個指令字的最短時間來規定CPU周期,它一般由12個時鍾周期(振盪周期)組成,也是由6個狀態周期組成。而振盪周期=1秒/晶振頻率,因此單片機的機器周期=12秒/晶振頻率 。
(2)什麼函數表示等待一個機器周期擴展閱讀
在一個時鍾周期內,CPU僅完成一個最基本的動作。由於時鍾脈沖是計算機的基本工作脈沖,它控制著計算機的工作節奏(使計算機的每一步都統一到它的步調上來)。顯然,對同一種機型的計算機,時鍾頻率越高,計算機的工作速度就越快。
機器周期和匯流排周期並無明確的相互包含的關系。機器周期指的是完成一個基本操作的時間,這個基本操作有時可能包含匯流排讀寫,因而包含匯流排周期,但是有時可能與匯流排讀寫無關。
㈢ 什麼是機器周期
機器周期:在計算機中,為了便於管理,常把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。
一般情況下,一個機器周期由若干個S周期(狀態周期)組成。通常用內存中讀取一個指令字的最短時間來規定CPU周期,(也就是 計算機通過內部或外部匯流排進行一次信息傳輸從而完成一個或幾個微操作所需要的時間))。
它一般由12個時鍾周期(振盪周期)組成,也是由6個狀態周期組成。而振盪周期=1秒/晶振頻率,因此單片機的機器周期=12秒/晶振頻率 。
(3)什麼函數表示等待一個機器周期擴展閱讀:
分類:
1,指令周期(Instruction Cycle):取出並執行一條指令的時間。
2,匯流排周期(BUS Cycle):也就是一個訪存儲器或I/O埠操作所用的時間。
3,時鍾周期(Clock Cycle):又稱震盪周期,是處理操作的最基本單位。(晶振頻率的 倒數)
4,指令周期、匯流排周期和時鍾周期之間的關系:一個指令周期由若干個匯流排周期組成,而一個匯流排周期時間又包含有若干個時鍾周期。
一個匯流排周期包含一個(只有取址周期)或多個機器周期。
㈣ 所查詢的機器周期不是所執行指令的最後一個機器周期這句話什麼意思
在計算機中來,為了便於管理,常源把一條指令的執行過程劃分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。
通過上面的介紹應該明白了吧?就是說程序沒有執行完。
㈤ 為什麼51單片機一個機器周期有12個時鍾周期 這話什麼意思 機器周期是多少時鍾周期是生產單片機時就確定的嗎
一個機器周期=12個時鍾周期是生產時就確定的,原因就是因為51的執行速度相對較慢,MCU運行時是對外部時鍾進行了12分頻。
一般情況下,一個機器周期由若干個S周期(狀態周期)組成。通常用內存中讀取一個指令字的最短時間來規定CPU周期,(也就是 計算機通過內部或外部匯流排進行一次信息傳輸從而完成一個或幾個微操作所需要的時間)),一般由12個時鍾周期(振盪周期)組成,也是由6個狀態周期組成。而振盪周期=1秒/晶振頻率,因此單片機的機器周期=12秒/晶振頻率 。
(5)什麼函數表示等待一個機器周期擴展閱讀:
單片機指令周期:
CPU每取出一條指令並執行這條指令,都要完成一系列的操作,這一系列操作所需要的時間通常叫做一個指令周期。換言之指令周期是取出一條指令並執行這條指令的時間。
由於各條指令的操作功能不同,因此各種指令的指令周期是不盡相同的。
例如一條加法指令的指令周期同一條乘法指令的指令周期是不相同的。指令周期常常用若干個CPU周期數來表示,CPU周期也稱機器周期。
指令不同,所需的機器周期數也不同。對於一些簡單的單位元組指令,在取指令周期中,指令取出到指令寄存器後,立即解碼執行,不再需要其它的機器周期。對於一些比較復雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。
㈥ 問一個關於delay函數的問題
void delay(uint i)
{
while(i)i--;
}
這樣的延遲設計很不好,因為受影響的因素太多。
首先就是機器的CPU頻率,快的CPU執行i--這句的機器時間短,慢的機器就很慢。
其次是當前機器的負荷情況,負荷較重時,系統給當前進程分配的CPU時間少,執行這些語句的機會就少,延遲就增加了。
影響因素還有很多在此不再列舉。
做延遲程序主要有以下幾種方法:
1. 定時器法
用CWnd::SetTimer()函數設置定時器,當定時時間到時發送WM_TIMER消息觸發CWnd::OnTimer()函數,重載它把自己的代碼放進去。
SetTimer()參數為毫秒,此方法定時不高,受系統負荷影響。
2. 休眠法
調用系統API函數Sleep(2000); 參數單位是毫秒,2000代表2秒。
此方法主要收到當前系統負荷的影響,定時不太准確
3. 時刻比較法
定義兩個CTime變數,一個用於記錄起始時刻,另一個放在循環體中不斷刷新當前時刻,並減去起始時刻,自己計算是否到時間了。
此方法因CTime變數只能獲取秒級的時刻,且收到系統負荷影響,精度也較低。
4. CPU滴答查詢法
利用兩個API函數QueryPerformanceFrequency()和QueryPerformanceCounter()分別獲取CPU的頻率和CPU滴答數,依時刻比較法自己計算時刻差值。
因為CPU滴答數是等於CPU的機器周期的,所以是Windows系統里最最精確的計時方法了。現在的CPU主頻都是GHz級的,因此理論上計時精度可以到納秒。
只要系統負荷不太重,此法可用於極其精確的延時程序。
因為Windows並不是實時操作系統,因此對於太過精確的計時,還是無能為力的。
㈦ 該延時函數在51單片機中,while語句循環1次和循環10次 ,各需要幾個機器周期在線等
你看看你的單片機的抄晶振是多少,我的是11.0592MHZ,你要是做1us延時的話,可以看下我的,
/*************************************************
Function: // 15us延時函數
Description: // 實現15us的整數倍延時
Input: // unsigned int i
*************************************************/
void Delay_15us (unsigned int i) //15*i+15us延時
{
for(i;i>0;i--)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
_nop_();
_nop_();
}
如果你要是做到1us的話可以直接寫_nop_();這是個空指令,系統什麼也不幹,延時大概就是1us,如果你要是這么寫的話,就要包含頭文件#include<intrins.h>
㈧ 一個_nop_();函數延時多長時間
一個_nop_();函數延時一個機器周期的時間。要通過你的指令周期和晶振來看:如8051 12M晶振 ——nop——()內 1個us。
函數容名: _nop_原 型: void _nop_(void);
void_tuzi_(void);
void _nop_(void);
功 能:_nop_產生一個NOP 指令,該函數可用作C 程序的時間比較。C51編譯器在_nop_函數工作期間不產生函數調用,即在程序中直接執行了NOP 指令。
(8)什麼函數表示等待一個機器周期擴展閱讀:
intrins.h內部函數
(1)_crol_ 字元循環左移
(2)_cror_ 字元循環右移
(3)_irol_ 整數循環左移
(4)_iror_ 整數循環右移
(5)_lrol_ 長整數循環左移
(6)_lror_ 長整數循環右移
(7)_nop_ 空操作 (相當於8051 NOP 指令)
(8)_testbit_ 測試並清零位 (相當於8051 JBC 指令)
㈨ 時鍾周期、指令周期、機器周期、匯流排周期都是什麼意思
1、時鍾周期也稱為振盪周期, 定義為時鍾脈沖的倒數 (可以這樣來理解, 時鍾內周期就是單 片機外接晶振容的倒數, 例如 12M 的晶振, 它的時間周期就是 1/12 us) , 是計算機中最基本的、 最小的時間單位。
2、機器周期。在計算機中, 為了便於管理, 常把一條指令的執行過程劃分為若干個階段, 每一階段完 成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完 成一個基本操作所需要的時間稱為機器周期。
3、指令周期。指令周期是執行一條指令所需要的時間, 一般由若干個機器周期組成。
4、匯流排周期。通常把 CPU 通過匯流排對微處理器外部 (存儲器或 I/O埠 ) 進行一次訪問所需要時間稱為一個匯流排 周期 。