請設想一個場景:你正在公司碼字,上司說開會。你有兩個選擇,一是繼續碼字,二是去會議室開會。大腦大概率會停下手頭工作,轉去開會。這就是一個簡單的中斷。假設沒有中斷系統,你會繼續碼字,結局會不太好看。這個世界缺少中斷系統,會變得不堪設想,人們只會把一件事做完做完才去做別的事。如果某人正在吃飯,廚房爐里的水沸騰,沒有中斷,這就可能釀成大禍。這只是中斷的一個小場景。中斷系統的重要性大家已經知道了。單片機是一個微型處理器,也具有中斷系統,下面來介紹89c52的中斷系統。
定義
cpu在處理某一件事a時,發生了另一件事b,請求cpu迅速去處理(中斷發生);cpu暫時停止當前的工作(中斷響應),轉去處理事件b(中斷服務);待cpu將事件b處理完畢后,再回到原來事件a被中斷的地方繼續處理事件a(中斷返回)。流程圖如下
單片機中斷流程
中斷嵌套
當CPU響應某一中斷時,若有優先權高的中斷源發出中斷請求,則CPU能中斷正在進行的中斷服務程序,并保留這個程序的斷點(類似于子程序嵌套),響應高級中斷,高級中斷處理結束以后,再繼續進行被中斷的中斷服務程序,這個過程稱為中斷嵌套。如果發出新的中斷請求的中斷源的優先權級別與正在處理的中斷源同級或更低時,CPU不會響應這個中斷請求,直至正在處理的中斷服務程序執行完以后才能去處理新的中斷請求。流程圖如下
中斷嵌套流程圖
結構
看完中斷的知識點后,來了解一下中斷的內部結構
中斷系統有四個特殊功能寄存器
定時器控制寄存器TCON
串行口控制寄存器SCON
中斷允許寄存器IE
中斷優先級寄存器IP
下面來各個擊破
定時器控制寄存器
定時器控制寄存器TCON在特殊功能寄存器中,字節地址為88H,位地址
為88H~8FH(低至高),可進行位尋址(對為地址中的內容進行微操作的尋址方式稱為位尋址)。單片機復位時,TCON全部被清零,其各位定義如下圖。
定時器控制寄存器
TF1:定時器 1 溢出標志。當定時器/計數器 1 溢出時,由 硬件置位;當主機響應中斷,轉向中斷服務程序時,由硬件清零。
TR1:定時器 1 運行控制位, 由軟件置位/ 復位來開啟或關閉定時器/計數器 1。
TF0:定時器 0 溢出標志。當定時器/計數器 0 溢出時,由 硬件置位;當主機響應中斷,轉向中斷服務程序時,由硬件清零。
TR0:定時器 0 運行控制位,由 軟件置位/ 復位來開啟或關閉定時器/計數器 0。
IE1:外部中斷 1 跳變中斷請求標志,當檢測到 INT1 發生 1 到 0 的跳變時,由硬件置位硬件置位;當主機響應中斷, 轉向中斷服務程序時,由硬件清零。
IT1:外部中斷 1 觸發方式控制位,由 軟件置位或清零來選擇外部中斷 1 的跳變/電平觸發中斷請求。IT1=0 時,外部中斷 1 為電平觸發方式,當 INT1 輸入低電平時,置位 IE1。采用電平觸發方式時,外部中斷源必須保持低電平有效,直到該中斷被 CPU 響應,同時在該中斷服務程序執行完之前,外部中斷源必須被清除,否則將產生另一次中斷。IT1=1 時,外部中斷 1 為邊沿觸發方式,在對 INT1 的相鄰兩次采樣中,如果一個周期中為高電平,接下來的周期為低電平,則置位 IE1,表示外部中斷 1 正在向 CPU 申請中斷。直到該中斷被CPU 響應時,才被 硬件清零。
IE0:外部中斷 0 跳變中斷請求標志,當檢測到 INT1 發生 1 到 0 的跳變時,由硬件置位硬件置位;當主機響應中斷, 轉向中斷服務程序時,由硬件清零。
IT0:外部中斷 0 觸發方式控制位,應用同 IT1。
串行口控制寄存器 SCON
串行口控制寄存器 SCON在特殊功能寄存器中,字節地址為98H,可位尋址。單片機復位時,SCON全部被清零,各位定義如下。
串行口控制寄存器 SCON
SM0:串行口工作方式控制位。
SM1:串行口工作方式控制位,和 SM0 一起來選擇工作方式。
SM2:多機通信控制位。
REN:允許串行接收控制位。由軟件來設置,置 1 時允許接收,清零時禁止接收。
TB8:串行發送數據的第 9 位,由設置 0 或者 1。
RB8:串行接收數據的第 9 位。
TI:發送中斷標志位,由片內硬件在方式 0 串行發送第 8 位結束時置位,或在其它方式串行發送停止位的開始時置位。 在中斷服務程序中要清零才能發送下一次數據。
RI:接收中斷標志位,由片內硬件在方式 0 串行接收到第 8 位結束時置位,或在其它方式串行接收到停止位的中間時置位。 在中斷服務程序中要清零才能接收下一次數據。
中斷允許寄存器IE
中斷允許寄存器IE用來設定各中斷源的打開和關閉。IE在特殊功能寄存器中,字節地址為A8H.IE寄存器可位尋址。單片機復位時,寄存器全部被清零,各位定義如下。
中斷允許寄存器IE
EA:CPU 的中斷開放標志,EA=1,開放所有中斷;EA=0,屏蔽所有的中斷。
ET2:定時器/計數器 T2 溢出中斷允許位,ET2=1,允許 T2 中斷;ET2=0,禁止T2中斷。在 C51 、S51 和 和 C2051 中沒有 T2 ,所以 C51 、S51 和 和 C2051 中的 IE 寄存器 ET2 位無定義。
ES:串行口中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。
ET1:定時器/計數器 T1 溢出中斷允許位,ET1=1,允許 T1 中斷;ET1=0,禁止 T1中斷。
EX1:外部中斷 1 中斷允許位。EX1=1,允許外部中斷 1 中斷;EX1=0,禁止外部中斷 。
ET0:定時器/計數器 T0 溢出中斷允許位,ET0=1,允許 T0 中斷;ET0=0,禁止 T0中斷。
EX0:外部中斷 0 中斷允許位。EX0=1,允許外部中斷 0 中斷;EX0=0,禁止外部中斷 0 中斷。
中斷優先級寄存器IP
中斷優先級寄存器IP字節地址為B8H,用來設定各中斷源屬于兩級中斷的哪一級。中斷優先級寄存器IP可位尋址。單片機復位時中斷優先級寄存器IP全部清零。
中斷優先級寄存器IP
IP 中的某位如果為 1,則該位所對應的中斷定義為高優先級中斷;反之,IP 中的某位如果為 0,則該位所對應的中斷定義為低優先級中斷(PT2、PS、PT1、PX1、PT0、PX0 分別對應定時器 T2 中斷、串行口中斷、定時器 T1 中斷、外部中斷 1、定時器 T0 中斷、外部中斷 0)。 其中 PT2 位在 C51 、S51 和 和 C2051 中無定義。中斷優先級如下。
中斷優先級
這里解釋一下中斷優先級,及同一時刻發生兩個中斷,那么先執行哪個中斷?,取決于中斷源優先級。
這些寄存器位置與功能并不需要強記,這些在數據手冊都會有說明,只要會用就行。
內部結構
看完寄存器,再來了解中斷系統內部結構。內部結構如圖所示。
內部結構
看到電路圖不用害怕,慢慢看下去就會覺得不難。首先明白數據為1時,開關閉合,為0時,開關斷開。以T1定時器為中斷源來看一篇電路圖。
1.打開總中斷(EA),全局中斷允許位置1
2.打開定時器中斷,定時器中斷允許位置1
3.T1定時器數據溢出,引起TF1置1,申請中斷。
4.如果有兩個中斷同時產生,判斷中斷優先級,選擇發生哪個中斷請求
5.中斷請求
總結
單片機中斷系統已經介紹完畢,相信大家或多或少都有理解一些內容。只要認真看完,這些都不是難事。僅僅一個中斷系統是完成不了什么的,它還需要其他如計數器,串口等等才能完成功能。
評論
查看更多