《如何利用单片机看门狗定时器使led闪烁.doc》由会员分享,可在线阅读,更多相关《如何利用单片机看门狗定时器使led闪烁.doc(3页珍藏版)》请在三一文库上搜索。
1、如何利用单片机看门狗定时器使led闪烁看门狗是为了防止程序跑飞而设定的,但是由于看门狗是一个类似于定时器,因此可以把他当作定时器来使用示例代码:用看门狗定时器使一个led闪烁#includevoid main( void )/ Stop watchdog timer to prevent TIme out resetWDTCTL = WDT_MDLY_32;/宏定义IE1 |=WDTIE; /允许看门狗定时器中断P2DIR |= BIT7;_BIS_SR(LPM0_bits+ WDT is clocked by fSMCLK (assumed 1MHz) */#define WDT_MDLY_
2、32 (WDTPW+WDTTMSEL+WDTCNTCL) /* 32ms interval (default) */#define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0) /* 8ms “ */#define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1) /* 0.5ms ” */#define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms “ */* WDT is clocked by fACLK (assumed
3、 32KHz) */#define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL) /* 1000ms ” */#define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms “ */#define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms ” */#define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /*
4、1.9ms “ */* Watchdog mode - reset after expired time */* WDT is clocked by fSMCLK (assumed 1MHz) */#define WDT_MRST_32 (WDTPW+WDTCNTCL) /* 32ms interval (default) */#define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTIS0) /* 8ms ” */#define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTIS1) /* 0.5ms “ */#define WDT_MRST_0_064
5、(WDTPW+WDTCNTCL+WDTIS1+WDTIS0) /* 0.064ms ” */* WDT is clocked by fACLK (assumed 32KHz) */#define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTSSEL) /* 1000ms “ */#define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0) /* 250ms ” */#define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1) /* 16ms “ */#define WDT_ARST_1_
6、9 (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms ” */这里我们可以根据通常的需要,选择合适的定时时间说到定时时间,这里又不得不讲一下中断函数,在IAR这个编译环境中,一般中断函数的写法是#pragma vector = 中断向量_interrupt void 中断函数名(void)用户程序;注意,中断向量可以在430的头文件中查找,中断函数的声明必须是void 中断函数名(void),这是因为中断函数没有返回值,也没有中断的形式参数但是本人又在网站上看到另外一种用switch来写的,就是一个中断源对应几个中断向量,这种写法目前我还没有见过源码,所以不好总结