[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » форумы » Общие вопросы по электронике » Прерывание по таймеру/счётчику
Прерывание по таймеру/счётчику
wapomДата: Вторник, 10.12.2013, 14:39 | Сообщение # 1
Группа: Пользователи
Сообщений: 2

Статус: Offline
Ребят, прошу вашей помощи. Сам не могу допереть.
Работаю в AtmelStudio 6.1
Код под atmega16
Код
#define F_CPU 16000000

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

ISR(TIMER0_OVF_vect){
    PORTB &= ~(1 << PINB4);
    _delay_ms(50);
}

int main(void)
{
    TIMSK = (1 << TOIE0);
  TCCR0 = (1 << CS00);
    asm("sei");
     
     while(1)
     {
         PORTB = (1 << PINB4);
     }
}

Дело в том, что если симулировать в самой студии, то при переполнении счётчика по идее должно сработать прерывание, но этого не происходит, флаг TOV0 устанавливается. Если файл программы попробовать симулировать в Proteus 7.7 то прерывание срабатывает, но из него не выходит, то есть зацикливается на нём.

Прошу помощи и сильно не пинать smile
Прикрепления: GccApplication1.hex (0.5 Kb)


 
exersizzeДата: Четверг, 12.12.2013, 14:17 | Сообщение # 2
Группа: Администраторы
Сообщений: 723

Статус: Offline
я в си не особо рублю, но while(1)  разве не бесконечный цикл?

 
wapomДата: Четверг, 12.12.2013, 17:28 | Сообщение # 3
Группа: Пользователи
Сообщений: 2

Статус: Offline
Да, верно, это бесконечный цикл, но при переполнении счётчика - программа должна прерваться и после выполнения кода вернуться обратно в цикл

 
Форум » форумы » Общие вопросы по электронике » Прерывание по таймеру/счётчику
  • Страница 1 из 1
  • 1
Поиск: