Прерывания по таймеру, что я делаю не так?
- Войдите на сайт для отправки комментариев
Втр, 20/03/2018 - 23:36
Есть код в интерпретации Си:
ISR(TIMER1_OVF_vect)
{
PORTB^=(1<<5);
TCNT1=61630;//Начальное значение таймера
}
int main(void)
{
DDRB|=(1<<PB5);
TCCR1B=B00001001;//Предделитель = 1024
TIMSK1=B00000001;//Разрешить прерывание по переполнению таймера 1
TCNT1=61630;//Начальное значение таймера
sei();//Разрешить прерывания
while(1)
{
}
}
И аналогичный ему код в интерпретации arduino:
void setup() {
// put your setup code here, to run once:
DDRB|=(1<<PB5);
TCCR1B=B00000101;//Предделитель = 1024
TIMSK1=B00000001;//Разрешить прерывание по переполнению таймера 1
TCNT1=61630;//Начальное значение таймера
sei();//Разрешить прерывания
}
void loop() {
}
ISR(TIMER1_OVF_vect)
{
PORTB^=(1<<5);
TCNT1=61630;//Начальное значение таймера
}
Так вот, код в интерпретации Си работает как положено, а аналогичный ему код ардуино нет, в чем причина?
Заранее прошу прощение за столь нубский вопрос, ответа на него к сожалению не смог найти.
открой даташит и настрой таймер полностью!
......
Поясняю, если в отказ пойдешь ;) ;) ;):
Ардуино настраивает все таймеры для генерации ШИМ. В Студии ты расчитываешь на "голый" контроллер, после ресета. И таймер там по дефолту.
В ардуино таймер1 настроен уже так:
Вот где собака зарыта была)
Я почему-то запамятовал что у ардуины таймера на шим настроены.
Спасибо))
Решилось все добавлением строчки