#include #include "timer.h" /* * timer.c * * Created: 13.04.2023 14:13:50 * Author: mrnek */ static unsigned long millis = 0; void setup_timer() { TCCR1B |= (1 << WGM12); // настраиваем режим CTC (Clear Timer on Compare Match) OCR1A = 250; // задаем значение, при котором будет срабатывать прерывание (в данном случае 15999, так как Atmega328p работает на частоте 16 МГц и нужно получить прерывание раз в 1 мс) TIMSK1 |= (1 << OCIE1A); // включаем прерывание по совпадению со значением регистра OCR1A sei(); // разрешаем глобальные прерывания TCCR1B |= (1 << CS11) | (1 << CS10); // запускаем таймер с предделителем 64 (16000000/64=250000) } unsigned long get_millis() { return millis; } ISR(TIMER1_COMPA_vect) { ++millis; }