天天看點

《例說51單片機(C語言版)(第3版)》一1.4 MCS-51的時序分析與複位

本節書摘來自異步社群《例說51單片機(c語言版)(第3版)》一書中的第1章,第1.1節,作者 張義和 , 王敏男 , 許宏昌 , 餘春長,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

例說51單片機(c語言版)(第3版)

在本單元裡将介紹8x51的複位(reset)與時序分析。

1.4.1 時序分析

時鐘脈沖是微型計算機系統的基本信号,在1-2節裡,我們曾經簡單地介紹了8x51的時鐘脈沖。不管是采用内部的振蕩電路,或由外部的時鐘脈沖産生電路提供的時鐘脈沖,這個時鐘脈沖将成為整個系統運作的根據。89c51的額定時鐘脈沖為0到24mhz,表示隻要不超過24mhz即可。而89s51的額定時鐘脈沖為0到33mhz,表示隻要不超過33mhz就不會有問題。當我們在設計電路時,是不是要使用其最高的頻率呢?當然不是這樣。若時鐘脈沖的頻率太高,可能會導緻程式複雜、使用的cpu資源增大,“延遲函數”就是最明顯的例子。

通常我們會挑選一個常用、容易買到(且便宜)的石英振蕩晶體,而且程式不必刻意修改就能相容,這裡挑選最常用的12mhz時鐘脈沖。

如圖1-21所示為12mhz時鐘脈沖的時序圖,一個機器周期由6個狀态周期(s1到s6)所構成,每個狀态周期包括兩個時鐘脈沖(即p1、p2)。對于12mhz的時鐘脈沖而言,一個脈沖的周期為1/12μs,一個機器周期包含12個時鐘脈沖,也就是1μs。

在8x51的111條指令裡,除了執行乘法與除法指令需要4個機器周期外,其餘指令都能在1個或2個機器周期執行完畢。盡管如此,有些指令的長度為1b,有些為2b,還有少數指令為3b。對于不同的指令,cpu如何讀取與執行呢?在此将結合圖1-21簡要說明。首先是位址鎖存使能引腳ale,每個機器周期送出兩個脈沖(分别是在s1及s4時),以鎖存p0輸出的位址(a0~a7),cpu将進行讀取存儲器的動作。對于不同的指令類型,其動作分别說明如下。

1個機器周期、1b的指令,如clr c指令,在s1時讀取指令,在s6時執行完畢;而在s4時讀取下條指令,但并不使用它,直到下個機器周期的s1時再重新讀取下條指令。

1個機器周期、2b的指令,如inc direct指令,在s1時讀取指令,在s4時讀取第二個byte,在s6時執行完畢。在下個機器周期的s1時讀取下條指令,以此類推。

2個機器周期、1b的指令,如ret指令,在s1時讀取指令,而在s4及下個機器周期的s1、s4時分别讀取下條指令,由于指令尚未執行完畢,是以這三個階段的指令讀取都會被放棄。直到第二個機器周期的s6,指令執行完畢後,cpu才會在第三個機器周期的s1重新讀取下條指令,才是有效的讀取。

《例說51單片機(C語言版)(第3版)》一1.4 MCS-51的時序分析與複位

圖1-21 時序分析圖

另外一種2個機器周期、1b的指令為存取外部存儲器資料的指令,即movx指令。同樣在第一個機器周期的s1時讀取指令,而在s4時讀取下條指令,當然也會被放棄。在s5時p0送出的a0到a7位址将被放入鎖存器,而s6到下個機器周期的s3之間,由p0進行外部存儲器的資料存取。由于進行外部存儲器的存取,第二個機器周期的s1與s4并不進行讀取指令的動作,直到第三個機器周期的s1時,才會重新讀取下條指令。

對于微型計算機系統而言,複位是一項很重要的歸零動作。而8x51的複位是将高電平加到reset引腳(第9腳)上,時間超過兩個機器周期以上,也就是2μs。一般手動按8x51系統裡的reset按鈕開關都會超過2μs,換言之,隻要按reset按鈕,就一定會使系統複位。當系統複位時,cpu内部寄存器将回歸初始狀态(如表1-6所示),程式将從0000h處開始執行。

《例說51單片機(C語言版)(第3版)》一1.4 MCS-51的時序分析與複位

繼續閱讀