Прерывания по таймеру, что я делаю не так?
- Войдите на сайт для отправки комментариев
Втр, 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 настроен уже так:
Вот где собака зарыта была)
Я почему-то запамятовал что у ардуины таймера на шим настроены.
Спасибо))
Решилось все добавлением строчки