外部中断小问题,小伙伴们看进来

2019-07-15 16:00发布

利用IO口的两个引脚作为外部中断信号的输入引脚进行外部中断判断,主程序中已进入低功耗LPM3状态,然后写外部中断程序,请问这有做的话可以实时检测中断信号并进入相应的中断程序吗???或者说应该把外部中断程序放在循环中呢!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
15条回答
心里美萝卜
2019-07-16 23:47
你好我利用IO口写了一个检测外部中断的程序,调试的时候却出了问题,能帮我看看哪里出问题了吗
  1. #include "msp430x24x.h"

  2. unsigned char flag;
  3. void main(void)
  4. {
  5.    WDTCTL = WDTPW + WDTHOLD;
  6.    
  7.    TACCTL0=CCIE;//开启定时器A中断
  8.    TACCR0=1000-1;
  9.    TACTL=TASSEL_1+ID_3+TACLR+MC_1;//选择ACLK作为时钟源,时钟八分频,定时器清除位

  10.   
  11.    P1DIR = 0x9F;                             
  12.    P1OUT = 0x00;                              
  13.    P2DIR = 0xFF;                           
  14.    P2OUT = 0x00;                                
  15.    P3DIR = 0xFF;                             
  16.    P3OUT = 0x00;                                
  17.    P4DIR = 0xFF;                             
  18.    P4OUT = 0x00;                                
  19.    P5DIR = 0xFF;                           
  20.    P5OUT = 0x00;                                
  21.    P6DIR = 0xFF;                             
  22.    P6OUT = 0x00;                                

  23.    /****P1.5中断触发********/
  24.    P1IES^=BIT5;//设置为上升沿触发
  25.    P1IFG&=~BIT5;//清除终端标志位
  26.    P1IE|=BIT5;//设置终端使能
  27.    /*****P1.6中断触发******/
  28.    P1DIR&=~BIT6;//中断引脚P1.6设置为输入端口
  29.    P1IES|=BIT6;//设置为下降沿触发
  30.    P1IFG&=~BIT6;//清除终端标志位
  31.    P1IE|=BIT6;//设置终端使能

  32.   
  33.    
  34.    //P1DIR|=BIT0;//MCU工作状态标志
  35.    _EINT();
  36.    __bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
  37.   
  38.    while(1)
  39.   {
  40.    //__bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
  41.   }
  42. }
  43. #pragma vector =PORT1_VECTOR
  44. __interrupt void P1_Interrupt(void)
  45. {
  46.    if((P1IFG&0X40)==BIT6)//判断TLV3691是否产生低电平中断信号
  47.   {
  48.    P1IFG&=~BIT6;//中断标志清除
  49.    P2OUT&= ~(BIT7);//P2.0 LED等灭
  50.    flag=0;
  51.    //__bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
  52.   }
  53. else  if((P1IFG&0X20)==BIT5)//判断TLV3691是否产生高电平中断信号
  54.   {
  55.    P1IFG&=~BIT5;//中断标志清除
  56.    //__bic_SR_register_on_exit(LPM3_bits);     // Clear LPM3 bits from 0(SR)
  57.    P2OUT|=BIT7;//P2.0 LED灯亮
  58.    flag=1;
  59.   }
  60. }
  61. #pragma vector =TIMERA0_VECTOR
  62. __interrupt void TIMER_A(void)
  63. {
  64.   if(flag==1)
  65.   {
  66.     P1OUT^=BIT1;
  67.   }
  68.   else if(flag==0)
  69.   {
  70.      P1OUT&=~(BIT1);
  71.   }

  72. }  
复制代码

一周热门 更多>