89C51/52的中斷系統(tǒng)有5個中斷源 ,2個優(yōu)先級,可實現(xiàn)二級中斷嵌套 。

1、(P3.2)可由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.2引腳上出現(xiàn)有效的中斷信號時,中斷標志IE0(TCON.1)置1,向CPU申請中斷。
2、(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.3引腳上出現(xiàn)有效的中斷信號時,中斷標志IE1(TCON.3)置1,向CPU申請中斷。
3、TF0(TCON.5),片內(nèi)定時/計數(shù)器T0溢出中斷請求標志。當定時/計數(shù)器T0發(fā)生溢出時,置位TF0,并向CPU申請中斷。
4、TF1(TCON.7),片內(nèi)定時/計數(shù)器T1溢出中斷請求標志。當定時/計數(shù)器T1發(fā)生溢出時,置位TF1,并向CPU申請中斷。
5、RI(SCON.0)或TI(SCON.1),串行口中斷請求標志。當串行口接收完一幀串行數(shù)據(jù)時置位RI或當串行口發(fā)送完一幀串行數(shù)據(jù)時置位TI,向CPU申請中斷。
IE寄存器:
中斷允許控制寄存器分為兩層結(jié)構(gòu),第一級結(jié)構(gòu)為中斷允許總控制EA,只有當EA處于中斷允許狀態(tài),中斷源中斷請求才能夠得到允許;當EA處于不允許狀態(tài)時,無論IE寄存器中其他位處于什么狀態(tài),中斷源中斷請求都不會得到允許。第二級結(jié)構(gòu)為5個中斷允許控制位,分別對應(yīng)5個中斷源的中斷請求,當對應(yīng)中斷允許控制位為1時,中斷源中斷請求得到允許。

EX0:外部中斷0允許位。EX0=1,允許外部中斷0中斷;EX0=0,禁止外部中斷0中斷。當EX0=1( SETB EX0 )時,同時單片機P3.2引腳上出現(xiàn)中斷信號時,單片機中斷主程序的執(zhí)行而“飛”往中斷服務(wù)子程序,執(zhí)行完后通過中斷返回指令RET 動返回主程序。當EX0=0( CLR EX0)時,即使單片機P3.2引腳上出現(xiàn)中斷信程序也不會從主程序“飛” 出去執(zhí)行,因為此時單片機的CPU相當于被“堵上了耳朵”,根本接收不到P3.2引腳上的中斷信號,但是這并不表示這個信號不存在。如果單片機的CPU有空查一下TCON中的IE0位,若為1就說明有中斷信號出現(xiàn)過。
ET0:T0溢出中斷允許位。ET0=1,允許T0中斷;ET0=0,禁止T0中斷。
EX1:外部中斷1允許位。EX1=1,允許外部中斷1中斷;EX1=0,禁止外部中斷1中斷。當EX1=1( SETB EX1)時,并且外部P3.3引腳上出現(xiàn)中斷信號時,單片機CPU會中斷主程序而去執(zhí)行相應(yīng)的中斷服務(wù)子程序;當EX1=0( CLR EX1)時使外部P3.3引腳上即使出現(xiàn)中斷信號,單片機的CPU也不能中斷主程序轉(zhuǎn)而去行中斷服務(wù)子程序。 [3] 因此,可以這樣認為,EX0和EX1是決定CPU能否感覺到外部引腳P3.2P3.3上的中斷信號的控制位。
ET1:T1溢出中斷允許位。ET1=1,允許T1中斷;ET1=0,禁止T1中斷。
ES:串行中斷允許位。ES=1,允許串行口中斷;ES=0,禁止串行口中斷。
EA:中斷總允許位。EA=1,CPU開放中斷;EA=0,CPU禁止所有的中斷請求??傇试SEA好比一個總開關(guān)。EA就相當于每家水管的總閘,如果總閘不開,各個龍頭即使開了也不會有水;反過來,如果總閘開了而各個分閘沒開也不會有水,所當我們想讓P3.2和P3.3引腳上的信號能夠中斷主程序則必須將EA位設(shè)置為0(CLR EA)。
TCON寄存器:

各位的標識如下:
TF1:定時器1溢出標志位。當定時器1計滿溢出時,由硬件使TF1置1,并且申請中斷,進入中斷服務(wù)程序,有硬件自動清0 ,在查詢方式下用軟件清0.
TR1:定時器運行控制位,TR1置1是開啟定時器1,TR1置0時關(guān)閉定時器1.
TF0:定時器0溢出標志位。當定時器0計滿溢出時,由硬件使TF0置1,并且申請中斷,進入中斷服務(wù)程序,有硬件自動清0 ,在查詢方式下用軟件清0.
TR0:定時器運行控制位,TR0置1是開啟定時器0,TR0置0時關(guān)閉定時器0.
IE1:外部中斷1請求標志位。
IT1:外部中斷1觸發(fā)方式選擇位。當IT1置0時,為低電平觸發(fā);當IT1置1時,為下降沿觸發(fā)。
IE0:外部中斷0請求標志位。
IT0:外部中斷0觸發(fā)方式選擇位。當IT0置0時,為低電平觸發(fā);當IT0置1時,為下降沿觸發(fā)。
51單片機外部中斷響應(yīng)條件:
1、中斷源有中斷請求;
2、中斷源的中斷允許位為1(設(shè)置IE寄存器相關(guān)位);
3、CPU開中斷(設(shè)置IE寄存器開中斷,即EA=1)
以外部中斷0為例
主程序中需要有以下代碼:
EA=1;//打開總中斷開關(guān)
EX0=1;//開外部中斷0
IT0=0/1;//設(shè)置外部中斷的觸發(fā)方式
中斷服務(wù)函數(shù):
void int0 () interrupt 0
{
do anything that you want
}
定時器/計數(shù)器
CPU時序的有關(guān)知識:
振蕩周期:為單片機提供定時信號的振蕩源的周期(晶振周期或外加振蕩周期)
狀態(tài)周期:2個振蕩周期為1個狀態(tài)周期,用S表示。
機器周期:1個機器周期含6個狀態(tài)周期,12個振蕩周期。
指令周期:完成1條指令所占用的全部時間,它以機器周期為單位。
定時器的其他知識點:
1、51單片機有兩組定時器/計數(shù)器,因為既可以定時,又可以計數(shù),故稱之為定時器/計數(shù)器。
2、定時器/計數(shù)器和單片機的CPU是相互獨立的。定時器/計數(shù)器工作的過程是自動完成的,不需要CPU的參與。
3、51單片機中的定時器/計數(shù)器是根據(jù)機器內(nèi)部的時鐘或者是外部的脈沖信號對寄存器中的數(shù)據(jù)加1。
4、有了定時器/計數(shù)器之后,可以增加單片機的效率,一些簡單的重復加1的工作可以交給定時器/計數(shù)器處理。CPU轉(zhuǎn)而處理一些復雜的事情。同時可以實現(xiàn)精確定時作用。
與定時器/計數(shù)器有關(guān)的寄存器:
1、TMOD寄存器
2、TCON寄存器
3、IE寄存器
4、THx/TL寄存器
工作方式寄存器TMOD:
工作方式寄存器TMOD用于設(shè)置定時/計數(shù)器的工作方式,低四位用于T0,高四位用于T1。其格式如下:

M1M0:工作方式設(shè)置位。定時/計數(shù)器有四種工作方式。一般我們廳方式1和方式2:

C/T :定時/計數(shù)模式選擇位。C/T =0為定時模式;C/T =1為計數(shù)模式。
GATE:是門控位, GATE=0時,用于控制定時器的啟動是否受外部中斷源信號的影響。只要用軟件使TCON中的TR0或TR1為1,就可以啟動定時/計數(shù)器工作;GATA=1時,要用軟件使TR0或TR1為1,同時外部中斷引腳INT0/1也為高電平時,才能啟動定時/計數(shù)器工作。即此時定時器的啟動條件,加上了INT0/1引腳為高電平這一條件。
控制寄存器TCON:
TCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時/計數(shù)器的啟動和中斷申請。其格式如下:

TF1(TCON.7):T1溢出中斷請求標志位。T1計數(shù)溢出時由硬件自動置TF1為1。CPU響應(yīng)中斷后TF1由硬件自動清0。T1工作時,CPU可隨時查詢TF1的狀態(tài)。所以,TF1可用作查詢測試的標志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。
TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時/計數(shù)器的啟動與停止。
TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。
TR0(TCON.4):T0運行控制位,其功能與TR1類同。
IE中斷開關(guān)寄存器:
用于開啟cpu中斷和對應(yīng)的中斷位。
THx和TL定時/計數(shù)存儲寄存器:
THx存儲高8位數(shù)據(jù),TLx存儲低8位數(shù)據(jù)。
定時器/計算器初值計數(shù)公式:
計數(shù)個數(shù)與計數(shù)初值的關(guān)系為:X=2^n-N
N是需要計數(shù)的值;n與設(shè)置定時器/計數(shù)器的工作方式有關(guān)(可能為8、13、16);X是需要設(shè)置在THx和TLx的初值。
使用定時器/計算器的初始化流程:
1、對TMOD賦值,以確定T0和T1的工作方式。
2、計算初值,并將其寫入TH0、TL0或TH1、TL1。
3、中斷方式選擇,則對EA賦值,開放定時器中斷。
4、使TR0或TR1置位,啟動定時/計數(shù)器定時或計數(shù)。