您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

MCS-51系统中断优先级的软扩展

时间:2007-1-20栏目:电子通信论文

//…

//先调整系统栈以保存IP、IE,其过程如图1所示,再为给定中断

//(prio也是中断号)设置优先级

void SetPriority(unsigned char prio){

ENTER_CRITICAL();//关中断

#pragma asm

POP ACC //弹出返回地址的高位字节HAddr

POP B //弹出返回地址的低位字节Laddr

PUSH IPMCS-51系统中断优先级的软扩展

PUSH IE //EA= =0

PUSH B //LAddr进栈

PUSH ACC //HAddr进制

#pragma endasm

switch(prio){

case 0:IP=X0_PRI_MASK;IE=X0_INT_MASK;

break;

//…

case4:IP=S_PRI_MASK;IE=S_INT_MASK;break;

}

ENTER_CRITICAL();//这里中断被打开,故再关中断

ResetIntSys();

EXIT_CRITICAL();//开中断

}

//从系统栈中恢复IE、IP,其过程如图1所示。该函数应在退出ISP时调用

void ResetPriority(void){

ENTER_CRITICAL();

#pragma asm

POP ACC //弹出返回地址的高位字节HAddr

POP B //弹出返回地址的低位字节LAddr

POP IE //EA= =0

POP IP

PUSH B //LAddr进栈

PUSH ACC //Haddr进栈

#pragma endasm

EXIT_CRITICAL();//开中断

}

//仅含一条指令:RETI,用以复位中断系统,以便系统在ISR执行过程中可响应其它中断

void ResetIntSys(void){

char code reti=0x32; //32H为RETI的机器码

(((void)(code*)(void))(&reti))();//将reti的地址强制转化为函数指针

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页