最近在学习MSP430F5529的时候(那块白板子),刚好学了IO中断和看门狗定时器,想结合起来。也就是在IO服务中断程序中加上对于看门狗定时器的控制,但是发现按下按键触发IO中断的时候,程序正常,小灯定时闪烁;但是再次按下时,定时器理应关闭,但是小灯却仍在闪烁,希望各位能指出我的问题,谢谢。
#include "MSP430F5529.h"
unsigned int num;
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗定时器
P1DIR |= 0x3F;
P1DIR &= ~0x80;
P1IES |= 0x80;
P1IE |= 0x80;
P1OUT |= 0x80;
P1REN |= 0x80;
_EINT();
while(1);
}
#pragma vector = PORT1_VECTOR //IO中断服务程序
__interrupt void PORT1_ISR( void )
{
num++;
if( num%2 )
{
WDTCTL = WDT_ADLY_1000; //定时器模式,定时1S
SFRIE1 |= WDTIE;
P1OUT ^= 0x01;
P1IFG &= ~0x80;
}
else
{
WDTCTL = WDTPW + WDTHOLD;
SFRIE1 &= ~WDTIE;
}
if(num>20)
num=0;
}
#pragma vector = WDT_VECTOR //定时器模式 服务程序
__interrupt void WDT_ISR( void )
{
P1OUT ^= 0x3e;
SFRIFG1 &= ~WDTIFG;
}