Всем привет У меня тоже новый вопрос )) Поискал и на этом и на других форумах - четкого ответа не нашел. Вопрос по сторожевому таймеру следующий : Как заставить МК сбрасываться с помощью Watchdog ? тут два пути.
1) Пошел по датишу - разрешил MCUSCR=0b1000 прерывание по переполнению сторожевого таймера ,включаю стор. таймер и задаю временой интервал WDTCR=(1<<WDE) или 0b1000; Что соотв 15ms. Так ни че не заработало.
2) Прошиваю через WinAVR и воспользовался его встроенными функциями но тоже молчит.
Код для случая (2) следующий. На старте ПОРТ-А должен в 0 сброситься потом в 1 - далее ПРЕРЫВАНИЕ-СБРОС и так далее повторяется.
CODE:#include <avr/io.h>
#include <util/delay.h>
#include <avr/signal.h>
#include <avr/stdint.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#define wdt_enable(timeout);
#define wdt_reset() __asm__ __volatile__ ("wdr")
#define WDTO_150MS
void WDT_off(void)
{
/* Reset WDT */
wdt_reset();
/* Write logical one to WDCE and WDE */
WDTCR = (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
}
void main()
{
WDT_off();
wdt_enable(WDTO_150MS);
DDRA=0xff;
PORTA=0x00;
_delay_ms(20);
while(1)
{
PORTA=0xff;
_delay_ms(20);
}
}
(Добавление)
где:
CODE:#define wdt_enable(timeout); - РАЗРЕШЕНИЕ WDT
#define wdt_reset() __asm__ __volatile__ ("wdr") - СБРОС WDT
#define WDTO_150MS - ОПРЕДЕЛЕНИЕ ЗАДЕРЖКИ (Отредактировано автором: 21 Марта, 2010 - 14:42:36) |