各個單片機--時鍾周期、機器周期、指令周期


1.時鍾周期
單片機時鍾頻率的倒數  它可以表示為時鍾晶振頻率(1秒鍾的時鍾脈沖數)的倒數(也就是1s/時鍾脈沖數,比如1/12MHz),

是CPU和其他單片機的基本時間單位。對CPU來說,在一個時鍾周期內,CPU僅完成一個最基本的動作。時鍾脈沖是計算機的基本工作脈沖,控制着計算機的工作節奏。時鍾頻率越高,時鍾周期就越短,工作速度也就越快。時鍾周期在CPU的描述里也叫節拍,即將一個機器周期划分成若干個相等的時間段,每一段僅完成一個基本操作,用一個電平信號寬度對應。

2.機器周期
從內存中讀取一個指令字的最短時間來規定CPU周期(機器周期),也即CPU完成一個基本操作所需的時間。機器周期主要針對匯編語言而言,在匯編語言下,程序的每一條語句執行的時間都是機器周期的整數倍,而且語句占用的時間是可以計算出來的,而c語言語句占用時間是不可計算的。

在計算機中,為了便於管理,常把一條指令的執行過程划分為若干個階段,每一階段完成一項工作。例如,取指令、存儲器讀、存儲器寫等,這每一項工作稱為一個基本操作。完成一個基本操作所需要的時間稱為機器周期。一般情況下,一個機器周期由若干個S周期(狀態周期)組成。

51單片機在其標准架構下,一個機器周期等於12個時鍾周期。現在有不少增強型的51單片機,其速度都比較快。有的一個機器周期等於4個時鍾周期,有的一個機器周期等於1個時鍾周期。也就是說大體上可以達到51標准架構的3倍或12倍。
在8051系列單片機的一個機器周期由6個S周期(狀態周期)組成。 一個S周期=2個節拍(P),也就是一個狀態周期包含2個時鍾周期,所以8051單片機的一個機器周期=6個狀態周期=12個時鍾周期。又稱CPU的工作周期或基本周期,總線周期。

3.指令周期
執行一條指令所需要的時間,是從取指令、分析指令到執行完指令所需的全部時間。
計算機中,常把一條指令的執行過程划分為若干個階段,每一個階段完成一項工作。每一項工作稱為一個基本操作,完成一個基本操作所需要的時間稱為機器周期,所以一個指令周期一般由若干個機器周期組成。指令不同,所需的機器周期也不同,比如一個復雜指令可能需要很多個機器周期才能完成,而每個機器周期又由多個時鍾周期完成。

對於一些簡單的的單字節指令,在取指令周期中,指令取出到指令寄存器后,立即譯碼執行,不再需要其它的機器周期。對於一些比較復雜的指令,例如轉移指令、乘法指令,則需要兩個或者兩個以上的機器周期。通常含一個機器周期的指令稱為單周期指令,包含兩個機器周期的指令稱為雙周期指令。

4.各種單片機周期
在430中,一個時鍾周期 = MCLK晶振的倒數。如果MCLK是8M,則一個時鍾周期為1/8us;
一個機器周期 = 一個時鍾周期,即430每個動作都能完成一個基本操作;
一個指令周期 = 1~6個機器周期,具體根據具體指令而定。
stm32和430相同
51   晶振11.0592   一條語句  大約1us
430  沒有設置分頻,在8MHZ晶振下   那么機器周期就是1/8M=125ns, 單指令的執行時間就是125ns
(一條C語言需要多久,這里就要看他的反匯編是多少條指令周期了,如果是N條,那么執行這一條C語言需要的時間就為 N*125ns)。推測:執行一條反匯編指令占一個指令周期
STM32在系統時鍾沒有倍頻時,和430一樣
stm32是3級流水線設計,所以周期時間是不一定的。官方數據手冊應該有寫速度。


通常,
{ int i,j;
for(i=0;i<x;i++)
for(j=1;j<1000;j++);
} X=多少是延遲1MS?怎么計算的
51執行一條指令的需要12個時鍾周期,假如使用12MHZ晶振,執行一條指令的時間就是(1/12M*12)s,也就是1us,你要得到1Ms的延時,就讓他反復執行一條指令1000次,也就是x取1就可以了。
(以上這種算法應該不對,指令周期是指機器指令)*****************************************************************
匯編和機器指令對應,C語言不直接對應指令,C語言可以編譯成匯編,最后變成指令。
總的來說C能做的匯編都可以,但是C程序簡單易維護,匯編的在時間、空間有限時效果好。
每一條的匯編指令對應相應的機器指令,所以有了指令集和指令編碼這回事
機器語言是指能在一個處理器上執行的代碼序列。
匯編語言,是機器語言的助記符,如MOV AX,BX, 一般一條匯編語言對應一條機器指令。
機器語言是指能在一個處理器上執行的代碼序列。


程序:通常指程序員編寫的程序源文件代碼,需要編譯器編譯成匯編代碼(也叫匯編程序),然后再匯編成機器代碼。

不同的編譯軟件,對 for 語句的編譯也不盡相同,以keil 為例,對 for(i=0;i<1;i++) n++;(i,n 均為 char 型或 unsigned char 型)進行編譯,得:
①一條賦值語句(i=0) 2個機械周期,
②一條判斷語句(i<1) 4個機械周期,
③一條自增語句(n++) 1個機械周期,
④又一條自增語句(i++) 1個機械周期,
⑤又一條判斷語句(i<1) 4個機械周期,結束。
共計 12個機械周期。
——————————————————————————————————————————————————————————————

原文鏈接:https://blog.csdn.net/xuxia_yan/article/details/78852454


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM