执行外部中断出现问题

2019-07-14 16:53发布

利用IO口的两个引脚作为外部中断信号的输入引脚进行外部中断判断,主程序中已进入低功耗LPM3状态,然后写外部中断程序,请问这有做的话可以实时检测中断信号并进入相应的中断程序吗???或者说应该把外部中断程序放在循环中呢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
dfasda
1楼-- · 2019-07-15 01:43
外部中断(或者说所有的中断)程序是独立于主程序的,不能写在循环程序里的。
wenminglang
2楼-- · 2019-07-15 03:55

#include "studio.h"

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

  
    P1DIR = 0x9F;                             
    P1OUT = 0x00;                              
    P2DIR = 0xFF;                           
    P2OUT = 0x00;                                
    P3DIR = 0xFF;                             
    P3OUT = 0x00;                                
    P4DIR = 0xFF;                             
    P4OUT = 0x00;                                
    P5DIR = 0xFF;                           
    P5OUT = 0x00;                                
    P6DIR = 0xFF;                             
    P6OUT = 0x00;                                

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

  
   
    //P1DIR|=BIT0;//MCU工作状态标志
   _EINT();
    __bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
   
    while(1)
   {
    //__bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
   }
}
#pragma vector =PORT1_VECTOR
__interrupt void P1_Interrupt(void)
{
    if((P1IFG&0X40)==BIT6)//判断TLV3691是否产生低电平中断信号
  {
    P1IFG&=~BIT6;//中断标志清除
   P2OUT&= ~(BIT7);//P2.0 LED等灭
   flag=0;
    //__bis_SR_register(LPM3_bits );     // Enter LPM3, enable interrupts
   }
else  if((P1IFG&0X20)==BIT5)//判断TLV3691是否产生高电平中断信号
  {
    P1IFG&=~BIT5;//中断标志清除
   //__bic_SR_register_on_exit(LPM3_bits);     // Clear LPM3 bits from 0(SR)
    P2OUT|=BIT7;//P2.0 LED灯亮
   flag=1;
   }
}
#pragma vector =TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
   if(flag==1)
   {
     P1OUT^=BIT1;
   }
   else if(flag==0)
   {
      P1OUT&=~(BIT1);
   }

}
joereil
3楼-- · 2019-07-15 09:24
 精彩回答 2  元偷偷看……
HengDu
4楼-- · 2019-07-15 11:50
中断可以唤醒低功耗。
wang21cj
5楼-- · 2019-07-15 12:15
外部中断程序放在循环中为什么呢?
lifei639156
6楼-- · 2019-07-15 12:18
中断信号并进入相应的中断程序

一周热门 更多>