TI中文支持网
TI专业的中文技术问题搜集分享网站

关于msp430f149外部中断

用单片机接收TCRT的5000光电开关模块的信号控制继电器开闭
程序我做了一个,但是就是中断触发不了,开关直接接继电器是能工作的。
#include <msp430x14x.h>
void Init_Port1(void);
void main(void)
{   
    WDTCTL=WDTPW+WDTHOLD;                 //关闭看门狗
    TACTL |= TASSEL_2 + ID_3;         Init_Port1();                      //初始化
        _EINT();                             //开启中断允许
        while (1)                            //无限循环
        {
                LPM3;                        //进入低功耗模式3。I/O口中断唤醒  
               
        }
}
#pragma vector=PORT1_VECTOR                 //中断函数     
__interrupt void Port_1()
{               
        
        if(P1IN==0x00)
                {
                     P3OUT=0x04;                  //继电器输入端输入低电平
                }
                else
                {
                    P3OUT=0x03;
                }     
                                  
        P1IFG=0;                            //清除P1IFG
}
        void Init_Port1(void)                    //初始化函数
{
                                       P1DIR&=~BIT0;                       //P1.0设置为输入方向
        P1SEL&=~BIT0;
        P1IE|=BIT0;                         //打开中断允许
        P1IES=BIT0;                         //选择下沿触发
        P1IFG&=~BIT0;                       //清除P1IFG
        P3DIR=BIT1+;                       //P3.0~P3.2设置为输出方向
        P3OUT=0x03;                     /*P3.0、P3.1输出高电平,
                                              P3.2输出低电平*/
}

Shi JianHua:

进入中断的第一件事情就是清中断标志位。你的程序不是。还有就是好好看看你的初始化程序。

yffy:

判定那个端口中断

if( ( P1IFG & BIT0) == BIT0 ) { P1IFG &= ~BIT0; //清除中断标志  }

Xutong Han2:

if(P1IN==0x00) 是读取P1引脚的状态而不是中断入口的判断。在中断服务子程序中 应该判断是哪一个中断if(P1IFG&BIT5)//判断P1中断标志 { P1IFG=0;//清除中断标志…..}  注意在退出中断前一定要人工清除中断标志,否则该中断会不停被执行!还要注意在中断中要延迟20ms左右避开毛刺后再做处理。

Shi JianHua:

回复 Xutong Han2:

应该能解决问题了

赞(0)
未经允许不得转载:TI中文支持网 » 关于msp430f149外部中断
分享到: 更多 (0)