基礎(chǔ)篇:關(guān)于單片機(jī)工作的基本時(shí)序介紹
時(shí)序就是 CPU 總線信號(hào)在時(shí)間上的順序關(guān)系。CPU 的控制器實(shí)質(zhì)上是一個(gè)復(fù)雜的同 步時(shí)序電路,所有工作都是在時(shí)鐘信號(hào)控制下進(jìn)行的。每執(zhí)行一條指令,CPU 的控制器都要發(fā)出一系列特定的控制信號(hào),這些控制信號(hào)在時(shí)間上的相互關(guān)系就是 CPU 的時(shí)序。
CPU 發(fā)出的時(shí)序控制信號(hào)有兩大類。一類是用于單片機(jī)內(nèi)部協(xié)調(diào)控制的,但對(duì)用戶來(lái)說(shuō),并不直接接觸這些信號(hào),可不必了解太多。另一類時(shí)序信號(hào)是通過(guò)單片機(jī)控制總線送到片外,形成對(duì)片外的各種 I/O 接 口、RAM 和 EPROM 等芯片工作的協(xié)調(diào)控制,對(duì)于這部分時(shí)序信號(hào)用戶應(yīng)該關(guān)心。
1.機(jī)器周期和指令周期
下面先介紹幾個(gè)時(shí)序概念:
(1) 振蕩周期:也稱時(shí)鐘周期,是指為單片機(jī)提供時(shí)鐘脈沖信號(hào)的振蕩源的周期。
(2) 狀態(tài)周期:每個(gè)狀態(tài)周期為時(shí)鐘周期的 2 倍,是振蕩周期經(jīng)二分頻后得到的。
(3) 機(jī)器周期:一個(gè)機(jī)器周期包含 6 個(gè)狀態(tài)周期 S1~S6 ,也就是 12 個(gè)時(shí)鐘周期。在一個(gè)機(jī)器周期內(nèi),CPU 可以完成一個(gè)獨(dú)立的操作。
(4) 指令周期:它是指 CPU 完成一條操作所需的全部時(shí)間。每條指令執(zhí)行時(shí)間都是由一個(gè)或幾個(gè)機(jī)器周期組成的。MCS 51 系統(tǒng)中,有單周期指令、雙周期指令和四周期指令。
2.MCS 51 指令的取指/執(zhí)行時(shí)序
MCS 51 單片機(jī)取指/執(zhí)行時(shí)序如圖 2.7 所示,每條指令的執(zhí)行都包括取指和執(zhí)行兩 個(gè)階段。在取指階段,CPU 從內(nèi)部或外部 ROM 中取出指令操作碼及操作數(shù),然后再執(zhí)行 這條指令。通常,在每個(gè)機(jī)器周期內(nèi) ALE 信號(hào)出現(xiàn)兩次,時(shí)刻為 S1P2 和 S4P2 ,信號(hào)的有效寬度為一個(gè) S 狀態(tài)。每出現(xiàn)一次 ALE 信號(hào),CPU 就依次進(jìn)行取指操作,但并不是每條 指令在 ALE 生效時(shí)都能有效地讀取指令。如果是單個(gè)指令,在 S4 期間仍有讀操作,但讀出的字節(jié)被丟棄,且讀后的 PC 值不加 1 。如果是雙周期指令,則在 S4P2 期間讀第二字節(jié), 在 S6P2 時(shí)結(jié)束指令。
圖 2.7(a)、(b) 分別為單字節(jié)單周期指令和雙字節(jié)單周期指令的時(shí)序。
圖 2.7(c) 為單字節(jié)雙周期指令的時(shí)序,它在兩個(gè)機(jī)器周期內(nèi)發(fā)生 4 次讀操作,后 3 次 讀操作是無(wú)效的。
圖 2.7(d) 為指令 MOVX 操作 時(shí)序 ,它是一條單字節(jié)雙周期指令。第一機(jī)器周期 S5 開(kāi)始時(shí),送出外部數(shù)據(jù)存儲(chǔ)器的地址,隨后讀或?qū)憯?shù)據(jù)。讀寫(xiě)期間在 ALE 端不輸出有效信號(hào),在第二機(jī)器周期,即外部數(shù)據(jù)存儲(chǔ)器已被尋址和選通后,也不產(chǎn)生取指操作。
當(dāng) CPU 對(duì)外部數(shù)據(jù)存儲(chǔ)器 RAM 讀寫(xiě)時(shí),ALE 不是周期信號(hào)。
3. 訪問(wèn)外部 ROM 和 RAM 的時(shí)序
如果指令是從外部 ROM 中讀取 ,除 了 ALE 信號(hào)之外,控制信號(hào)還有PSEN 。此外,還要用到 P0 和 P2 口,P0 口分時(shí)用做低 8 位地址和數(shù)據(jù)總線,P2 口用做高 8 位地址總 線。相應(yīng)的時(shí)序圖如圖 2.8 所示。
其過(guò)程如下:
(1) 在 S1P2 時(shí) ALE 信號(hào)有效;
(2) 在 P0 口送出 ROM 地址低 8 位,在 P2 口送出 ROM 地址高 8 位。低 8 位地址信號(hào)只持續(xù)到 S2 結(jié)束,故在外部要用鎖存器加以鎖存,ALE 為地址鎖存信號(hào) 。高 8 位地址在整個(gè)讀指令過(guò)程中都有效,不必再接鎖存器,到 S2P2 前 ALE 失效。
(3) 在 S3P1 時(shí)刻 PSEN開(kāi)始有效,用它來(lái)選通外部 ROM 的使用端,所選中 ROM 單元的內(nèi)容,從 P0 口讀入到 CPU,隨后 PSEN 信號(hào)失效。
(4) 在 S4P2 后開(kāi)始第二次讀入,過(guò)程和第一次相同。
訪問(wèn)外部數(shù)據(jù) RAM 時(shí),使用的控制信號(hào)有 ALE 和RD(讀) 或WR(寫(xiě)),P0 和 P2 口仍然要用,作為傳送 RAM 地址線和讀寫(xiě)數(shù)據(jù)線。讀外部數(shù)據(jù) RAM 的 時(shí)序如 圖 2.9 所示, 其過(guò)程如下:
(1) 第一次 ALE 有效到第二次 ALE 出現(xiàn)前的過(guò)程和讀外部 ROM 相同。
(2) 第二次 ALE 有效后,P0 口、P2 口分別送出 RAM 單元的低 8 位和高 8 位地址。
(3) 在第二個(gè)機(jī)器周期第一個(gè) ALE 不再 出現(xiàn),此時(shí)PSEN為高 電平,第二個(gè)機(jī)器周期的 S1P1 時(shí)RD開(kāi)始有效,選通 RAM 芯片,從 P0 口讀出 RAM 單元數(shù)據(jù)。
(4) 第二個(gè)機(jī)器周期 的第二個(gè) ALE 出現(xiàn)時(shí) ,也對(duì)外部 ROM 進(jìn)行讀操作,但為無(wú)效操作。
若對(duì)外部 RAM 進(jìn)行寫(xiě)操作,則用WR信號(hào)來(lái)選通 RAM,其余過(guò)程與讀操作相似,寫(xiě)外部數(shù)據(jù) RAM 的時(shí)序如圖 2.10 所示。