#include <msp430F2001.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar second,minute,hour,day,flagtime,flag,flag1; //秒、分、时变量
void Clock(uchar aa,uchar bb,uchar cc,uchar dd); //设置定时时间(天,时,分,秒)
/****************主函数****************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P1DIR |= BIT5;
P1OUT&= ~BIT5;
P1IE|=BIT6;
P1IFG=0x00;
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 4095; //定时1S
TACTL = TASSEL_1 + MC_1+ID_3; // ACLK, upmode,8分频
_EINT();
while(1)
{
_BIS_SR(LPM3_bits);
if(flag==1)
{
P1OUT|= BIT5;
P1IE&= ~BIT6;
flag=0;
}
}
}
#pragma vector=PORT1_VECTOR //采用IO口中断
__interrupt void P1_ISR(void)
{
uint i;
if(P1IFG&BIT6)
{
for(i=0;i<1000;i++){};
flag=1;
}
P1IFG=0x00;
LPM3_EXIT;
return;
}
硬件:我现在做MSP430的外部震动。一振动开关一边接3.3V电源,一边接一个电阻到P1.6。P1.5外围控制一个一个LED,当作中断信号灯。
软件:如果P1.6检测到上升沿脉冲后进入外部中断服务程序。在外部中断程序里给P1.5一个高电平,然后P1.5的灯会亮。但是我在住程序里面自从加了下面三句,发现能检测到触发,灯也是能亮,但是停止震动后他就灭了。
我原本的意思是想检测到一次震动后,关闭外中断使能,然后定时器A开始计时,到一定时间再再次开启外中断。求解!!!!
CCTL0 = CCIE; // CCR0 interrupt enabled
CCR0 = 4095; //定时1S
TACTL = TASSEL_1 + MC_1+ID_3; // ACLK, upmode,8分频
|