2530是允許中斷嵌套的,中斷有優先級
18箇中斷組成6箇中斷優先組,每組三個中斷源,各組的中斷優先級可以通過配置寄存器來設置,且允許中斷嵌套。
相同的組的優先級由以下表格進行輪詢
注意:如果執行的程序不允許被其他中斷源打斷,記得進入中斷後關閉總中斷響應
以下是端口0 的中斷分以下步驟:
- 清除中斷標誌位
- 允許端口(具體的端口中斷)
- 打開P0口所有的中斷
- 打開總中斷
#include<iocc2530.h>
#define LED1 P1_0
#define SW P1_5
void LEDinit();
int delay(int len);
void LEDinit()
{
P1SEL&=~(1<<0);
P1DIR|=(1<<0);
}
int delay(int len)
{
int i;
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
for(i=0;i<len;i++);
}
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
if(P0IFG&0x20) //清除P0_5的標誌位
{
P0IFG=0;
LED1=~LED1;
}
}
void init(void)
{
P0IFG&=0x00; //清除標誌位
P0IE=1; //端口0使能
P0IEN|=0x10; //端口 P0_5
PICTL=0X00; //下降沿產生中斷
EA=1;
}
void main(void)
{
init();
LEDinit();
LED1=1;
delay(100);
while(1);
}