版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3.2 中斷的概念和應(yīng)用任務(wù)3.4 中斷的概念和應(yīng)用3.4.1 任務(wù)介紹中斷和定時(shí)器是單片機(jī)中最重要的資源之一,中斷功能的存在很大程度上提高了單片機(jī)處理外部或者內(nèi)部事件的能力。什么是中斷,我們從一個(gè)生活中的例程引入。你正在家中看書(shū),突然電話(huà)鈴響了,你放下書(shū)本,去接電話(huà),和來(lái)電話(huà)的人交談,然后放下電話(huà),回來(lái)繼續(xù)看你的書(shū)。這就是生活中的“中斷”的現(xiàn)象,就是正常的工作過(guò)程被突如其來(lái)的事件打斷了。本節(jié)的任務(wù)是:?jiǎn)纹瑱C(jī)外接兩個(gè)兩個(gè)發(fā)光二極管和一個(gè)按鍵,其中一個(gè)發(fā)光二極管以0.5Hz的頻率閃爍,另外一個(gè)發(fā)光二極管,按鍵每按下一次改變一下?tīng)顟B(tài),按鍵用采用外部中斷的方式。3.4.2知識(shí)準(zhǔn)備1、中斷的基本概念(
2、1)單片機(jī)中為什么需要中斷我們先根據(jù)之前學(xué)過(guò)的知識(shí)試著編寫(xiě)一下任務(wù)要求的程序,程序如下:/.省略了程序開(kāi)頭部分while(1) LED1=1; /LED1滅DelayMs(1000); /延時(shí)1000msLED1=0; /LED1亮DelayMs(1000); /延時(shí)1000msif(KeyInput=0) /檢測(cè)按鍵是否按下 DelayMs(10); /10ms延時(shí)消抖 if(KeyInput=0) /再次判斷按鍵是否按下 LED2=!LED2; /按鍵按下,LED2狀態(tài)取反 while(!KeyInput); /等待按鍵彈起 燒錄到單片機(jī)后,我們發(fā)現(xiàn)程序運(yùn)行的效果并非和我們想象中的一樣,如
3、果按鍵不按下,LED1閃爍正常,按鍵按下,LED1不再閃爍,直到按鍵彈起。LED2也并非是每次按鍵按下都改變狀態(tài),按鍵有的時(shí)候沒(méi)有檢測(cè)到。我們先來(lái)分析一下按鍵為什么沒(méi)有檢測(cè)到的原因。主程序中有兩個(gè)任務(wù),任務(wù)1:LED1以2Hz頻率閃爍,任務(wù)2:按鍵按下LED2狀態(tài)取反。這兩個(gè)任務(wù)在大循環(huán)中順序運(yùn)行,即任務(wù)1執(zhí)行完后,才能執(zhí)行任務(wù)2。LED1閃爍一次需要2000ms(亮1000ms+滅1000ms),按鍵按下到彈起來(lái)大約需要200ms-500ms左右。如果程序剛開(kāi)始執(zhí)行任務(wù)1,這個(gè)時(shí)候按鍵也按下了,那么按鍵所對(duì)應(yīng)的任務(wù)2必須等待任務(wù)1執(zhí)行完了,才能執(zhí)行。任務(wù)1執(zhí)行完了,2000ms過(guò)后,再掃描按
4、鍵,按鍵早就釋放了,本次按鍵無(wú)效。我們的生活中也會(huì)遇到這樣的問(wèn)題,以接電話(huà)為例。你正在看著書(shū),如果沒(méi)有別的事情會(huì)一直看下去,這個(gè)時(shí)候電話(huà)響了,如果我們按照程序的思路,任務(wù)1執(zhí)行完了,才能執(zhí)行任務(wù)2,那么我們只有把書(shū)看完了,才能去接電話(huà),這顯然是不合理的。我們把所有需要處理的事件都放到大循環(huán)while(1)中去一個(gè)個(gè)的執(zhí)行的方式是行不通的,一些緊急的事件必須立即處理,不能等待。中斷就具有處理緊急事件的能力。(2)中斷的響應(yīng)過(guò)程正在看書(shū),這是電話(huà)鈴響了,在接電話(huà)之前,我們要把正在看的那一頁(yè)書(shū)做個(gè)標(biāo)記,接完電話(huà)后后我們按照之前的標(biāo)記繼續(xù)看書(shū)。單片機(jī)響應(yīng)中斷的過(guò)程和看書(shū)接電話(huà)的過(guò)程類(lèi)似。中斷事件產(chǎn)生后
5、,首先要保存當(dāng)前執(zhí)行程序的地址,然后再去執(zhí)行中斷函數(shù),中斷函數(shù)執(zhí)行完后,再?gòu)谋4娴牡刂诽庨_(kāi)始執(zhí)行程序。(3)中斷的種類(lèi)傳統(tǒng)的8051單片機(jī)一共有5個(gè)中斷源(DIP封裝的STC89C52有6個(gè)中斷),它們的符號(hào)、名稱(chēng)和產(chǎn)生的條件分別解釋如下:INT0:外部中斷0,由P32端口引入,低電平或下降沿引起。:INT1:外部中斷1,由P33端口引入,低電平或下降沿引起。:T0:定時(shí)/計(jì)數(shù)器0中斷,由定時(shí)/計(jì)數(shù)器0溢出引起。:T1:定時(shí)/計(jì)數(shù)器1中斷,由定時(shí)/計(jì)數(shù)器1溢出引起。:TI/RI:串行口中斷,由串行口發(fā)送或者接受一幀數(shù)據(jù)引起。本節(jié)當(dāng)中我們只關(guān)注兩個(gè)外部中斷,定時(shí)器和串口的中斷在后面的章節(jié)會(huì)詳細(xì)介
6、紹。(4)中斷優(yōu)先級(jí)和嵌套在某些時(shí)刻,2個(gè)或者更多個(gè)中斷同時(shí)到來(lái),單片機(jī)應(yīng)該響應(yīng)哪一個(gè)中斷呢?設(shè)想一下,你正在看書(shū),電話(huà)鈴響了,同時(shí)又有人按了門(mén)鈴,你該先做那樣呢?如果你正在等一個(gè)很重要的電話(huà),你一般不會(huì)去理會(huì)門(mén)鈴的,而反之,你正在等一個(gè)重要的客人,則可能就不會(huì)去理電話(huà)了??傊@里存在一個(gè)優(yōu)先級(jí)的問(wèn)題,單片機(jī)的5個(gè)中斷也有優(yōu)先級(jí),即兩個(gè)以上的中斷同時(shí)觸發(fā),CPU先響應(yīng)哪一個(gè)。另外還可能存在這樣一種情況,你正在看書(shū),電話(huà)鈴響了,去接電話(huà),在接電話(huà)的過(guò)程當(dāng)中,這時(shí)又有人按門(mén)鈴,我們的做法是先暫停通話(huà),打開(kāi)門(mén),然后再接聽(tīng)電話(huà),接聽(tīng)電話(huà)完后再繼續(xù)看書(shū)。一個(gè)正在執(zhí)行的中斷任務(wù)被另外一個(gè)級(jí)別更高的中斷任務(wù)
7、打斷,稱(chēng)之為中斷的嵌套。51單片機(jī)的優(yōu)先級(jí)有兩大類(lèi):高優(yōu)先級(jí)和低優(yōu)先級(jí),如果不對(duì)優(yōu)先級(jí)做任何的設(shè)置,系統(tǒng)默認(rèn)的是低優(yōu)先級(jí)。在同類(lèi)優(yōu)先級(jí)中,也有一個(gè)先后順序,稱(chēng)為自然優(yōu)先級(jí)。在51單片機(jī)中自然優(yōu)先級(jí)的順序?yàn)?,外部中? > 定時(shí)/計(jì)數(shù)器0 > 外部中斷1 > 定時(shí)/計(jì)數(shù)器1 > 串口。在同類(lèi)優(yōu)先級(jí)中,當(dāng)同時(shí)有幾個(gè)中斷到達(dá),自然優(yōu)先級(jí)高的中斷會(huì)先得到響應(yīng),但不能實(shí)現(xiàn)中斷的嵌套,例如,定時(shí)/計(jì)數(shù)器0和外中斷0同為低優(yōu)先級(jí),當(dāng)它們同時(shí)到來(lái)時(shí),由于外部中斷0 > 定時(shí)/計(jì)數(shù)器0,系統(tǒng)先進(jìn)入到外部中斷0的程序,然后再執(zhí)行定時(shí)/計(jì)數(shù)器0的中斷程序。要想實(shí)現(xiàn)中斷的嵌套,中斷A能打
8、斷中斷B的執(zhí)行,則中斷A和中斷B不能在同一類(lèi)型優(yōu)先級(jí)中,中斷A應(yīng)設(shè)置為高優(yōu)先級(jí),中斷B設(shè)置為低優(yōu)先級(jí)。例如:串口中斷在同類(lèi)優(yōu)先級(jí)中的排位是最低的,但如果把串口中斷設(shè)置為高優(yōu)先級(jí),而其他中斷設(shè)為低優(yōu)先級(jí),則串口中斷不僅可以在兩個(gè)中斷到來(lái)時(shí)優(yōu)先執(zhí)行,而且可以在別的中斷正在運(yùn)行時(shí),打斷別的中斷轉(zhuǎn)而執(zhí)行串口中斷。2、中斷的寄存器配置51單片機(jī)中斷系統(tǒng)框圖可用圖3.4.1來(lái)表示。圖3.4.1 51單片機(jī)中斷系統(tǒng)框圖中斷的系統(tǒng)框圖分為幾個(gè)部分:1 系統(tǒng)框圖的前半部分是5個(gè)中斷源及對(duì)應(yīng)的觸發(fā)標(biāo)志。5個(gè)中斷源分別是外部中斷0()、定時(shí)器0(T0)、外部中斷1()、定時(shí)器1(T1)和串口中斷(TI或RI)。對(duì)應(yīng)
9、的觸發(fā)標(biāo)志分別為IE0、TF0、IE1、TF1和TI(RI),分別放在TCON和SCON寄存器當(dāng)中,中斷沒(méi)有觸發(fā),這些中斷觸發(fā)標(biāo)志位置0,中斷觸發(fā),則對(duì)應(yīng)的中斷觸發(fā)標(biāo)志置1。2 系統(tǒng)框圖的后半部分是中斷的優(yōu)先級(jí)配置和中斷的響應(yīng)請(qǐng)求。5個(gè)中斷的優(yōu)先級(jí)配置位分別是PX0、PT0、PX1、PT1和PS,置1為高優(yōu)先級(jí),置0或者默認(rèn)為低優(yōu)先級(jí),這些位在寄存器IP中。需要注意的是,這些位不可單獨(dú)位尋址,舉個(gè)例子:設(shè)置外部中斷0的優(yōu)先級(jí)為高優(yōu)先級(jí),不能在程序中,寫(xiě)成PX0=1,而應(yīng)該是對(duì)寄存器IP配置,即IP=0x01。中斷觸發(fā)后,根據(jù)優(yōu)先級(jí)的配置,向CPU申請(qǐng)響應(yīng)。3 系統(tǒng)框圖的中間部分是中斷的允許開(kāi)關(guān)
10、。前面部分中斷觸發(fā)后,要得到后面CPU的響應(yīng),必須把中間部分的開(kāi)關(guān)合上去,即通常說(shuō)的“開(kāi)中斷”。中斷開(kāi)關(guān)又分兩級(jí),即總開(kāi)關(guān)EA和每一個(gè)中斷源各自的開(kāi)關(guān)(分別是EX0、ET0、EX1、ET1和ES),這些位的配置在于寄存器IE中,置0關(guān)中斷,置1開(kāi)中斷,初始化為置0。這些位可以單獨(dú)尋址,舉例例子:開(kāi)外部中斷0,程序應(yīng)該這樣配置:EA=1; /開(kāi)總中斷EX0=1;/開(kāi)外部中斷0IE寄存器和IP寄存器具體各個(gè)位的關(guān)系如表3.4.1和表3.4.2所示。表3.4.1 IP寄存器和IE寄存器位配置表位序號(hào)D7D6D5D4D3D2D1D0IE(開(kāi)關(guān))EAESET1EX1ET0EX0IP(優(yōu)先級(jí))PSPT1P
11、X1PT0PX0說(shuō)明總開(kāi)關(guān)串口定時(shí)器1外中斷1定時(shí)器0外中斷03、外部中斷的特點(diǎn)和中斷服務(wù)函數(shù)的編寫(xiě)51單片機(jī)有和兩個(gè)外部中斷源,分別由外部引腳P32和P33上的電平變化或狀態(tài)變化作為中斷觸發(fā)信號(hào)。(1)外部中斷觸發(fā)方式51單片機(jī)的外部中斷有兩種觸發(fā)方式:一種是電平觸發(fā)方式,另外一種是下降沿觸發(fā)方式。低電平觸發(fā)的特點(diǎn)是只要外中斷輸入引腳P32或P33保持低電平,將會(huì)一直產(chǎn)生中斷申請(qǐng)。下降沿觸發(fā)的特點(diǎn)是當(dāng)檢測(cè)到外中斷輸入引腳P32或P33由高電平跳變到低電平的瞬間時(shí)產(chǎn)生中斷申請(qǐng)。外中斷觸發(fā)方式的選擇在TCON寄存器中配置,如表3.4.3所示。表3.4.3 TCON寄存器位配置表 定時(shí)/計(jì)數(shù)器 外
12、中斷位序號(hào)D7D6D5D4D3D2D1D0位符號(hào)TF1TR1TF0TR0IE1IT1IE0IT0說(shuō)明定時(shí)器1溢出標(biāo)志位定時(shí)器1運(yùn)行控制位定時(shí)器0運(yùn)行控制位定時(shí)器0運(yùn)行控制位外中斷1請(qǐng)求標(biāo)志位外中斷1觸發(fā)方式選擇位外中斷0請(qǐng)求標(biāo)志位外中斷0觸發(fā)方式選擇位TCON寄存器中的高四位用于定時(shí)/計(jì)數(shù)器,低四位用于外中斷。IE0和IT0屬于外部中斷0,IE1和IT1屬于外中斷1。IT0:外中斷0觸發(fā)方式選擇位:當(dāng)IT0=0,為低電平觸發(fā)方式;當(dāng)IT0=1,為下降沿觸發(fā)方式。IE0:外中斷0請(qǐng)求標(biāo)志位,當(dāng)觸發(fā)中斷時(shí),IE0由0變1,中斷結(jié)束后IE0自動(dòng)清零。IT1、IE1同IT0、IE1使用方法相同。(2)
13、中斷服務(wù)函數(shù)的編寫(xiě)在講解中斷服務(wù)函數(shù)之前,我們先來(lái)了解一下中斷現(xiàn)場(chǎng)的保護(hù)和恢復(fù)。術(shù)語(yǔ)過(guò)于專(zhuān)業(yè),我們以之前講過(guò)的看書(shū)接電話(huà)為例:看書(shū)類(lèi)比于主程序在執(zhí)行任務(wù),突然之間接到一個(gè)電話(huà),類(lèi)比于產(chǎn)生了中斷,在去接電話(huà)之前,需要把看到的那頁(yè)紙張做個(gè)標(biāo)記(把正在看的紙張折一下),給紙張做標(biāo)記的動(dòng)作就是中斷現(xiàn)場(chǎng)保護(hù),單片機(jī)在去處理中斷前,也需要給主程序中的任務(wù)做個(gè)標(biāo)記,記錄主程序從哪一行暫停和當(dāng)前運(yùn)行變量的值。電話(huà)接完了,根據(jù)之前的書(shū)上的標(biāo)記接著看書(shū),單片機(jī)中斷也是,處理完了中斷任務(wù)后,CPU又從主程序被中斷的哪一行接著運(yùn)行,這個(gè)過(guò)程稱(chēng)為中斷現(xiàn)場(chǎng)的恢復(fù)。我們?cè)谟胟eilC51(高級(jí)語(yǔ)言開(kāi)發(fā)環(huán)境)編寫(xiě)中斷服務(wù)程序
14、時(shí),不必考慮中斷現(xiàn)場(chǎng)的保護(hù)和恢復(fù),這是由于編譯器在編譯中斷服務(wù)程序時(shí),會(huì)在生成的目標(biāo)代碼中自動(dòng)加入相應(yīng)的中斷現(xiàn)場(chǎng)保護(hù)和恢復(fù)的指令。在keilC51中,中斷服務(wù)程序必須定義成一個(gè)特殊的函數(shù),稱(chēng)為中斷服務(wù)函數(shù),函數(shù)按照以下格式定義:void 函數(shù)名() interrupt 中斷號(hào) using 工作組 中斷服務(wù)程序中斷服務(wù)函數(shù)的前半部分與普通函數(shù)的定義是一樣的,函數(shù)類(lèi)型 函數(shù)名()。不同之處在于中斷服務(wù)函數(shù)多了一個(gè)關(guān)鍵字interrupt。interrupt用來(lái)聲明該函數(shù)為中斷服務(wù)函數(shù),Interrupt后是中斷向量號(hào),CPU會(huì)根據(jù)中斷向量號(hào)去計(jì)算該中斷在中斷向量表里的位置,然后跳到中斷服務(wù)函數(shù)里,
15、每一個(gè)中斷源都會(huì)有一個(gè)特定的中斷向量號(hào)如表3.4.4所示。最后面的“using 工作組”是指這個(gè)中斷函數(shù)使用單片機(jī)內(nèi)存中4個(gè)工作寄存器中的哪一組。C51編譯器在編譯程序時(shí)自動(dòng)分配工作組,我們?cè)诰帉?xiě)程序時(shí)通常省略“using 工作組”。 表3.4.4 中斷號(hào)中斷名稱(chēng)外部中斷0定時(shí)器0中斷外部中斷1定器1中斷串口中斷中斷號(hào)01234三、任務(wù)實(shí)施有了以上的知識(shí)準(zhǔn)備,我們來(lái)完成本節(jié)的任務(wù)。按鍵接單片機(jī)的P3.2引腳(外部中斷0),按鍵每按下一次,P3.2的引腳的電平從高電平到低電平變化一次,我們可以利用外部中斷0的下降沿觸發(fā)來(lái)完成按鍵的檢測(cè)。程序如下:#include<reg52.h>#d
16、efine uchar unsigned char#defien uint unsigned int sbit LED1=P10;sbit LED2=P11; /兩位LED分別接P10和P11 sbit KeyInput=P32; /按鍵接P3.2引腳 /ms級(jí)延時(shí)子函數(shù)void DelayMs(uint xms) uint i,j;for(i=0;i<xms;i+)for(j=0;j<122;j+);/主函數(shù)void main(void) IT0=1; /下降沿觸發(fā)外部中斷 EX0=1; /使能外部中斷0 EA=1; /使能總中斷 while(1)LED1=1; /LED1滅De
17、layMs(1000); LED2=0; /LED2亮DelayMs(1000); /外部中斷0函數(shù)void EXT0() interrupt 0 EX0=0; /關(guān)外部中斷0DelayMs(10); /消抖延時(shí)if(KeyInput=0) led2=!led2; /發(fā)光二極管2狀態(tài)取反 While(!KeyInput); EX0=1; /開(kāi)外部中斷 程序解釋?zhuān)海?) 外部中斷觸發(fā)的按鍵程序和查詢(xún)按鍵程序相比,按鍵的檢測(cè)不需要主程序去處理,而是直接交給了中斷服務(wù)函數(shù),主函數(shù)只需要完成LED1的閃爍就可以了,一旦按鍵被按下,P3.2口的下降沿觸發(fā)外部中斷0,則CPU立即暫停主程序中的任務(wù),以最快的速度去執(zhí)行中斷服務(wù)函數(shù)中的按鍵處理程序,中斷服務(wù)函數(shù)執(zhí)行完后,又回到主程序繼續(xù)執(zhí)行。按鍵由查詢(xún)方式改為中斷方式后,按鍵檢測(cè)的實(shí)時(shí)性得到了保證,也不會(huì)出現(xiàn)檢測(cè)不到按鍵按下的現(xiàn)象。(2)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 色彩秘境模板
- 2024年項(xiàng)目委托管理合同標(biāo)的明細(xì)
- 外國(guó)人來(lái)華工作聘用合同范本(2篇)
- 基礎(chǔ)設(shè)施合作項(xiàng)目協(xié)議書(shū)
- 大型項(xiàng)目資產(chǎn)管理合同
- 專(zhuān)項(xiàng)知識(shí)產(chǎn)權(quán)保密協(xié)議:2024版格式樣本版
- 2024建筑工程泥工施工勞務(wù)合同
- 13《橋》說(shuō)課稿-2024-2025學(xué)年六年級(jí)語(yǔ)文上冊(cè)統(tǒng)編版
- 2024物流運(yùn)輸合同模板
- 張家港房屋租賃合同正規(guī)文本范本
- 妊娠合并貧血護(hù)理
- 完整解讀《義務(wù)教育課程方案(2022版)》PPT2022年新版義務(wù)教育課程實(shí)施方案最新發(fā)布義務(wù)教育課程方案(2022版)精品課件
- 6.ctg-mboss crm2.0渠道服務(wù)總線功能技術(shù)_v0.99
- 流動(dòng)資金自動(dòng)測(cè)算表(內(nèi)自帶計(jì)算公式)
- 工地施工臨時(shí)用水的計(jì)算
- t-橋式起重機(jī)設(shè)計(jì)計(jì)算書(shū)
- 暴雨產(chǎn)流計(jì)算(推理公式河南省)
- 品質(zhì)管控流程(PPT32頁(yè))
- 人教版小學(xué)數(shù)學(xué)六年級(jí)上冊(cè):第八單元總復(fù)習(xí)教案(共10頁(yè))
- 田字格硬筆書(shū)法練字專(zhuān)用A4打印版紅藍(lán)兩色
- 鐵路站房及配套工程裝飾裝修施工作業(yè)指導(dǎo)書(shū)
評(píng)論
0/150
提交評(píng)論