|
|
請問可否實(shí)現(xiàn)如下功能:在單片機(jī)外部中斷服務(wù)程序里首先修改其自己的優(yōu)先級(jí),然后在執(zhí)行這個(gè)外部中斷服務(wù)程序里的代碼時(shí),再次觸發(fā)這個(gè)外部中斷
請問能實(shí)現(xiàn)么?
我遇到一個(gè)有點(diǎn)想不明白的問題:
我定義一個(gè)全局變量k,用于檢測是低級(jí)的外部中斷還是高級(jí)的外部中斷,k為0時(shí)執(zhí)行低級(jí)代碼,k為1時(shí)執(zhí)行高級(jí)代碼
void int0( ) interrupt 0 using 1
{ if(k==0)
{
PX0=1;
k=1;
while(1)
{
P1=0xf0;
}
}
else
{
P1=0xff ;
Delay( ) ;
P1=0x00;
Delay( );
}
}
以上代碼在Proteus仿真沒問題。在低級(jí)中斷無限循環(huán)時(shí)可以觸發(fā)其自身高級(jí)中斷,并能執(zhí)行完一次閃爍再次返回低級(jí)中斷無限循環(huán)
但是如果代碼改成這樣:低級(jí)外部中斷時(shí)只執(zhí)行一次,高級(jí)部分不變
void int0( ) interrupt 0 using 1
{
if(k==0)
{
PX0=1;
k=1;
P1=0xf0;
Delay() ;
Delay() ;
P1=0x0f;
Delay() ;
Delay() ;
PX0=0;
k=0;
}
else
{
P1=0xff ;
Delay() ;
P1=0x00;
Delay();
}
}
以上代碼仿真時(shí),則一直留在了高級(jí)代碼,不再返回低級(jí)繼續(xù)執(zhí)行了。
這是為什么呢?請求高人解惑!多謝多謝!
|
|