正文 第五章 Z80中斷係統(二)(3 / 3)

2.中斷方式的響應過程簡介如下:

進入中斷響應周期,在這周期中,向1/0發出和信號。中斷優先級別高的1/0,將一條隱指令的機器碼送上數據總線,在周期的上升沿,將此隱指令讀入口內的指令寄存器,接著5執行這條指令,控製程序跳轉到0頁的8個入口單元之一中去。

保護現場的方法,通常有兩種,一種是所采用的交換指令,另一種是將寄存器壓入堆棧。

在中斷服務程序結尾處,必須恢複現場。若用堆棧方法保護現場的,就應將保護進堆棧的信息彈回原寄存器中。

最後,執行指令,將保存在堆找中的斷點60049彈回,從而返回被中斷了的主程序,繼續往下執行。

采用這種中斷方式,使1/0口的中斷電路最簡單,它不需要向口口提供任何編碼。保護斷點後,自動轉向存儲器0038單元。由此可見它與非屏蔽中斷的響應過程是十分相似的,隻是跳轉的入口地址不同而已(非屏蔽中斷響應的入口地址是0066)。

顯然,采用這種響應方式,若有多個中斷源,必須從0038單元為起始地址的存儲區域內,存放一段軟件排隊程序。用程序查詢的方法,來確定是哪個中斷源申請中斷,以及確定它們的優先權,以便先響應優先權最高的中斷請求。由此可見,這種響應方式不需要硬件排隊電路。

這種方式是功能最強,也是最靈活的一種中斷響應方式。在方式中,當中斷源多於8個就不太方便了(要采用多塊8214級違的辦法)。在方式1中,中斷源多了,詢查的時間就長。而方式2,可以允許多達128個中斷源。而且中斷源的多少對響應時間影響不大。

此外,在方式0和方式1中,中斷服務程序的入口地址是固定的。而方式2的中斷脤務程序入口地址可以列一個地址表,每一個服務程序入口地址占兩個單元,若有128個服務程序,就形成一個256個存儲單元的地址表(以256個存儲串元為一頁,256個中斷服務程序的地址表占一頁)。這個地址表可以放於內存儲器任意一頁內。當中斷響應時,由排隊選中電路提供頁內地址,由口的中斷矢量寄存器提供頁麵地址。找到地址表後,將地址表中的內容裝入寄存器,就間接找到了中斷服務程序入口了。

在申請中斷前,用戶要根據地址表存放的位置,用如下指令組,將地址表的頁麵地址(頁號)裝入寄存器。

在中斷響應周期,當向接口發去和信號時,接口將頁內地址送上數據總線和寄存器內容一起形成地址表地址。

中斷響應方式2是一種矢量中斷,它是由外部接口芯片給出8位的矢量。不同中斷源,是來自不同的接口片,提供不同的矢量。口根據外部接口提供的8位矢量,轉到不同的中斷處理服務程序入口。這點對於多級中斷是極方便的。它配合硬件的中斷優先鏈結構,使響應中斷的速度比軟件排隊快得多。當然,硬件稍為複雜些,它需要有能提供中斷矢量的電路,和能夠根據預先規定的優先權將優先權最高的中斷矢量送出,即需要有中斷控製邏輯。

5.7 中斷處理程序設計舉例

5.7-1 利用 CTC 定時方式實現順序控製

這是一個6秒節拍器的單級中斷實例;以此例說明Z80中斷方式2的處理過秤,假設某生產過程,共有八個電磁閥,要求順序周而複始地切換。每隔6秒鍾切換一個電磁閥,同一時間隻能有一個電磁閥工作。為此,我們利用定時方式。每隔6秒中斷一次。此時,使八累加器內容移一位,再將八累加器的內容輸出給的數據寄存器。

1.模擬實驗線路

實驗時電磁閥用發光二極管代替,用燈亮模擬電磁閥合上,燈滅模擬電磁閥打開。

2.程序的執行和中斷響應過程

如果執行II入指令,等待中斷申請,則進行空操作,在的上升沿去檢測訊號。若是執行處理另外事務的程序段,在每條指令最後一個機器周期的最後一個時鍾狀態上升沿。如果這時有效,則口進入中斷響應周期,從而使,信號有效。與此同時,通過自身硬件電路,使中斷允許觸發器和複位,禁止優先級別比它低的外設再申請中斷。

從數據總線取出中斷矢量和寄存器的內容排在一起,形成中斷地址表指針。把當前的內容壓入堆棧,然後去訪問單元,讀出其內容送的低8位,再訪問單元,將其內容送高8位。此時的內容為,即為中斷服務程序的入口地址。隨即口轉入中斷服務程序。

5.7-2 多級中斷程序設計

這是一個二級中斷的例子,以此例說明Z80多級中斷的程序設計方法,我們使用的通道進行實時鍾的計時工作,故此設定的通道為定時器工作方式,每隔發出一次中斷申請信號,口響應中斷後,轉入中斷服務程序。在中斷服務程序中,以1/100秒、秒、分和時為單位,對實時時鍾進行計數。同時在單板機的七段顯示器上顯示出時、分、秒的數值。將設定為輸出方式,進行順序控製,用中斷方式來傳送數據,每中斷一次,輸出一次數據,使開關接通的次序改變—次。通道的中斷服務程序,是實時時鍾的處理,要求定時準確。發出中斷申請,要求立即響應。由於的通道中斷級別最高,這點要求自然能滿是,10的中斷級別次之。所以,隻有無中斷申請,或不處於中斷服務情況下,才能發出中斷請求。兩者同時申請,先響應的中斷請求。在中斷服務,如果定時到,發出中斷請求,則將中斷掛起,轉去為服務,即在中斷程序裏又再次被中斷。

Z80用設置在讀寫存儲器的堆棧來保護斷點和保護現場。和都有優先中斷鏈的結構,所以,實現多級中斷很方便。由於Z80有多級中斷的能力,所以可以分時為多個外設服務。

控製數據傳送靠聯絡線。在主程序初始化時,使輸出第一次數據,接通0號開關,同時使順序控製的定時由多諧振蕩器控製。多諧振蕩器輸出和分別加到與非門的輸入端,與非門的輸出端。因此,與非門打開,多諧振蕩器的可以通過此門。