MSP430的P1和P2端口每个引脚都具有中断功能,有PxSEL选择引脚功能,引脚功能没有包括中断能力。 只有设置PxIE、PxIES、PxIFG这三个标志位才是对引脚中断能力配置。 如:配置PxIES然后允许中断PxIE:设置为上升下降沿都触发中断。当信号跳变的时候,PxIFG对应位被自 动置一,应该注意的是:PXIFG.0~PXIFG.7共用一个中断向量,为多源中断。当任一事件引起的中断进行 处理时,PXIFG.0~PXIFG.7不会自动复位,必须由软件来判断是对哪一个事件,并将相应的标志复 位。另外,外部中断事件的时间必须保持不低于1.5倍的MCLK时间,以保证中断请求被接受,且使 相应中断标志位置位。 /******************************************************************************* * 文件名称:P10_Interrupt.c * 描 述:工作在LPM3低功耗模式,外部按键P10触发中断 * P40LED取反(=1亮),外部按键直接接地。 * 编译环境:IAR MSP430 V5.3 * 创建时间:2013-3-23 14:59:29 * 当前版本:V1.0 * 编 写 人: * 公 司: *******************************************************************************/ #include<msp430f247.h> /******************************************************************************* * 函数名称:void main(void) * 功能描述:外部按键P10触发中断,P40LED取反(=1亮) * 参 数:无 * 返 回 值:无 * 备 注:PxREN是设置上拉或者下拉的使能寄存器, * 置一使能,使能后,通过PxOUT设置上拉还是下拉 *******************************************************************************/ void main(void) { WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 //点亮LED灯 P4OUT |= BIT0; P4DIR |= BIT0; //按键中断设置 P1REN |= BIT0; //设置上拉/下拉使能 =0不使能 P1OUT |= BIT0; //设置带上拉电阻 P1DIR &= ~BIT0; //中断引脚应该设置为输入 P1IES |= BIT0; //设置为下降沿触发 =0上升沿触发 P1IFG &= ~BIT0; //因为P1IES设置会使中断标志位置位,故清零 P1IE |= BIT0; //设置中断使能 _EINT(); //打开总中断 LPM3; //设置为LPM3低功耗模式,产生中断时自动激活 //为活动模式,如果在中断中没有修改低功耗模 //式,中断程序执行完成后,又进入LPM3模式 while(1); } /******************************************************************************* * 函数名称:__interrupt void P1_Interrupt(void) * 功能描述:进入中断函数,P40LED取反(=1亮) * 参 数:无 * 返 回 值:无 * 备 注:无 *******************************************************************************/ #pragma vector = PORT1_VECTOR __interrupt void P1_Interrupt(void) { if((P1IFG&0x01) == BIT0)//判断是不是按键P10产生的中断 //因为P1端口共用这个中断向量表 { P1IFG &= ~BIT0; //中断标志清楚(注意) P4OUT ^= BIT0; //LED取反 } else { P1IFG &= ~BIT0; //非P10的中断处理 } }
|
|
来自: 自学电子馆 > 《MSP430单片机》