#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分频
|