
ATtiny13
下面的代码例子分别用汇编和C实现了关闭Watch-
狗定时器。在此假定中断处于用户控制(例如,通过禁用中断
全局)以便将发生这些功能的执行过程中没有中断。
汇编代码例程
(1)
WDT_OFF :
;关闭全局中断
CLI
;复位看门狗定时器
WDR
;在MCUSR清除WDRF
in
ANDI
OUT
R16 , MCUSR
R16 , (为0xFF - ( 1<<WDRF ) )
MCUSR , R16
;写逻辑1 WDCE和WDE
;保持旧预分频器设置,以防止意外超时
in
ORI
OUT
LDI
OUT
SEI
RET
R16 , WDTCR
R16 , ( 1<<WDCE ) | ( 1<<WDE )
WDTCR , R16
R16 , ( 0<<WDE )
WDTCR , R16
;关闭WDT
;打开全局中断
C代码示例
(1)
无效WDT_OFF (无效)
{
__disable_interrupt ();
__watchdog_reset ();
/ *清除WDRF在MCUSR * /
MCUSR & = ( 1<<WDRF ) ;
/ *写逻辑1 WDCE和WDE * /
/ *保持旧预分频器设置,以防止意外超时
*/
WDTCR | = ( 1<<WDCE ) | ( 1<<WDE ) ;
/ *关闭WDT * /
WDTCR = 0×00 ;
__enable_interrupt ();
}
注意:
1.本代码假定的头文件包含。
如果看门狗被意外激活,例如通过一个失控的指针或掉电条件
化,该装置将复位,看门狗定时器将保持启用状态。如果代码不成立
处理看门狗,这可能会导致超时复位的死循环。为了避免这种情况situa-
39
2535I–AVR–05/08