与外部中断有关的寄存器
除了这些公共中断使能之外,每个端口的位都有位于 SFR 寄存器 P0IEN、P1IEN 和 P2IEN 的单独的中断使能。即使配置为外设 I/O 或通用输出的 I/O 引脚使能时都有中断产生
I/O中断方式由寄存器PICTL控制
当中断条件发生在 I/O 引脚之一上面,P0-P2 中断标志寄存器 P0IFG、P1IFG 或 P2IFG 中相应的中断状态标志将设置为 1。不管引脚是否设置了它的中断使能位,中断状态标志都被设置。当中断已经执行,中断状态标志被清除,该标志写入 0。这个标志必须在清除 CPU 端口中断标志(PxIF)之前被清除
P0IFG: P0 中断标志
P1IFG: P1 中断标志
P2IFG: P2 中断标志
初始化步骤:
1.设置寄存器IEN0、IEN1和IEN2中相应中断使能位为1
2.设置P0、P1、P2中指定引脚中断使能位为1
3.最后在寄存器PICTL中设置中断是上升沿或是下降沿触发
4.使能IEN0中EA位为1,开总中断
代码
#include "iocc2530.h"
#define D3 P1_0
#define D4 P1_1
#define SW1 P1_2
void GPIO_init(){
P1DIR |= 0X03;
D3 =0;
D4 =0;
}
void INT_init(){
IEN2 |= 0X10; //P1口的中断使能
P1IEN |=0X04; //开启P1_2的中断使能
PICTL |=0X02; //P1_2为下降沿触发
EA=1; //开启总中断
}
void main(){
GPIO_init();
INT_init();
while(1){
}
}
#pragma vector = P1INT_VECTOR
__interrupt void P1_INT(void){
if(P1IFG>0){
D3 = !D3;
D4 = !D4;
//注意一定先清位的中断标志位,在清组标志位
P1IFG = 0; //把中断状态标志位清0
P1IF = 0; //组中断标志位清0
}
while(SW1==0);
}