STM32/STM8技术william hill官网
直播中

王鑫

7年用户 1151经验值
私信 关注
[问答]

执行外部中断出现问题

利用IO口的两个引脚作为外部中断信号的输入引脚进行外部中断判断,主程序中已进入低功耗LPM3状态,然后写外部中断程序,请问这有做的话可以实时检测中断信号并进入相应的中断程序吗???或者说应该把外部中断程序放在循环中呢

回帖(10)

李刚

2018-10-16 11:30:09
要用外部中断,必须在有标明外部中断的引脚设置才行
举报

李桂兰

2018-10-16 11:30:33
外部中断(或者说所有的中断)程序是独立于主程序的,不能写在循环程序里的。
举报

陈杰

2018-10-16 11:31:01

#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);
   }

}
举报

杨静

2018-10-16 11:31:16
用上拉电阻的方法,给低电平灯亮。。
举报

杨帆

2018-10-16 11:31:29
中断可以唤醒低功耗。
举报

张娟

2018-10-16 11:32:15
外部中断程序放在循环中为什么呢?
举报

李波

2018-10-16 11:32:31
中断信号并进入相应的中断程序
举报

刘静

2018-10-16 11:32:47
考虑到效率需要使用外部中断
举报

张秀兰

2018-10-16 11:33:21
配置中断要放前面的,低功耗进入放最后。
举报

林先生

2018-10-22 16:51:31
只要进入低功耗时,不关闭此中断,那么中断功能还是能实现的。再说了,外部中断功能也不耗多少电。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分