Таймер1
Материал из Automata.
(Различия между версиями)
м (Новая: #include <stdint.h> #include <avr/io.h> #include <avr/interrupt.h> //обработчик прерывания от первого таймера; ISR (TIMER1_COMPA_vect)//по д...) |
м (Правки Kern (обсуждение) откачены к версии Mrsnaut) |
||
(2 промежуточные версии не показаны) | |||
Строка 28: | Строка 28: | ||
OCR1B = 15625; | OCR1B = 15625; | ||
//светодиод будет гореть каждые полсекунды; | //светодиод будет гореть каждые полсекунды; | ||
- | } | + | } |
Текущая версия
#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; //светодиод будет гореть каждые полсекунды; }