[资料分享] MSP430F5529的P1P2口作中断功能寄存器配置

fish001   2017-8-24 22:25 楼主
P1、P2口作中断功能寄存器配置(涉及的x只能为1或者2)
1、PxIV,Px 口中断向量寄存器(仅低5位到低1位为有效位)
中断向量值  中断源              中断标志        中断优先级
00h         无中断
02h         Px.0口中断           PxIFG.0         最高
04h         Px.1口中断           PxIFG.1
06h         Px.2口中断           PxIFG.2
08h         Px.3口中断           PxIFG.3
0Ah         Px.4口中断           PxIFG.4
0Ch         Px.5口中断           PxIFG.5
0Eh         Px.6口中断           PxIFG.6
10h         Px.7口中断           PxIFG.7         最低
2、PxIES,Px口中断触发沿选择寄存器
0        上升沿PxIFGx标志位置位
1        下降沿PxIFGx标志位置位
3、PxIFG,Px口中断标志寄存器
0  无中断
       1  有中断
4、PxIE,Px 口中断使能寄存器
0  关闭相应端口中断
   1  使能相应端口中断
这里顺便提一下IO中断函数的写法:
#pragma vector=PORTx_VECTOR
__interrupt void 自定义中断函数名(void)
{
//中断服务函数
}
P1、P2口作中断功能使用举例
说明:在此例程中,先打开LED1,关闭LED2,每当检测到按键的下降沿便会进入中断,中断的服务程序是将LED1和LED2状态取反。其实,次程序存在误触发,如果知道要进行哪个IO口中断的话,在执行中断服务程序之前可以进行误触发检测(即延时并检测按键是否按下,不过,这个好像只适合下降触发触发)。
#include
void main()
{
      WDTCTL = WDTPW + WDTHOLD; // Stop WDT
     
      P8DIR |= BIT2 + BIT1;//设置P8.1、P8.2为输出
      P8OUT |=  BIT2;//P8.2为输出为1
      P8OUT &= ~BIT1;//P8.1为输出为0
      _EINT();            //开启总中断
      P1DIR &=~BIT7; //设置P1.7为输入
      P1OUT |= BIT7; //上拉,有时候不上拉可以,有时候不可以,所以最好上拉
      P1REN |= BIT7; //设为输入时必须加上此寄存器配置
      P1IE  |= BIT7; //打开P1.7口中断
      P1IES &=~BIT7; //触发方式为下降沿
      P1IFG &=~BIT7; //清中断标志位
     
      LPM3;//进入低功耗3
}
#pragma vector = PORT1_VECTOR
__interrupt void Port1(void)
{
      P8OUT ^= BIT2 + BIT1;//P8.1、P8.2为输出取反
      P1IFG &=~BIT7;  //清中断标志位
}

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复