MCS-51的單片機內有兩個16位可編程的定時/計數器,它們具有四種工作方式,其控制字和狀態均在相應的特殊功能寄存器中,通過對控制寄存器的編程,就可方便地選擇適當的工作方式。下面我們對它們的特性進行闡述。 定時/計數器的工作方式 MCS-51單片機內部的定時/計數器的結構如圖1所示,定時器T0特性功能寄存器TL0(低8位)和TH0(高8位)構成,定時器T1由特性功能寄存器TL1(低8位)和TH1(高8位)構成。特殊功能寄存器TMOD控制定時寄存器的工作方式,TCON則用於控制定時器T0和T1的啟動和停止計數,同時管理定時器T0和T1的溢出標誌等。程序開始時需對TL0、TH0、TL1和TH1進行初始化編程,以定義它們的工作方式和控制T0和T1的計數。 TMOD和TCON這兩個特殊功能寄存器的格式參見下表: [1]. 定時/計數器的方式控制字TMOD,位元組地址為89H,其格式如表1: | | 表1 TMOD寄存器結構 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | GATA | | M1 | M0 | GATA | | M1 | M0 | ←T1方式欄位→ | ←T0方式欄位→ | [2]. 定時器控制積存器TCON,位元組地址為88H,位地址為88H—8FH,其格式如表2: | 表2 TCON結構 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | TMOD和TCON各位的意義和用途我們將在下面的章節中予以介紹,需要注意的是,TCON的D0—D3位與中斷有關,我們會在中斷的內容中加以說明,MCS-51的定時/計數器共有四種工作方式,我們逐個進行討論。 工作方式0 定時/計數器0的工作方式0電路邏輯結構見圖2(定時/計數器1與其完全一致),工作方式0是13位計數結構的工作方式,其計數器由TH的全部8位和TL的低5位構成,TL的高3位沒有使用。當=0時,多路開關接通振蕩脈衝的12分頻輸出,13位計數器以次進行計數。這就是定時工作方式。當=1時,多路開關接通計數引腳(To),外部計數脈衝由銀南腳To輸入。當計數脈衝發生負跳變時,計數器加1,這就是我們常稱的計數工作方式。 | 這就是日常生活和工作中的中斷現象,類似的情況還有很多,從編譯資料到接電督是第一次中斷,通電督的過程中引有客人到訪,這是第二次中斷,即在中斷的過程中又出現第二次中斷,這就是我們常說的中斷嵌套。處理完第二個中斷任務后,回頭處理第一個中斷,第一個中斷完成後,再繼續你原先的主要工作。 為什麼會出現這樣的中斷呢?道理很簡單,人非三頭六臂,人只有一個腦袋,在一種特定的時間內,可能會面對著兩、三甚至更多的任務。但一個人又不可能在同一時間去完成多樣任務,因此你只能采分析任務的輕重緩急,採用中斷的方法穿插去完成它們。那麼這種情況對於單片機中的中央處理器也是如此,單片機中CPU只有一個,但在同一時間內可能會面臨著處理很多任務的情況,如運行主程序、數據的輸入和輸出,定時/和計數時間已到要處理、可能還有一些外部的更重要的中斷請求(如超溫超壓)要先處理。此時也得象人的思維一樣停下某一樣(或幾樣)工作先去完成一些緊急任務的中斷方法。 這樣的一樣處理方法上升到計算機理論,就是一個資源面對多項任務的處理方式,由於資源有限,面對多項任務同時要處理時,就會出現資源競爭的現象。中斷技術就是為了解決資源競爭的一個可行的方法,採用中斷技術可使多項任務共享一個資源,所以有些文獻也稱中斷技術是一種資源共享技術。
[1].MCS-51的中斷結構 | | 計算機的中斷系統能夠加強CPU對多任務事件的處理能力。從而使它的應用範圍進一步擴大。在MCS-48結構的基礎上,MCS-51在增強了I/O的種類、功能和數量的同時,也增強了中斷能力。MCS-51提供了5個中斷源,兩個中斷優先順序控制,可實現兩個中斷服務嵌套。當CPU支持中斷屏蔽指令后,可將一部分或所有的中斷關斷,只有打開相應的中斷控制位后,方可接收相應的中斷請求。程序設置中斷的允許或屏蔽,也可設置中斷的優先順序。 [2].中斷處理流程 CPU響應中斷請求后,就立即轉入執行中斷服務程序。不同的中斷源、不同的中斷要求可能有不同的中斷處理方法,但它們的處理流程一般都如下所述。 現場保護和現場恢復
中斷服務程序完成後,繼續執行原先的程序,就需把保存的現場內容從堆棧中彈出,恢復積存器和存儲單元的原有內容,這就是現場恢復。 如果在執行中斷服務時不是按上述方法進行現場保護和恢復現場,就會是程序運行紊亂,程序跑飛,自然使單片機不能正常工作。 中斷打開和中斷關閉 在中斷處理進行過程中,可能又有新的中斷請求到來,這裡規疾,現場保護和現場恢復的操作是不允許打擾的,否則保護和恢復的過程就可能使數據出錯,為此在進行現場保護和現場恢復的過程中,必須關閉總中斷,屏蔽其它所有的中斷,待這個操作完成後再打開總中斷,以便實現中斷嵌套。 中斷服務程序 既然有中斷產生,就必然有其具體的需執行的任務,中斷服務程序就是執行中斷處理的具體內容,一般以子程序的形式出現,所有的中斷都要轉去執行中斷服務程序,進行中斷服務。 中斷返回 執行完中斷服務程序后,必然要返回,中斷返回就是被程序運行從中斷服務程序轉回到原工作程序上來。在MCS-51單片機中,中斷返回是通過一條專門的指令實現的,自然這條指令是中斷服務程序的最後一條指令。 [3].MCS-51的中斷源 8051有5個中斷源,它們是兩個外中斷INT0(P3.2)和INT1(P3.3)、兩個片內定時/計數器溢出中斷TF0和TF1,一個是片內串列口中斷TI或RI,這幾個中斷源由TCON和SCON兩個特殊功能寄存器進行控制。 在前一節,我們已對TCON的控制位進行了說明,現在繼續對它的中斷控制有關的位進行談論。TCON寄存器的結構如下: | 表1 TCON寄存器結構 | TCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 | 位地址 | 8FH | 8EH | 8DH | 8CH | 8BH | 8AH | 89H | 88H | · IE1: · IT1:外部中斷1類型控制位,通過軟體設置或清楚,用於控制外中斷的觸發信號類型。IT1=1,邊沿觸發。IT=0是電平觸發。 · IE0: · IT0: SCON是串列口控制寄存器,位元組地址為98H,SCON的低二位是串列口的發送和接收中斷標誌,其格式如下: | 表2 SCON寄存器結構 | SCON | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | - | - | - | - | - | - | TI | RI | 位地址 | | | | | | | 99H | 98H | · TI:MCS-51串列口的發送中斷標誌,在串列口以方式0發送時,每當發送完8位數據,由硬體置位。如果以方式1、方式2或方式3發送時,在發送停止位的開始時TI被置1,TI=1表示串列發送器正向CPU發出中斷請求,向串列口的數據緩衝器SBUF寫入一個數據后就立即啟動發送器繼續發送。但是CPU響應中斷請求后,轉向執行中斷服務程序時,並不清零TI,TI必須由用戶的中斷服務程序清“0”,即中斷服務程序必須有“CLR TI”或“ANL SCON, #0FDH”等指令來清零TI。 · RI:串列口接收中斷標誌.若串列口接收器允許接收,並以方式0工作,每當接收到8位數據時,RI被置1,若以方式1、2、3方式工作,當接收到半個停止位時,TI被置1,當串列口一方式2或3方式工作,且當SM2=1時,僅當接收到第9位數據RB8為1后,同時還要在接收到半個停止位時,RI被置1。RI為1表示串列口接收器正向CPU申請中斷。同樣RI標誌栩栩如生由用戶的軟體清“0”。 | [4].中斷的控制 對於中斷控制,在上一節中我們已經對TCON和SCON進行了分析,其實它們兩個寄存器也是中斷的控制寄存器,負責對中斷的部分功能進行控制。我們這裡談論的是另外兩個控制寄存器IE和IP。 MCS-51的對中斷的開放和屏蔽是由中斷允許寄存器IE控制來實現的,IE的結構格式如下。 表3 IE寄存器結構 | IE | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | EA | - | - | ES | ET1 | EX1 | ET0 | EX0 | 位地址 | AFH | | | ACH | ABH | AAH | A9H | A8H | 下面我們對IE寄存器的各控制位進行介紹: · EA:中斷總控制位,EA=1,CPU開放中斷。EA=0,CPU禁止所有中斷。 · ES:串列口中斷控制位,ES=1允許串列口中斷,ES=0,屏蔽串列口中斷。 · ET1:定時/計數器T1中斷控制位。ET1=1,允許T1中斷,ET1=0,禁止T1中斷。 · EX1:外中斷1中斷控制位,EX1=1,允許外中斷1中斷,EX1=0,禁止外中斷1中斷。 · ET0:定時/計數器T0中斷控制位。ET1=1,允許T0中斷,ET1=0,禁止T0中斷。 · EX0:外中斷0中斷控制位,EX1=1,允許外中斷0中斷,EX1=0,禁止外中斷0中斷。 MCS-51有兩個中斷優先順序,即高優先順序和低優先順序,每個中斷源都可設置為高或低中斷優先順序。如果有一低優先順序的中斷正在執行,那麼高優先順序的中斷出現中斷請求時,CPU則會響應這個高有限級的中斷,也即高優先順序的中斷可以打斷低優先順序的中斷。而若CPU正在處理一個高優先順序的中斷,此時,就算是有低優先順序的中斷髮出中斷請求,CPU也不會理會這個中斷,而是繼續執行正在執行的中斷服務程序,一直到程序結束,執行最後一條返回指令,返回主程序然後再執行一條指令后才會響應新的中斷請求。 為了實現上述功能,MCS-51的中斷系統有兩個不可定址的優先順序狀態觸發器,一個指出CPU是否在執行高優先順序中斷服務程序,另一個指出CPU是否正在執行低優先順序的中斷服務程序,這兩個中斷觸發器的1狀態分別屏蔽所有中斷申請和同一級別的其他中斷申請,此外,MCS-51還有一個申請優先順序寄存IP,IP的格式如下,位元組地址是B8H。 | 表4 IP中斷控制寄存器結構 | IP | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | - | - | - | PS | PT1 | Px1 | PT0 | PX0 | 位地址 | | | | BCH | BBH | BAH | B9H | B8H | · PS:串列口中斷口優先順序控制位,PS=1,串列口中斷聲明為高優先順序中斷,PS=0,串列口定義為低優先順序中斷。 · PT1:定時器1優先順序控制位。PT1=1,聲明定時器1為高優先順序中斷,PT1=0定義定時器1為低優先順序中斷。 · PX1:外中斷1優先順序控制位。PT1=1,聲明外中斷1為高優先順序中斷,PX1=0定義外中斷1為低優先順序中斷。 · PT0:定時器0優先順序控制位。PT1=1,聲明定時器0為高優先順序中斷,PT1=0定義定時器0為低優先順序中斷。 · PX0:外中斷0優先順序控制位。PT1=1,聲明外中斷0為高優先順序中斷,PX1=0定義外中斷0為低優先順序中斷。 [5].中斷的響應 MCS-51CPU在每一個機器周期順序檢查每一個中斷源,在機器周期的S6按優先順序處理所有被激活的中斷請求,此時,如果CPU沒有正在處理更高或相同優先順序的中斷,或者現在的機器周期不是所執行指令的最後一個機器周期,或者CPU不是正在執行RETI指令或訪問IE和IP的指令(因為按MCS-51中斷系統的特性規疾,在執行完這些指令之後,還要在繼續執行一條指令,才會響應中斷),CPU在下一個機器周期響應激活了的最高級中斷請求。 中斷響應的主要內容就是由硬體自動生成一條長調用LCALL addr16指令,這裡的addr16就是程序存儲器中相應的中斷區入口地址,這些中斷源的服務程序入口地址如下: | 表5 個中斷源的服務程序入口地址 | 中斷源 | 入口地址 | 外中斷0 | 0003H | 定時/計數器0 | 000BH | 外中斷1 | 0013H | 定時/計數器0 | 001BH | 串列口中斷 | 0023H | 生成LCALL指令后,CPU緊跟著便執行之.首先將PC(程序計數器)的內容壓入堆棧保護斷點,然後把中斷入口地址賦予PC,CPU便按新的PC地址(即中斷服務程序入口地址)執行程序。 值得一提的是,各中斷區只有8個單元,一般情況下(除非中斷程序非常簡單),都不可能安裝下一個完整的中斷服務程序。因此,通常是在這些入口地址區放置一條無條件轉移指令,使程序按轉移的實際地址去執行真正的中斷服務程序。 | |