日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
MCS-51系統(tǒng)中斷優(yōu)先級(jí)的軟擴(kuò)展
MCS-51系統(tǒng)中斷優(yōu)先級(jí)的軟擴(kuò)展
 更新時(shí)間:2009-7-9 16:55:19  點(diǎn)擊數(shù):0
【字體: 字體顏色
最后,給各中斷源的ISR(Interrupt Routine,中斷服務(wù)例程)加以如下所示的外殼(Assembly形式的)。不妨以定時(shí)器0(T0)為例:CSEG AT 8×1+3;定義絕對(duì)段,設(shè)置斷向量JMP T0_ISR_SHELL?PR?TO_ISR_SHELL?XX SEGMENT CODE ;聲明再定位段T0_ISR_SHELL:PUSH IE ;保存IEMOV IE,#TO_INT_MASK;設(shè)置當(dāng)前中斷屏蔽字CALL ResetIntSys:復(fù)位中斷系統(tǒng)CALL T0_ISR:調(diào)用中斷服務(wù)例程的主體POP IE ;恢復(fù)IERET這里,T0_ISR為定時(shí)器0(T0)的ISR的主體部分。其應(yīng)以一般函數(shù)的形式,用匯編或C編寫。ResetIntSys為僅含一條中斷返回指令(IRET)的函數(shù),即ResetIntSys:RETI。其用于復(fù)位中斷系統(tǒng),以使在相應(yīng)ISR執(zhí)行過程中,系統(tǒng)仍可響應(yīng)其它中端源提出的中斷請求,以便實(shí)現(xiàn)中斷嵌套。這樣就達(dá)到了防止同級(jí)和低級(jí)優(yōu)先級(jí)中斷的目的。高優(yōu)先級(jí)的中斷源可以提出中斷請求,但未必會(huì)被立即響應(yīng)。因?yàn)樵诋?dāng)前策略下,尚不能實(shí)現(xiàn)真正的“中斷嵌套”(即高優(yōu)先級(jí)的中斷服務(wù)例程可中斷低優(yōu)先級(jí)的中斷服務(wù)例程而嵌套執(zhí)行),而僅有最高優(yōu)先級(jí)的中斷(X1)才可以實(shí)現(xiàn)這種真正的“中斷嵌套”。因?yàn)樵?051系統(tǒng)里,中斷能否嵌套僅取決于其相應(yīng)的“物理中斷優(yōu)先級(jí)”(各中斷源的物理中斷優(yōu)先級(jí)由中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位決定,且僅有二級(jí))。下面分三種情況說明方法一的特點(diǎn)和不足:①當(dāng)外部中斷1(X1,其具有最高的邏輯中斷優(yōu)先級(jí)和最高的物理中斷優(yōu)先級(jí))提出中斷請求時(shí),系統(tǒng)將立即響應(yīng),而不管系統(tǒng)此時(shí)忙否。如果此時(shí) 系統(tǒng)正在執(zhí)行其它中斷的ISR,X1的ISR將以嵌套形式執(zhí)行,因?yàn)槠渌袛嗪吹奈锢碇袛鄡?yōu)先級(jí)都為最低(51系統(tǒng)僅有兩級(jí)物理優(yōu)先級(jí):最高或最低)。②當(dāng)定時(shí)器0(T0,其優(yōu)先級(jí)為2)的中斷請求正被響應(yīng)時(shí),來自串口(S,其優(yōu)先級(jí)為3)和外部中斷0(X0,其優(yōu)先級(jí)為4)的中斷請求將被禁止;而只允許外部中斷1(X1,其優(yōu)先級(jí)為0)和定時(shí)器1(T1,其優(yōu)先級(jí)為1)提出中斷請求。如果是X1提出中斷請求,則X1的ISR將立即嵌套執(zhí)行;如果是T1提出,盡管其優(yōu)先級(jí)高于當(dāng)前中斷T0,但因其物理中斷優(yōu)先級(jí)與T0一樣(同為最低),故而將不會(huì)像X1那樣被系統(tǒng)立即響應(yīng),并嵌套執(zhí)行,而只能等待,直到T0的中斷服務(wù)例程執(zhí)行完畢。③如果在串口(S,其優(yōu)先級(jí)為3)中斷正被響應(yīng)過程中,定時(shí)器1(T1,其優(yōu)先級(jí)為1)與定時(shí)器0(T0,其優(yōu)先級(jí)為2)分別提出中斷請求。由于它們有高于S的優(yōu)先級(jí),所以系統(tǒng)允許它們提出中斷請求;但因其物理優(yōu)先級(jí)與S一樣,故而直到S的中斷服務(wù)例程執(zhí)行完畢,系統(tǒng)才會(huì)受理T1與T0的中斷請求。邏輯上,由于T1具有高于T0的優(yōu)先級(jí),所以T1應(yīng)先為系統(tǒng)響應(yīng)。但因物理優(yōu)先級(jí)相同時(shí),中斷請求的響應(yīng)次序取決于內(nèi)部查詢順序,而T0先于T1,所以實(shí)際上T0先 系統(tǒng)響應(yīng),即出現(xiàn)了“優(yōu)先級(jí)反轉(zhuǎn)”的問題?梢,方法一雖然可以部分地達(dá)到“擴(kuò)充中斷優(yōu)先級(jí)”的目的,但其存在兩個(gè)問題:*某些高優(yōu)先級(jí)中斷不能中斷嵌套低優(yōu)先級(jí)中斷;*會(huì)出現(xiàn)“優(yōu)先級(jí)中反轉(zhuǎn)”。方法二和方法三是針對(duì)方法一的這兩個(gè)不足而提出的,并最終實(shí)現(xiàn)對(duì)51系統(tǒng)的中斷優(yōu)先級(jí)的真正擴(kuò)展。2.2 方法二該方法是在方法一基礎(chǔ)上,為解決“優(yōu)先級(jí)反轉(zhuǎn)”的問題,而實(shí)施的簡單策略而得。根據(jù)方法一中對(duì)“優(yōu)先級(jí)反轉(zhuǎn)”問題的分析可知,出現(xiàn)該問題的原因是:各中斷源的邏輯優(yōu)先級(jí)與其內(nèi)部查詢順序不一致。只要在系統(tǒng)設(shè)計(jì)時(shí),兼顧中斷源相關(guān)事件的緊迫程度與中斷源的內(nèi)部查詢邏輯:將最緊迫的事件(如掉電)賦以最高的優(yōu)先級(jí)0,并使其與系統(tǒng)中的最先被查詢的中斷源(外部中斷0<X0>)相關(guān)聯(lián);使次緊迫的事件的優(yōu)先為1,并使之與系統(tǒng)內(nèi)第二個(gè)被查詢的中斷源(定時(shí)器0<T0)相關(guān)聯(lián)。以此類推,給緊追程度最低的事件賦以最低的優(yōu)先級(jí)N-1(N為中斷源個(gè)數(shù)),并使之與系統(tǒng)中最后被查詢的中斷源(串口中斷<S>)相關(guān)聯(lián),即51系統(tǒng)內(nèi)的各中斷源應(yīng)有表3所列的優(yōu)先級(jí)。

