Таймер1
Материал из Automata.
(Различия между версиями)
м (Полностью удалено содержимое страницы) |
|||
Строка 1: | Строка 1: | ||
- | #include <stdint.h> | ||
- | #include <avr/io.h> | ||
- | #include <avr/interrupt.h> | ||
- | //обработчик прерывания от первого таймера; | ||
- | ISR (TIMER1_COMPA_vect)//по достижении счета числа, записанного в OCR1A; | ||
- | { | ||
- | PORTB &= 0xfe;//включаем светодиод на плате контроллера; | ||
- | } | ||
- | |||
- | //обработчик прерывания от первого таймера; | ||
- | ISR (TIMER1_COMPB_vect)//по достижении счета числа, записанного в OCR1B; | ||
- | { | ||
- | PORTB |= 0x01;//выключаем светодиод на плате контроллера; | ||
- | } | ||
- | |||
- | //главная функция; | ||
- | int main (void) | ||
- | { | ||
- | DDRB = 0xff;//порт В настраиваем на выход; | ||
- | PORTB = 0x01;//отправляем на выводы логический "0", кроме PB0; | ||
- | SREG = 0x80;//глобальное разрешение прерываний; | ||
- | TCCR1B = _BV(WGM12) | _BV(CS12);//настраиваем таймер в режим CTC - "сброс при совпадении", | ||
- | //задаем предделитель в 256; | ||
- | TIMSK = _BV(OCIE1A) | _BV(OCIE1B);//разрешаем прерывания от первого таймера при совпадении значения | ||
- | //в его счетном регистре TCNT1 со значением в регистрах OCR1A или OCR1B; | ||
- | OCR1A = 31250; | ||
- | OCR1B = 15625; | ||
- | //светодиод будет гореть каждые полсекунды; | ||
- | } |