1.微機的輸入輸出方式
CPU與外設交換資訊方式有以下幾種:
(1).程式控制方式 (2).中斷方式 (3).直接存儲器存取DMA方式
(1)程式控制方式又分為:無條件傳送、條件傳送
無條件傳送主要針對簡單外設進行簡單操作。優點是程式不必檢查外設的狀态,就可以進行輸入輸出。缺點是CPU與外設工作不同步時,傳輸資料不可靠,僅适用于慢速裝置。
條件傳送是CPU在傳送資料之前,先執行一條輸入指令,讀取外設狀态口中的内容,了解外設目前狀态,判斷其是否準備好資料傳輸。如果準備好,就傳輸資料,如果沒有,繼續查詢等待,直到準備好為止。優點是通用性好。缺點是降低CPU效率。
程式控制方式缺點:1主機和外設隻能串行工作2各個外設隻能進行串行的工作,主機在一段時間内隻能和一台外設交換資料。
(2)引入中斷目的:為了使CPU和外設同時并行工作,提高系統效率,特備是發揮CPU高速運算能力,引入中斷概念。
中斷傳送方式:可以實作外設和CPU并行工作,大大提高CPU使用率。缺點:外設的啟動、控制仍需要由CPU完成,這些操作和資料傳送沒有直接的關系,花費了CPU的不少時間,造成資料傳輸率的降低。為此又提出了外設和存儲器之間直接傳送資料的方式,即所謂的DMA。
(3)DMA:适用于在存儲器和外設之間進行大規模資料傳送的方式。傳送過程不需要CPU的參與。當進行DMA傳送時,CPU隻需要對DMAC進行初始化後,讓出總線。外設和存儲器之間的傳送過程由DMAC進行控制,直到傳送結束為止。
2.中斷概念
當CPU正在處理某件事情的時候,外部或者内部發生的某一事件請求CPU迅速去處理,于是CPU暫時中斷目前工作,轉去處理所發生的事件,處理完該事件後,再傳回到原來被中斷的地方繼續原來的工作,這樣的過程稱為中斷。
引起CPU中斷的内部或外部事件就是中斷源。中斷源向CPU發起的處理請求叫中斷請求或中斷申請。CPU暫時中止正在處理的事情,轉去處理突發事件的過程,稱為CPU的中斷響應過程。實作中斷功能的部件稱為中斷系統。CPU響應中斷後,進行中斷事件的程式稱中斷服務程式。在CPU暫時中止執行的程式,轉去執行中斷服務程式前的PC值即為斷點位址。CPU執行完中斷服務程式後回到斷點的過程稱為中斷傳回。
引入中斷後,主要功能有:
1) CPU與外設同步工作
2) 實時處理
3) 故障處理
3.MCS-51中斷結構
(1) 結構框圖

