Код: Выделить всё
//модель мегии
#include <mega2313.h>
//частота кристала
#define _hz 4000000
//
//----------
interrupt(SIG_OVERFLOW1) // тут обрабатываем прерывание от таймера
{
//
TCNT1 = 0x10000 - (_hz/1024); // 65536(число переполнения таймера так как он 16бит) - частоту разделив на 1024 получаем 3906 - это насчитает таймер за секунду
PORTB ^= 0x01; //1 - т.е. в регистре у нас 00000001 и на ноге РСВ0 у нас напряжение
//
}
//----------
int main(void)
{
//
DDRB = 0x01; //направление передачи , в регистре 00000001, т.е. нога РСВ0 эявляется выходом
//для мазохизма пользуем сложный таймер Т/С1 в котором есть регистры сравнений
TCCR1A =0; // TCCR1A - заносим в регистр 0, отключаем ШИМ
TCCR1B = 5; // TCCR1B - ставим 5 или 101 (в регисьре значащие 3 разряда 0-2) тем самым устанавливая частоту тактирования таймера системная/10254 это 3906 тактов в секунду при частоте 4000000
TCN1 = 0x10000 - (_hz/1024); // ложим в регистр 61630 что б сработало на следующую секунду после запуска
TIFR = 0; //сбрасываем флаги прерываний
TIMSK = 0x80; // пишем в регистр 10000000 , разрешаем прерывание Т/С1
GIMSK = 0; // запрещаем внешние прерывания
sei(); //прерывания разрешены
while(1); //ждём прерывания таймера (сидим в бесконечном цыкле)
//
}


