mim писал(а):Ильнур писал(а):подскажи хоть последовательность дейсвий
Почему хоть??? В этой теме и в ссылках которые я тебе дал все описано очень подробно, нужно просто их прочесть. Описано как включить, какими командами, когда сбросить, когда отключить и как. Ты продолжаешь угадывать и задаешь вопросы на которые слово в слово есть ответы. Я так и не увидел от тебя того что, прошу я, - найди те фразы которые отвечают на твои вопросы.
Ты сказал что бы я внимательно посмотрел в ДШ,там все есть,и в самом деле там был код на асм включения WDT,и он совпадал один в один с примером на меге 644 за исключением регистра WDTCSR. Я переправил на WDTCR как указанно в даташите.Сделал запись в сишную вставку
void WDT_Prescaler_Change(void). В настройках добавочного кода вбил вот это,все как в даташите .
void WDT_Prescaler_Change(void)
{
cli();//__disable_interrupt();
asm ("wdr"); //__watchdog_reset();
/* Start timed sequence */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Set new prescaler(time-out) value = 64K cycles (~0.5 s) */
WDTCR = (1<<WDE) | (1<<WDP2) | (1<<WDP0);
sei(); //__enable_interrupt();
}
Все компилится,но без вставки сброса в рес все равно не уходит.Вроде бы все один в один как в даташите.Тогда я как в примере вбил в сишную вставку
void WDT_off(void);
Как я понял это выключение WDT ,правда не понял зачем.
В добавочный код добавил
void WDT_off(void)
{
cli();//__disable_interrupt();
asm ("wdr"); //__watchdog_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
sei(); //__enable_interrupt();
}
Протеус ни как не отреагировал.Еще я читал что Протеус не дружит с WDT.
В общем тяжко это с тем учетом что я это впервые в жизни с этим сталкиваюсь.Мим ты скажи вообще я в правильную сторону копаю? Или мне забыть все что я сделал и идти в другом направлении.