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);
}