表3 中斷源的優(yōu)先級(jí)分配如此,即可解決“優(yōu)先級(jí)反轉(zhuǎn)”的問題。2.3 方法三本法是在方法一、二的基礎(chǔ)上,針對(duì)“某些高優(yōu)先級(jí)中斷不能中斷嵌套低優(yōu)級(jí)中斷”的問題,引入相應(yīng)的策略,以實(shí)現(xiàn)對(duì)51系統(tǒng)中斷優(yōu)先級(jí)的“真正”擴(kuò)展。

3 優(yōu)先級(jí)軟擴(kuò)展的函數(shù)庫實(shí)現(xiàn)
為了真正擴(kuò)展51系統(tǒng)的優(yōu)先級(jí),各中斷源的優(yōu)先級(jí)、優(yōu)先級(jí)屏蔽字、中斷屏蔽字應(yīng)是確定的,如表3、4所列。C51編寫斷服務(wù)例程時(shí),應(yīng)給出相應(yīng)的中斷源編號(hào)(中斷號(hào))。特定中斷源有特定的中斷號(hào),而此中斷號(hào)恰與各中斷應(yīng)有的優(yōu)先級(jí)一致。本文用C51,以函數(shù)庫的形式實(shí)現(xiàn)方法三所述的策略,其包含兩個(gè)文件:ExtIntPri.H、ExtIntPri.C。須要指出,為使優(yōu)先級(jí)的設(shè)置和恢復(fù)具有原子性以防出現(xiàn)混亂,應(yīng)對(duì)SetPriority()和ResetPriority()作臨界處理,以使其不被“再入”訪問。另外,應(yīng)對(duì)系統(tǒng)棧作調(diào)整。如圖1所示,其中“1”代表SetPriority()所作的調(diào)整,其將IP、IE保存于系統(tǒng)棧中;“2”代表ResetPriority()所作的調(diào)整,其從系統(tǒng)棧中恢復(fù)IE、IP;“HAddr”、“LAddr”分別代表當(dāng)前函數(shù)返回地址的高位字節(jié)和低字節(jié)(棧中的地址是以小端字節(jié)序<Little Endian>方式存儲(chǔ),這是C51中唯一的例外,而所有其它多字節(jié)數(shù)據(jù)則皆以大端字節(jié)序<Big Endian>方式存儲(chǔ))。如果不這樣做,而是定義兩個(gè)全局變量來保存IE、IP,由于SetPriority()和ResetPriority()都要訪問這兩個(gè)全局變量,而這兩個(gè)函數(shù)又應(yīng)在ISR的開關(guān)和結(jié)尾處被分別調(diào)用,從而使ISR成為臨界區(qū),而不可被其它ISR中斷,這將使優(yōu)先級(jí)的存在失去意義。//ExtIntPri.Hextern void SetPriority(unsigned char);extern void SetPriority(unsigned char);extern void ResetPriority(void);//ExtIntPri.C#pragma src#include "ExtIntPri.H"#include<reg51.h>//靜態(tài)(局部)函數(shù)聲明static void ResetIntSys(void);//僅含一條指令:RETI//寬兩個(gè)宏用作“臨界區(qū)”的進(jìn)入?yún)^(qū)和退出區(qū)#define ENTER_CRITICAL()EA=0//關(guān)中斷,以防臨界再入#define EXIT_CRITICAL() EA=1//中斷屏蔽字和優(yōu)先級(jí)屏蔽字的宏定義,如表3所列。#define S_INT_MASK 0x8F//;1-01111B//…#define S_PRI_MASK 0x0F//;---01111B//…//先調(diào)整系統(tǒng)棧以保存IP、IE,其過程如圖1所示,再為給定中斷//(prio也是中斷號(hào))設(shè)置優(yōu)先級(jí)void SetPriority(unsigned char prio){ENTER_CRITICAL();//關(guān)中斷#pragma asmPOP ACC //彈出返回地址的高位字節(jié)HAddrPOP B //彈出返回地址的低位字節(jié)LaddrPUSH IPPUSH IE //EA= =0PUSH B //LAddr進(jìn)棧PUSH ACC //HAddr進(jìn)制#pragma endasmswitch(prio){case 0:IP=X0_PRI_MASK;IE=X0_INT_MASK;break;//…case4:IP=S_PRI_MASK;IE=S_INT_MASK;break;}ENTER_CRITICAL();//這里中斷被打開,故再關(guān)中斷ResetIntSys();EXIT_CRITICAL();//開中斷}//從系統(tǒng)棧中恢復(fù)IE、IP,其過程如圖1所示。該函數(shù)應(yīng)在退出ISP時(shí)調(diào)用void ResetPriority(void){ENTER_CRITICAL();#pragma asmPOP ACC //彈出返回地址的高位字節(jié)HAddrPOP B //彈出返回地址的低位字節(jié)LAddrPOP IE //EA= =0POP IPPUSH B //LAddr進(jìn)棧PUSH ACC //Haddr進(jìn)棧#pragma endasmEXIT_CRITICAL();//開中斷}//僅含一條指令:RETI,用以復(fù)位中斷系統(tǒng),以便系統(tǒng)在ISR執(zhí)行過程中可響應(yīng)其它中斷void ResetIntSys(void){char code reti=0x32; //32H為RETI的機(jī)器碼(((void)(code*)(void))(&reti))();//將reti的地址強(qiáng)制轉(zhuǎn)化為函數(shù)指針}使用時(shí),只需將ExtIntPri.H頭文件用#include加入相應(yīng)源文件(當(dāng)然,應(yīng)將ExtIntPri.C的目標(biāo)文件<*.Obj>、庫文件<*.lib>或匯編源文件<*.src>加入當(dāng)前工程)。不妨以定時(shí)器0(T0)為例,其中斷號(hào)為1,故優(yōu)先級(jí)亦應(yīng)為1,如下所示:////Test.C#include "ExtIntPri.H"http://…void T0_ISR(void)interrupt 1 using 2{SetPriority(1);//…ResetPriority();}如此,T0即有了次最高優(yōu)先級(jí)——1。結(jié)語使用本文所述的“軟擴(kuò)展”方法,可以將MCS-51系統(tǒng)的中斷優(yōu)先級(jí)擴(kuò)展到5級(jí)。如果所用51系統(tǒng)的中斷源個(gè)數(shù)為N(N≤8),只須對(duì)上述方法稍作修改即可將其優(yōu)先級(jí)擴(kuò)展到N級(jí)。該方法不需增加任何硬件,且所需的額外資源消耗很小,使用也非常簡單,不會(huì)給用戶增加編程負(fù)擔(dān)。實(shí)際應(yīng)用表明,這種方法是可行的和有效的。
摘要:鑒于MCS-51系統(tǒng)只提供“二級(jí)中斷嵌套”,提出擴(kuò)展51系統(tǒng)中斷優(yōu)先級(jí)的純軟件方法。其利用51系統(tǒng)內(nèi)建的中斷允許寄存器IE和中斷優(yōu)先級(jí)寄存器IP,通過屏蔽字機(jī)制來實(shí)現(xiàn);以C51的形式,給出這種擴(kuò)展方法的函數(shù)庫實(shí)現(xiàn),為該方法的使用賦予友好、簡潔的用戶接口。    關(guān)鍵詞:MCS-51單片機(jī) 中斷優(yōu)先級(jí) 軟擴(kuò)展 C51引言眾所周知,MCS-51系統(tǒng)只提供“二級(jí)中斷嵌套”,而大多數(shù)嵌入式系統(tǒng)希望有多于兩級(jí)的優(yōu)先級(jí)別。因?yàn)橐话銇碚f,系統(tǒng)都有掉電中斷,且應(yīng)置為最高優(yōu)先級(jí),這樣所有其它中斷只能共用一個(gè)最低優(yōu)先級(jí),如此,往往不能滿足實(shí)際的邏輯需求。為了使系統(tǒng)具有多于兩級(jí)的中斷優(yōu)先級(jí)別,可以利用8259A之類的中斷控制芯片實(shí)現(xiàn)中斷優(yōu)先級(jí)的硬擴(kuò)展,但卻增加了系統(tǒng)的造價(jià)和復(fù)雜性。因復(fù)雜性的提高,系統(tǒng)的可靠性將受到影響。本文提出一種擴(kuò)展MCS-51系統(tǒng)中斷優(yōu)先級(jí)的純軟件方法,不需增加任何硬件,且所需的額外資源消耗也很小。實(shí)際應(yīng)用表明這種方法是可行的和有效的。1 MCS-51的中斷系統(tǒng)簡介MCS-51系列單片機(jī)允許有五個(gè)中斷源,提供兩個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)二級(jí)中斷嵌套。這兩級(jí)優(yōu)先級(jí)遵循下述規(guī)則:僅高優(yōu)先級(jí)中斷源可中斷嵌套低優(yōu)先級(jí)中斷源。為實(shí)現(xiàn)這一規(guī)則,中斷系統(tǒng)內(nèi)部包含兩個(gè)不可尋址的優(yōu)先級(jí)狀態(tài)觸發(fā)器。當(dāng)特定優(yōu)先級(jí)的某中斷源被響應(yīng)時(shí),相應(yīng)的觸發(fā)器即被置位,直到執(zhí)行了RETI指令后,這個(gè)觸發(fā)器才復(fù)位。在此期間,同級(jí)和低級(jí)中斷將被防止。中斷源的中斷請求能否得到響應(yīng),受中斷允許寄存器IE的控制。每個(gè)中斷源的優(yōu)先級(jí)可通過對(duì)中斷優(yōu)先級(jí)寄存器IP編程來設(shè)定:或最低,或最高。同一優(yōu)先級(jí)中的各中斷源同時(shí)請求中斷時(shí),由內(nèi)部查詢邏輯確定響應(yīng)次序。查詢次序依次為:外部中斷0(X0)、定時(shí)器中斷0(T0)、外部中斷1(X1)、定時(shí)器中斷1(T1)、串口中斷(S)。如果當(dāng)前指令是RETI或是對(duì)IE、IP操作的指令,將封裝CPU對(duì)中斷的響應(yīng),且必須再執(zhí)行完一條指令之后才會(huì)響應(yīng)中斷。2 中斷優(yōu)先級(jí)軟擴(kuò)展的方法首先,給出軟擴(kuò)展的第一種方法,并分析其特點(diǎn),指出其存在的缺陷。然后,基于對(duì)方法一的不足之處,給出不斷完善的方法二、方法三。其中方法二是對(duì)方法一的完善,方法三是對(duì)方法二的完善,并最終解決了方法一、二中的缺陷,實(shí)現(xiàn)了真正的中斷優(yōu)先級(jí)的軟擴(kuò)展。2.1 方法一此法僅使用和系統(tǒng)的中斷允許寄存器IE,通過中斷屏蔽字機(jī)制,以使不同的中斷源具有不同的邏輯中斷優(yōu)先級(jí)(下文中的“優(yōu)先級(jí)”如不加說明即指“邏輯中斷優(yōu)先級(jí)”)。不失一般性,不妨令8051系統(tǒng)的五個(gè)中斷源——外中斷0(X0)、定時(shí)器中斷0(T0)、外中斷1(X1)、定時(shí)器中斷1(T1)及串口中斷(S),有如表1所列的優(yōu)先級(jí)。(實(shí)際應(yīng)用中,視具體情況,賦予不同中斷源以適當(dāng)?shù)膬?yōu)先級(jí)。)其中,“0”代表最高優(yōu)先級(jí),“4”代表最低優(yōu)先級(jí)。首先,給設(shè)定了優(yōu)先級(jí)的諸中斷源賦以二級(jí)“物理中斷優(yōu)先級(jí)”:將優(yōu)先級(jí)最高的中斷源(X1)在中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位(PX1)置1,而令I(lǐng)P中的其它相關(guān)位(PT1、PT0、PS、PX0)為0。其次,給設(shè)定了優(yōu)先級(jí)的各中斷源分配適當(dāng)?shù)摹爸袛嗥帘巫帧薄F浠舅枷胧瞧帘瓮?jí)和低級(jí)中斷。具體分配過程如下:優(yōu)先級(jí)為k(0≤k≤N-1,N為中斷源數(shù)量)的中斷源的“中斷屏蔽字”為:優(yōu)先級(jí)為x(x∈[k,N-1],即同級(jí)和低級(jí))的中斷源在IE中的對(duì)應(yīng)位置0,優(yōu)先級(jí)為y(y∈[0,k-1],即高級(jí))的中斷源在IE中的相應(yīng)位置1而得的位組字節(jié)。當(dāng)然,IE的EA位(CPU中斷允許標(biāo)志位)始終為1.對(duì)于表1所列的中斷優(yōu)先級(jí)分配情況,各中斷源的“中斷屏蔽字”配置如表2所列。

表1 中斷源的優(yōu)先級(jí)分配表
中斷源X1T1T0SX0
優(yōu)先級(jí)01234
中斷源X0T0X1T1S
優(yōu)先級(jí)01234
  • 上一篇: 能防止多次試探密碼的單片機(jī)密碼鎖
  • 下一篇: I2C總線數(shù)字式溫濕度傳感器SHT11及其在單片機(jī)系統(tǒng)的應(yīng)用
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1