Вопрос по Watchdog
- Войдите на сайт для отправки комментариев
Ср, 05/07/2017 - 00:35
Добрый вечер!
Прошу подсказать, что-то никак не могу разобраться в сторожевом таймере на атмега8.
Вроде как прерывания срабатывают, но как только включаю тестовый таймер - всё бесполезно...
Вот код
#define F_CPU 8000000UL //8MHz
#include <avr/io.h>
#include <avr/wdt.h>
void detected();
void pult();
void edem();
void vniz(int x);
void vverh(int x);
int etazh=1;
int main(void)
{
//wdt_enable(WDTO_30MS); //-альтернативный вариант включения...
WDTCR |= (1<<WDCE) | (1<<WDE);
WDTCR = (1<<WDE) | (1<<WDP2) | (1<<WDP1)|(1<<WDP0) |(0<<WDCE);
DDRB=0xFF; //Порт B на вывод
DDRC=0x00; //Порт С на ввод
DDRD=0x00; //Порт D на ввод
while (1)
{
//--------------------ТЕСТОВОЕ ЗАВИСАНИЕ----------------------
if((PINC&(1<<1))!=0)
{
while(1){}
}
//------------------------------------------------------------
// detected(); //определение позиции на этажах
//pult(); // Определение нажатой кнопки
asm("wdr");
//wdt_reset(); - как альтернатива
}
}
* "тестовое зависание", простите за ошибку
Блин, сам нашел причину.
Надо было в цикле включать заново WatchDog.
Всем спасибо за ответы!