請(qǐng)?jiān)O(shè)想一個(gè)場(chǎng)景:你正在公司碼字铭乾,上司說(shuō)開(kāi)會(huì)剪廉。你有兩個(gè)選擇,一是繼續(xù)碼字炕檩,二是去會(huì)議室開(kāi)會(huì)斗蒋。大腦大概率會(huì)停下手頭工作,轉(zhuǎn)去開(kāi)會(huì)。這就是一個(gè)簡(jiǎn)單的中斷泉沾。假設(shè)沒(méi)有中斷系統(tǒng)捞蚂,你會(huì)繼續(xù)碼字,結(jié)局會(huì)不太好看跷究。這個(gè)世界缺少中斷系統(tǒng)姓迅,會(huì)變得不堪設(shè)想,人們只會(huì)把一件事做完做完才去做別的事俊马。如果某人正在吃飯队贱,廚房爐里的水沸騰,沒(méi)有中斷潭袱,這就可能釀成大禍柱嫌。這只是中斷的一個(gè)小場(chǎng)景。中斷系統(tǒng)的重要性大家已經(jīng)知道了屯换。單片機(jī)是一個(gè)微型處理器编丘,也具有中斷系統(tǒng),下面來(lái)介紹89c52的中斷系統(tǒng)彤悔。
定義
cpu在處理某一件事a時(shí)嘉抓,發(fā)生了另一件事b,請(qǐng)求cpu迅速去處理(中斷發(fā)生)晕窑;cpu暫時(shí)停止當(dāng)前的工作(中斷響應(yīng))抑片,轉(zhuǎn)去處理事件b(中斷服務(wù));待cpu將事件b處理完畢后杨赤,再回到原來(lái)事件a被中斷的地方繼續(xù)處理事件a(中斷返回)敞斋。流程圖如下中斷嵌套
當(dāng)CPU響應(yīng)某一中斷時(shí),若有優(yōu)先權(quán)高的中斷源發(fā)出中斷請(qǐng)求疾牲,則CPU能中斷正在進(jìn)行的中斷服務(wù)程序植捎,并保留這個(gè)程序的斷點(diǎn)(類似于子程序嵌套),響應(yīng)高級(jí)中斷阳柔,高級(jí)中斷處理結(jié)束以后焰枢,再繼續(xù)進(jìn)行被中斷的中斷服務(wù)程序,這個(gè)過(guò)程稱為中斷嵌套舌剂。如果發(fā)出新的中斷請(qǐng)求的中斷源的優(yōu)先權(quán)級(jí)別與正在處理的中斷源同級(jí)或更低時(shí)济锄,CPU不會(huì)響應(yīng)這個(gè)中斷請(qǐng)求,直至正在處理的中斷服務(wù)程序執(zhí)行完以后才能去處理新的中斷請(qǐng)求霍转。流程圖如下結(jié)構(gòu)
看完中斷的知識(shí)點(diǎn)后荐绝,來(lái)了解一下中斷的內(nèi)部結(jié)構(gòu)
中斷系統(tǒng)有四個(gè)特殊功能寄存器
- 定時(shí)器控制寄存器TCON
- 串行口控制寄存器SCON
- 中斷允許寄存器IE
- 中斷優(yōu)先級(jí)寄存器IP
下面來(lái)各個(gè)擊破
定時(shí)器控制寄存器
定時(shí)器控制寄存器TCON在特殊功能寄存器中,字節(jié)地址為88H谴忧,位地址
TF1:定時(shí)器 1 溢出標(biāo)志均驶。當(dāng)定時(shí)器/計(jì)數(shù)器 1 溢出時(shí)昏兆,由 硬件置位;當(dāng)主機(jī)響應(yīng)中斷妇穴,轉(zhuǎn)向中斷服務(wù)程序時(shí)爬虱,由硬件清零。
TR1:定時(shí)器 1 運(yùn)行控制位腾它, 由軟件置位/ 復(fù)位來(lái)開(kāi)啟或關(guān)閉定時(shí)器/計(jì)數(shù)器 1跑筝。
TF0:定時(shí)器 0 溢出標(biāo)志。當(dāng)定時(shí)器/計(jì)數(shù)器 0 溢出時(shí)瞒滴,由 硬件置位曲梗;當(dāng)主機(jī)響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序時(shí)妓忍,由硬件清零虏两。
TR0:定時(shí)器 0 運(yùn)行控制位,由 軟件置位/ 復(fù)位來(lái)開(kāi)啟或關(guān)閉定時(shí)器/計(jì)數(shù)器 0世剖。
IE1:外部中斷 1 跳變中斷請(qǐng)求標(biāo)志定罢,當(dāng)檢測(cè)到 INT1 發(fā)生 1 到 0 的跳變時(shí),由硬件置位硬件置位旁瘫;當(dāng)主機(jī)響應(yīng)中斷祖凫, 轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件清零酬凳。
IT1:外部中斷 1 觸發(fā)方式控制位蝙场,由 軟件置位或清零來(lái)選擇外部中斷 1 的跳變/電平觸發(fā)中斷請(qǐng)求。IT1=0 時(shí)粱年,外部中斷 1 為電平觸發(fā)方式售滤,當(dāng) INT1 輸入低電平時(shí),置位 IE1台诗。采用電平觸發(fā)方式時(shí)完箩,外部中斷源必須保持低電平有效,直到該中斷被 CPU 響應(yīng)拉队,同時(shí)在該中斷服務(wù)程序執(zhí)行完之前弊知,外部中斷源必須被清除,否則將產(chǎn)生另一次中斷粱快。IT1=1 時(shí)秩彤,外部中斷 1 為邊沿觸發(fā)方式叔扼,在對(duì) INT1 的相鄰兩次采樣中,如果一個(gè)周期中為高電平漫雷,接下來(lái)的周期為低電平瓜富,則置位 IE1,表示外部中斷 1 正在向 CPU 申請(qǐng)中斷降盹。直到該中斷被CPU 響應(yīng)時(shí)与柑,才被 硬件清零。
IE0:外部中斷 0 跳變中斷請(qǐng)求標(biāo)志蓄坏,當(dāng)檢測(cè)到 INT1 發(fā)生 1 到 0 的跳變時(shí)价捧,由硬件置位硬件置位;當(dāng)主機(jī)響應(yīng)中斷涡戳, 轉(zhuǎn)向中斷服務(wù)程序時(shí)结蟋,由硬件清零。
IT0:外部中斷 0 觸發(fā)方式控制位渔彰,應(yīng)用同 IT1椎眯。
串行口控制寄存器 SCON
串行口控制寄存器 SCON在特殊功能寄存器中,字節(jié)地址為98H胳岂,可位尋址编整。單片機(jī)復(fù)位時(shí),SCON全部被清零乳丰,各位定義如下掌测。SM0:串行口工作方式控制位。
SM1:串行口工作方式控制位产园,和 SM0 一起來(lái)選擇工作方式汞斧。
SM2:多機(jī)通信控制位。
REN:允許串行接收控制位什燕。由軟件來(lái)設(shè)置粘勒,置 1 時(shí)允許接收,清零時(shí)禁止接收屎即。
TB8:串行發(fā)送數(shù)據(jù)的第 9 位庙睡,由設(shè)置 0 或者 1。
RB8:串行接收數(shù)據(jù)的第 9 位技俐。
TI:發(fā)送中斷標(biāo)志位乘陪,由片內(nèi)硬件在方式 0 串行發(fā)送第 8 位結(jié)束時(shí)置位,或在其它方式串行發(fā)送停止位的開(kāi)始時(shí)置位雕擂。 在中斷服務(wù)程序中要清零才能發(fā)送下一次數(shù)據(jù)啡邑。
RI:接收中斷標(biāo)志位,由片內(nèi)硬件在方式 0 串行接收到第 8 位結(jié)束時(shí)置位井赌,或在其它方式串行接收到停止位的中間時(shí)置位谤逼。 在中斷服務(wù)程序中要清零才能接收下一次數(shù)據(jù)贵扰。
中斷允許寄存器IE
中斷允許寄存器IE用來(lái)設(shè)定各中斷源的打開(kāi)和關(guān)閉。IE在特殊功能寄存器中流部,字節(jié)地址為A8H.IE寄存器可位尋址戚绕。單片機(jī)復(fù)位時(shí),寄存器全部被清零贵涵,各位定義如下。
EA:CPU 的中斷開(kāi)放標(biāo)志恰画,EA=1宾茂,開(kāi)放所有中斷;EA=0拴还,屏蔽所有的中斷跨晴。
ET2:定時(shí)器/計(jì)數(shù)器 T2 溢出中斷允許位,ET2=1片林,允許 T2 中斷端盆;ET2=0,禁止T2中斷费封。在 C51 焕妙、S51 和 和 C2051 中沒(méi)有 T2 ,所以 C51 弓摘、S51 和 和 C2051 中的 IE 寄存器 ET2 位無(wú)定義焚鹊。
ES:串行口中斷允許位。ES=1韧献,允許串行口中斷末患;ES=0,禁止串行口中斷锤窑。
ET1:定時(shí)器/計(jì)數(shù)器 T1 溢出中斷允許位璧针,ET1=1,允許 T1 中斷渊啰;ET1=0探橱,禁止 T1中斷。
EX1:外部中斷 1 中斷允許位绘证。EX1=1走搁,允許外部中斷 1 中斷;EX1=0迈窟,禁止外部中斷 私植。
ET0:定時(shí)器/計(jì)數(shù)器 T0 溢出中斷允許位,ET0=1车酣,允許 T0 中斷曲稼;ET0=0索绪,禁止 T0中斷。
EX0:外部中斷 0 中斷允許位贫悄。EX0=1瑞驱,允許外部中斷 0 中斷;EX0=0窄坦,禁止外部中斷 0 中斷唤反。
中斷優(yōu)先級(jí)寄存器IP
中斷優(yōu)先級(jí)寄存器IP字節(jié)地址為B8H,用來(lái)設(shè)定各中斷源屬于兩級(jí)中斷的哪一級(jí)鸭津。中斷優(yōu)先級(jí)寄存器IP可位尋址彤侍。單片機(jī)復(fù)位時(shí)中斷優(yōu)先級(jí)寄存器IP全部清零。IP 中的某位如果為 1逆趋,則該位所對(duì)應(yīng)的中斷定義為高優(yōu)先級(jí)中斷盏阶;反之,IP 中的某位如果為 0闻书,則該位所對(duì)應(yīng)的中斷定義為低優(yōu)先級(jí)中斷(PT2名斟、PS、PT1、PX1、PT0配深、PX0 分別對(duì)應(yīng)定時(shí)器 T2 中斷硫嘶、串行口中斷、定時(shí)器 T1 中斷、外部中斷 1、定時(shí)器 T0 中斷、外部中斷 0)蒋腮。 其中 PT2 位在 C51 、S51 和 和 C2051 中無(wú)定義藕各。中斷優(yōu)先級(jí)如下池摧。
這里解釋一下中斷優(yōu)先級(jí),及同一時(shí)刻發(fā)生兩個(gè)中斷激况,那么先執(zhí)行哪個(gè)中斷作彤?,取決于中斷源優(yōu)先級(jí)乌逐。
這些寄存器位置與功能并不需要強(qiáng)記竭讳,這些在數(shù)據(jù)手冊(cè)都會(huì)有說(shuō)明,只要會(huì)用就行浙踢。
內(nèi)部結(jié)構(gòu)
看完寄存器绢慢,再來(lái)了解中斷系統(tǒng)內(nèi)部結(jié)構(gòu)。內(nèi)部結(jié)構(gòu)如圖所示洛波。看到電路圖不用害怕胰舆,慢慢看下去就會(huì)覺(jué)得不難骚露。首先明白數(shù)據(jù)為1時(shí),開(kāi)關(guān)閉合缚窿,為0時(shí)棘幸,開(kāi)關(guān)斷開(kāi)。以T1定時(shí)器為中斷源來(lái)看一篇電路圖倦零。
1.打開(kāi)總中斷(EA)误续,全局中斷允許位置1
2.打開(kāi)定時(shí)器中斷,定時(shí)器中斷允許位置1
3.T1定時(shí)器數(shù)據(jù)溢出扫茅,引起TF1置1蹋嵌,申請(qǐng)中斷。
4.如果有兩個(gè)中斷同時(shí)產(chǎn)生诞帐,判斷中斷優(yōu)先級(jí)欣尼,選擇發(fā)生哪個(gè)中斷請(qǐng)求
5.中斷請(qǐng)求
總結(jié)
單片機(jī)中斷系統(tǒng)已經(jīng)介紹完畢爆雹,相信大家或多或少都有理解一些內(nèi)容停蕉。只要認(rèn)真看完,這些都不是難事钙态。僅僅一個(gè)中斷系統(tǒng)是完成不了什么的慧起,它還需要其他如計(jì)數(shù)器,串口等等才能完成功能册倒。