(2) MCS-51的中斷源
6個中斷源:“INT0’(Pin3.2)”、“INT1’(Pin3.3)”、片内定時器/計數器“0”、“1”、“2”的溢出中斷請求、“片内串行口發送/接收的中斷請求”。
(3) 寄存器
①定時器0/1+外部中斷控制寄存器TCON:控制定時器T0/T1的寄存器
功能:控制其啟動/停止,鎖存T0/T1溢出中斷标志和兩個外部中斷源的中斷标志。
IT0/IT1(中斷觸發方式控制位) =0時外部中斷為低電平觸發方式;IT0/IT1 =1時外部中斷為下降沿觸發方式。
IE0/IE1(中斷請求标志位):觸發時相應的變為高電平;IE0/IE1:非觸發時為低電平。
TF0/TF1(定時器/計數器0/1溢出标志位):定時器/計數器計滿時,由硬體使它置位,如中斷允許則觸發中斷,之後由内部硬體電路自動清零。
TR0/TR1(定時器/計數器0/1啟動控制位):功能如名。
②串行口控制寄存器SCON:
TI(串行口發送中斷标志位):TI=1,通知CPU傳送結束。
RI(串行口接收中斷标志位):RI=1,通知CPU取資料。
無論哪個标志位置“1”,都請求串行口中斷。串行口中斷響應後,不能由硬體自動清零,必須由軟體對TI或RI清零。
③中斷允許寄存器IE:
EA(中斷總允許位):=1時開放中斷,=0時屏蔽所有中斷。
ET0/ET1/ET2(定時器/計數器0/1/2的溢出中斷允許位):=1時相應計數器/定時器允許中斷,=0時禁止中斷。
EX0/EX1(外部中斷INT0/INT1中斷允許位):=1時禁止中斷,=0時相應允許中斷。
ES(序列槽中斷允許位):=1時允許串行口中斷,=0時禁止中斷。
④中斷優先級控制寄存器IP:每個中斷源由兩級優先級控制:高與低。
一般寄存器相應位=0時優先級為低,反之=1時為高。
同級别優先級也有預設優先順序,由高到低依次為:外部中斷0、定時器/計數器0中斷、外部中斷1、定時器/計數器1中斷、串行口中斷、定時器/計數器2中斷。
控制原則:
a. 正在進行的中斷過程不能被新的同級或低優先級中斷請求所中斷,一直到該中斷服務程式結束,傳回主程式且執行了主程式中的一條指令後,CPU才響應新的中斷請求。
b. 低優先級中斷請求不能打斷高優先級别的中斷服務;反之,則可以,進而實作兩級中斷嵌套。
c. CPU同時接收到幾個中斷請求時,首先響應優先級别最高的中斷請求。如果是同級中斷,則按照預設優先順序确定哪個中斷請求被響應。
4.中斷響應及處理過程
中斷處理過程一般分為三個階段:中斷響應、中斷處理、中斷傳回。
函數與中斷函數有着本質的差別:
● 函數的通路是在主程式中設定好的,中斷是随機的
● 函數和中斷程式都是以函數形式存在,中斷的調用看不到調用語句,是自動調用的,彙編中函數調用是用LCALL指令
● 中斷程式是在允許中斷情況下,是在設定中斷允許語句後随機調用的
● 中斷是可以屏蔽的,函數一旦調用就要被執行
● 彙編語言中,中斷服務程式系統配置設定固有的入口位址
● 彙編指令中,函數的傳回是RET指令,而中斷服務的傳回是RETI指令,兩者都能正确的傳回原程式的斷點處繼續往下執行,但兩者的職能略有不同
中斷響應的條件:
● 中斷源由中斷請求
● 中斷總允許位EA=1
● 發出中斷請求的中斷源的中斷允許控制位為1
(這三條,是必要條件。在此基礎上,如果有下列任意一種情況存在,中斷響應都會受到阻斷):
● CPU正在執行一個同級别或者高優先級的中斷服務程式
● 正在執行的指令尚未執行完
● 正在執行中斷傳回指令RETI或者對寄存器IE、IP進行讀/寫指令,CPU在執行完上述指令後,要再執行一條指令,才能響應中斷請求
注意:除定時器/計數器2以及串行口RI/TI的請求标志位外,其餘中斷請求标志位在調用中斷服務子程式後,會被硬體自動的複位。而定時器/計數器2以及串行口RI/TI需要在中斷服務子程式中安排清除标志位指令,否則會産生二次中斷情況。
中斷響應時間一般在3~8個機器周期,對于實時性要求高的系統,該誤差要加以考慮。
C語言中斷服務程式結構:
Voidint0_int(void) interrupt n //n為中斷号
{
put your codes
}
中斷服務程式初始化步驟:
主程式中:
a. 根據需要确定各中斷源的優先級别;
b. 根據需要确定外部中斷的觸發方式,設定定時器控制寄存器TCON中相應的IT0/IT1;
c. 設定總中斷控制位EA=1,設定中斷源所對應的終端允許控制位。
中斷服務程式中:
a. 進行中斷請求;
b. 注意安排定時器/計數器2以及串行口RI/TI清除标志位指令。