您的位置 首页 新品

怎么复位ATmega128单片机的看门狗定时器

如何复位ATmega128单片机的看门狗定时器-看门狗定时器由独立的1 Mhz 片内振荡器驱动。这是VCC= 5V 时的典型值。请参见特性数据以了解其他VCC电平下的典型值。

一、ATMEGA128数据手册

看门狗定时器

看门狗定时器由独立的1 Mhz 片内振荡器驱动。这是VCC= 5V 时的典型值。请拜见特性数据以了解其他VCC电平下的典型值。经过设置看门狗定时器的预分频器能够调理看门狗复位的时刻距离,如P53 Table 22所示。看门狗复位指令WDR用来复位看门狗定时器。此外,制止看门狗定时器或产生复位时定时器也被复位。复位时刻有8 个选项。假如没有及时复位定时器,一旦时刻超越复位周期,ATmega128就复位,并履行复位向量指向的程序。详细的看门狗复位时序在P50有阐明。

为了避免无意之间制止看门狗定时器或改动了复位时刻,依据熔丝位M103C 和 WDTON 芯片供给了3 个不同的维护等级,如Table 21. 所示。安全等级0 相应于ATmega103 的 设置。使能看门狗定时器则没有约束。请参阅P 54“ 改动看门狗定时器装备的时刻序列”。

怎么复位ATmega128单片机的看门狗定时器

看门狗定时器操控寄存器- WDTCR

怎么复位ATmega128单片机的看门狗定时器

? Bits 7..5 – Res: 保存

保存位,读操作返回值为零。

? Bit 4 – WDCE: 看门狗修正使能

清零WDE 时有必要先置位WDCE,不然不能制止看门狗。一旦置位,硬件将在紧接的4 个 时钟周期之后将其清零。请参阅有关WDE 的阐明来制止看门狗。作业于安全等级1 和2 时也有必要置位WDCE 以修正预分频器的数据,如P 54 “ 改动看门狗定时器装备的时刻序列” 所示。

? Bit 3 – WDE: 看门狗使能

WDE为“1“时,看门狗使能,不然看门狗将被制止。只要在WDCE为”1“时WDE才干清零。以下为封闭看门狗的过程:

1. 在同一个指令内对WDCE 和WDE 写“1“,即便WDE 现已为”1“。

2. 在紧接的4 个时钟周期之内对WDE 写“0”。

作业于安全等级2 时是永久无法制止看门狗定时器的。拜见 P 54 “ 改动看门狗定时器装备的时刻序列” 。

? Bits 2..0 – WDP2, WDP1, WDP0: 看门狗定时器预分频器2, 1, 和0

WDP2、WDP1 和WDP0 决议看门狗定时器的预分频器,如Table 22 所示。

怎么复位ATmega128单片机的看门狗定时器

下面的比方别离用汇编和C 完成了封闭WDT 的操作。在此假定中止处于用户操控之下 (比方制止大局中止) ,因而在履行下面程序时中止不会产生。

汇编代码例程WDT_off:

; 置位 WDCE 和 WDE

ldir16, (1《outWDTCR, r16

; 封闭WDT

ldir16, (0《outWDTCR, r16

ret

C 代码例程

voidWDT_off(void)

{

WDTCR = (1《

WDTCR = 0x00;

}

看门狗初始化程序

C 代码例程

voidWDT_Init(void)

{

_WDR();//reset watchdog TImer

WDTCR |= (1《WDTCR = 0x0F;//enable watchdog TImer andset TImeout value 1.9 sencond

}

改动看门狗定时器装备的时刻序列

改动装备的序列依据不同的安全等级略有不同。下面将逐个阐明。

安全等级0

这个形式与ATmega103 的看门狗操作相兼容。看门狗的初始状况是制止的,能够没有约束地经过置位WDE 来使能它,以及改动定时器溢出周期。制止看门狗定时器时则需求遵 守有关WDE 的阐明。

安全等级1

在这个形式下,看门狗定时器的初始状况是制止的,能够没有约束地经过置位WDE 来使能它(例如:WDTCR|= (1《1. 在同一个指令内对WDCE 和WDE 写”1“,即便WDE 现已为“1“。

2. 在紧接的4 个时钟周期之内一起对WDE 写”0”,以及为WDP 写入适宜的数据,而WDCE 则写“0”。

安全等级2

在这个形式下,看门狗定时器总是使能的, WDE 的读返回值为”1”。 改动定时器溢出周期需求履行一个特定的时刻序列:

1. 在同一个指令内对WDCE和WDE写“1“。尽管WDE总是为置位状况,也有必要写”1“以发动时序。

2. 在紧接的4 个时钟周期之内一起对WDCE 写“0”,以及为WDP 写入适宜的数据。WDE 的数值能够恣意。

二、看门狗AVR-GCC例程

头文件:#include ,包括看门狗复位指令 _WDR();

avr-libc 供给三个API 支撑对器材内部Watchdog 的操作,它们别离是:

wdt_reset() // Watchdog 复位

wdt_enable(TImeout) // Watchdog 使能

wdt_disable() // Watchdog 制止

调用上述函数前要包括头文件 wdt.h ,wdt.h 中还界说Watchdog 定时器超时符号常量,它们用于为wdt_enable 函数供给timeout 值。符号常量别离如下:

符号常量值含义

WDTO_15MS Watchdog定时器15 毫秒超时

WDTO_30MS Watchdog定时器30 毫秒超时

WDTO_60MS Watchdog定时器60 毫秒超时

WDTO_120MS Watchdog定时器120 毫秒超时

WDTO_250MS Watchdog定时器250 毫秒超时

WDTO_500MS Watchdog定时器500 毫秒超时

WDTO_1S Watchdog定时器1 秒超时

WDTO_2S Watchdog定时器2 秒超时

Watchdog 测验程序:

在CA-M8 上履行此程序时应翻开S1-8(LEDY),使黄色发光管衔接PB0 引脚。

#include

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define SET_LED PORTB&=0XFE //PB0 接黄色发光管

#define CLR_LED PORTB|=0X01

//差错不会太大的延时1ms 函数

void DelayMs(uint ms)

{

uint i;

for(i=0;i

_delay_loop_2(4 *250);

}

int main(void)

{

DDRB=_BV(PB0);

PORTB=_BV(PB0); //CLR_LED

//WDT 计数器同期为一秒

wdt_enable(WDTO_1S);

wdt_reset();//喂狗

DelayMs(500);

SET_LED;

//等候饿死狗

DelayMs(5000);

SET_LED;

while(1)

wdt_reset();

}

履行成果:

CA-M8 上的黄色发光管不断的闪耀,证明了Watchdog 使MCU 不断的复位。

三、注意事项

假如循环体内每循环一次的时刻不超越看门狗的复位时刻,首要喂狗一次就能够,不然需求屡次喂狗。
责任编辑;zl

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/343610.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部