/*******************************************************************
Title: Пример мигания светодиодом с помощью таймера
Сopyright: myROBOT, http://myrobot.ru
Date: апрель 2011
Software: AVR-GCC (WinAVR)
Hardware: ATmega8, 1 MHz
Description:
Пример мигания светодиодом с помощью 8-разрядного таймера.
Светодиод подключается к выводу PB1.
*******************************************************************/
#define F_CPU 1000000UL // 1 MHz
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
SIGNAL(SIG_OVERFLOW0) // подпрограмма обработки прерывания по
// переполнению таймера
{
TCNT0=0x00; // сбрасываем счетный регистр таймера/счетчика T0
if (PINB & (1<<PINB1)) // переключаем светодиод на линии PB1
PORTB &= ~_BV(PB1);
else
PORTB |= _BV(PB1);
}
int main(void) // начало основой программы
{
DDRB = 0xff; // все выводы порта B сконфигурировать как выходы
PORTB = 0x00; // установить "0" на всех линиях порта B
TIMSK =0b00000001; // записываем 1 в бит TOIE0 регистра TIMSK
// устанавливаем флаг разрешения прерывания
// по переполнению таймера/счетчика T0
TCNT0=0x00; // сбрасываем счетный регистр таймера/счетчика T0
TCCR0=0b00000101; // устанавливаем предделитель CK,
// используя биты CS00, CS01, CS02
sei(); // разрешаем прерывания;
while (1) {} // бесконечный цикл
} // закрывающая скобка основной программы