用单片机接收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:
应该能解决问题了