C51中斷中的使用 中斷優(yōu)先級(jí) interrupt 和 using_第1頁(yè)
C51中斷中的使用 中斷優(yōu)先級(jí) interrupt 和 using_第2頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

C51中斷中的使用中斷優(yōu)先級(jí)interrupt和using標(biāo)簽:c編譯器工作編程作業(yè)2012-08-1213:414045人閱讀評(píng)論⑴收藏舉報(bào)8051系列MCU的基本結(jié)構(gòu)包括:32個(gè)I/O口(4組8bit端口);兩個(gè)16位定時(shí)計(jì)數(shù)器;全雙工串行通信;6個(gè)中斷源(2個(gè)外部中斷、2個(gè)定時(shí)7計(jì)數(shù)器中斷、1個(gè)串口輸入/輸出中斷),兩級(jí)中斷優(yōu)先級(jí);128字節(jié)內(nèi)置RAM;獨(dú)立的64K字節(jié)可尋址數(shù)據(jù)和代碼區(qū)。中斷發(fā)生后,MCU轉(zhuǎn)到5個(gè)中斷入口處之一,然后執(zhí)行相應(yīng)的中斷服務(wù)處理程序。中斷程序的入口地址被編譯器放在中斷向量中,中斷向量位于程序代碼段的最低地址處,注意這里的串口輸入/輸出中斷共用一個(gè)中斷向量。8051的中斷向量表如下:中斷源中斷向量上電復(fù)位0000H外部中斷00003H定時(shí)器0溢出000BH外部中斷10013H定時(shí)器1溢出001BH串行口中斷0023H定時(shí)器2溢出002BHinterrupt和using都是C51的關(guān)鍵字。C51中斷過程通過使用interrupt關(guān)鍵字和中斷號(hào)(0到31)來實(shí)現(xiàn)。中斷號(hào)指明編譯器中斷程序的入口地址中斷序號(hào)對(duì)應(yīng)著8051中斷使能寄存器IE中的使能位,對(duì)應(yīng)關(guān)系如下:IE寄存器C51中的8051的的使能位中斷號(hào)中斷源IE.00外部中斷0IE.11定時(shí)器0溢出IE.22外部中斷1IE.33定時(shí)器1溢出IE.44串口中斷IE.55定時(shí)器2溢出有了這一聲明,編譯器不需理會(huì)寄存器組參數(shù)的使用和對(duì)累加器A、狀態(tài)寄存器、寄存器B、數(shù)據(jù)指針和默認(rèn)的寄存器的保護(hù)。只要在中斷程序中用到,編譯器會(huì)把它們壓棧,在中斷程序結(jié)束時(shí)將他們出棧。C51支持所有5個(gè)8051標(biāo)準(zhǔn)中斷從0到4和在8051系列(增強(qiáng)型)中多達(dá)27個(gè)中斷源。using關(guān)鍵字用來指定中斷服務(wù)程序使用的寄存器組。用法是:using后跟一個(gè)0到3的數(shù),對(duì)應(yīng)著4組工作寄存器。一旦指定工作寄存器組,默認(rèn)的工作寄存器組就不會(huì)被壓棧,這將節(jié)省32個(gè)處理周期,因?yàn)槿霔:统鰲6夹枰?個(gè)處理周期。這—做法的缺點(diǎn)是所有調(diào)用中斷的過程都必須使用指定的同一個(gè)寄存器組,否則參數(shù)傳遞會(huì)發(fā)生錯(cuò)誤。因此對(duì)于using,在使用中需靈活取舍。關(guān)于using:您在文中說明“這一做法的缺點(diǎn)是所有調(diào)用中斷的過程都必須使用指定的同一個(gè)寄存器組”是不是這個(gè)意思?舉個(gè)例子來說:定義一個(gè)函數(shù)voidfunc(unsignedchari){if(++i==0x12){}}有如下一個(gè)中斷函數(shù)voidint_0(void)interrupt0using1{}在默認(rèn)狀態(tài)下,func使用寄存器組O(BANKO),那么當(dāng)int_O調(diào)用func時(shí)是否存在當(dāng)傳遞參數(shù)時(shí)會(huì)造成參數(shù)傳遞錯(cuò)誤?謝謝!如果在中斷服務(wù)函數(shù)ISR中使用寄存器,那么必須處理好using的使用問題:1、中斷服務(wù)函數(shù)使用using指定與主函數(shù)不同的寄存器組(主函數(shù)一般使用RegisterbankO)。2、中斷優(yōu)先級(jí)相同的ISR可用using指定相同的寄存器組,但優(yōu)先級(jí)不同的ISR必須使用不同的寄存器組,在ISR中被調(diào)用的函數(shù)也要使用using指定與中斷函數(shù)相同的寄存器組。3、如果不用using指定,在ISR的入口,C51默認(rèn)選擇寄存器組0,這相當(dāng)于中斷服務(wù)程序的入口首先執(zhí)行指令:MOVPSW#O這點(diǎn)保證了,沒使用using指定的高優(yōu)先級(jí)中斷。可以中斷使用不同的寄存器組的低優(yōu)先級(jí)中斷。4、使用using關(guān)鍵字給中斷指定寄存器組,這樣直接切換寄存器組而不必進(jìn)行大量的PUSH和POP操作,可以節(jié)省RAM空間,加速M(fèi)CU執(zhí)行時(shí)間。寄存器組的切換,總的來說比較容易出錯(cuò),要對(duì)內(nèi)存的使用情況有比較清晰的認(rèn)識(shí),其正確性要由你自己來保證。特別在程序中有直接地址訪問的時(shí)候,一定要小心謹(jǐn)慎!至于“什么時(shí)候要用到寄存器組切換”,一種情況是:當(dāng)你試圖讓兩個(gè)(或以上)作業(yè)同時(shí)運(yùn)行,而且它們的現(xiàn)場(chǎng)需要一些隔離的時(shí)候,就會(huì)用上了。在ISR或使用實(shí)時(shí)操作系統(tǒng)RTOS中,寄存器非常有用。寄存器組使用的原則:1、8051的最低32個(gè)字節(jié)分成4組8寄存器。分別為寄存器R0到R7。寄存器組由PSW的低兩位選擇。在ISR中,MCU可以切換到一個(gè)不同的寄存器組。對(duì)寄存器組的訪問不可位尋址,C51編譯器規(guī)定使用using或禁止中斷的函數(shù)(#pragmadisable)均不能返回bit類型的值。2、主程序(main函數(shù))使用一組,如bank0;低中斷優(yōu)先級(jí)的所有中斷均使用第二組,如bank1;高中斷優(yōu)先級(jí)的所有中斷均使用再另外一組,如bank2。顯然,同級(jí)別的中斷使用同一組寄存器不會(huì)有問題,因?yàn)椴粫?huì)發(fā)生中斷嵌套;而高優(yōu)先級(jí)的中斷則要使用與低優(yōu)先級(jí)中斷不同的一組,因?yàn)橛锌赡艹霈F(xiàn)在低優(yōu)先級(jí)中斷中發(fā)生高優(yōu)先級(jí)中斷的情況。編譯器會(huì)自動(dòng)判斷何時(shí)可使用絕對(duì)寄存器存取。3、在ISR中調(diào)用其它函數(shù),必須和中斷使用相同的寄存器組。當(dāng)沒用NOAREGS命令做明確的聲明,編譯器將使用絕對(duì)寄存器尋址方式訪問函數(shù)選定(即用using或REGISTERBANK指定)的寄存器組,當(dāng)函數(shù)假定的和實(shí)際所選的寄存器組不同時(shí),將產(chǎn)生不可預(yù)知的結(jié)果,從而可能出現(xiàn)參數(shù)傳遞錯(cuò)誤,返回值可能會(huì)在錯(cuò)誤的寄存器組中。舉一例子:當(dāng)需要在中斷內(nèi)和中斷外調(diào)用同一個(gè)函數(shù),假定按照程序的流程控制,不會(huì)出現(xiàn)函數(shù)的遞歸調(diào)用現(xiàn)象,這樣的調(diào)用會(huì)不會(huì)出現(xiàn)問題?若確定不會(huì)發(fā)生重入情況,則有以下兩種情況:1如果ISR和主程序使用同一寄存器組(主程序缺省使用BANK0,若ISR沒有使用using為其指定寄存器區(qū),則缺省也使用BANK0),則不需其他設(shè)置。2、如果ISR和主程序使用不同的寄存器組(主程序缺省使用BANK0,ISR使用using指定了其他BANK),則被調(diào)用函數(shù)必須放在:#pragmaNOAREGS#pragmaAREGS控制參數(shù)對(duì)中,指定編譯器不要對(duì)該函數(shù)使用絕對(duì)寄存器尋址方式;或者也可在Options->C51,選中"Don'tuseabsoluteregisteraccesses",使所有代碼均不使用絕對(duì)寄存器尋址方式(這樣,執(zhí)行效率將稍有降低)。不論以上的哪一種情況,編譯器均會(huì)給出重入警告,需手工更改OVERLAY參數(shù),做重入說明。3、還有一種辦法:如果被調(diào)用函數(shù)的代碼不是很長(zhǎng),還是將該函數(shù)復(fù)制一份,用不同的函數(shù)名代替,這種情況適合ROM有足夠多余的空間。因此,對(duì)using關(guān)鍵字的使用,如果沒把握,寧可不用,交給編譯系統(tǒng)自己去處理好了。interruptxxusingy跟在interrupt后面的xx值得是中斷號(hào),就是說這個(gè)函數(shù)對(duì)應(yīng)第幾個(gè)中斷端口,一般在51中0外部中斷0定時(shí)器0外部中斷1定時(shí)器1串行中斷其它的根舉相應(yīng)得單片機(jī)有自己的含義,實(shí)際上c載編譯的時(shí)候就是把你這個(gè)函數(shù)的入口地址方到這個(gè)對(duì)應(yīng)中斷的跳轉(zhuǎn)地址usingy這個(gè)y是說這個(gè)中斷函數(shù)使用的那個(gè)寄存器組就是51里面一般有4個(gè)r0--r7寄存器,如果你的終端函數(shù)和別的程序用的不是同一個(gè)寄存器組則進(jìn)入中斷的時(shí)候就不會(huì)將寄存器組壓入堆棧返回時(shí)也不會(huì)彈出來節(jié)省代碼和時(shí)間一般只有using0,1,2,3單片機(jī)中斷響應(yīng)可以分為以下幾個(gè)步驟:1、停止主程序運(yùn)行。當(dāng)前指令執(zhí)行完后立即終止現(xiàn)行程序的運(yùn)行。2、保護(hù)斷點(diǎn)。把程序計(jì)數(shù)器PC的當(dāng)前值壓入堆棧,保存終止的地址(即斷點(diǎn)地址),以便從中斷服務(wù)程序返回時(shí)能繼續(xù)執(zhí)行該程序,3、尋找中斷入口。根據(jù)5個(gè)不同的中斷源所產(chǎn)生的中斷,查找5個(gè)不同的入口地址。4、執(zhí)行中斷處理程序。這就不講了;5、中斷返回。執(zhí)行完中斷處理程序后,就從中斷處返回到主程序,繼續(xù)往下執(zhí)行。以上工作是由計(jì)算機(jī)自動(dòng)完成的,與編程者無關(guān),在這5個(gè)入口地址處存放有中斷處理的程序(這是程序編寫時(shí)放在那兒的,如果沒把中斷處理程序放在那兒可就錯(cuò)了,因?yàn)橹袛喑绦驘o法被執(zhí)行到)。有點(diǎn)復(fù)雜是嗎?沒關(guān)系,繼續(xù)往下看。五個(gè)中斷源的自然優(yōu)先級(jí)由高到低的排列順序?yàn)橥庵袛?-定時(shí)器0-外中斷1-定時(shí)器1-串口中斷。如果我們不對(duì)其進(jìn)行設(shè)置,單片機(jī)就按照此順序不斷的循環(huán)檢查各個(gè)中斷標(biāo)志(就像我們生活中按照習(xí)慣處理事物一樣),但有時(shí)我們需要人工設(shè)置高、低優(yōu)先級(jí),也就是說由編程者來設(shè)定哪些中斷是高優(yōu)先級(jí)、哪些中斷是低優(yōu)先級(jí)(當(dāng)然由于只有兩級(jí),所以必然只有一些中斷處于優(yōu)先級(jí)別,而其他的中斷則處于同一級(jí)別,處于同一級(jí)別的中斷順序就由自然優(yōu)先級(jí)來確定,這一點(diǎn)請(qǐng)大家務(wù)必搞清楚了)。既然可以設(shè)定人工優(yōu)先級(jí),那么它又是如何來設(shè)置的呢?其實(shí)很簡(jiǎn)單,我們只要把IP寄存器的對(duì)應(yīng)位置“1”就可以了,看下面

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論