/*
 * main.c
 *асинхронный режим, получаем 1 герц от кварца 32768
 *  Created on: 24 июля 2015 г.
 *      Author: Admin
 */


#include <avr/io.h>                  // Библиотека ввода-вывода
#include <avr/interrupt.h>           // Прерывания


// Частота на которой работает контроллер
#define F_CPU 16000000UL
#define K     16000UL


ISR (TIMER0_COMP_vect)             // Вектор прерывания 
{
	if (PINA & (1<<0))                // Если нулеовй пин порта А в высоком состоянии- лог 1
			{
			PORTA &=~ (1<<0);  //      пин переключаем в лог- 0
			}
	else                     //      иначе
		PORTA |= (1<<0);  //           пин в лог- 1

}


int main (void)
{
	/* Установка порта на выход, нулевой  пин */
    DDRA |= (1<<0);
	/*Установка порта на выход с нолем, нулевой пин*/
    PORTA |= (0<<0);

    asm ("cli");    //  Запрещаем глобально прерывания

    ASSR |= (1<<AS2);    // Разрешаем тактирование Т0 от кварца 32768 (асинхронный режим)  AS0 - это третий бит
    while (ASSR != (0b00001000))   // Ожидаем разрешения записи (проверяем биты- 0,1,2), если они сброшены- можно писать данные!
    {
    	asm ("nop");
    }

    TCCR2 |= (1<<CS21) | (1<<CS22) | (1<<WGM21);  // Тактирование 32768/ предделитель 256 = 128. Сброс по совпадению.
    OCR2 = 127; // Совпадение с частотой 1 Гц
    TIMSK |= (1<<OCIE2); //  Разрешаем прерывание по совпадению T0
    TIFR = 0;  // Сбрасываем флаги 


   void delay_ms(unsigned int ms)
   {
      unsigned int i;              /* переменная для количества милисекунд*/
      unsigned long int j;         /* переменная для одной милисекунды*/
      for (i=0; i<ms; i++)         /* считаем количество милисекунд*/
      {
         for (j=0; j<F_CPU/K; j++) /* считаем одну милисекунду*/
   	  asm("nop");
      }
   }



  asm ("sei");                  // Разрешаем глобально прерывания
   while (1)                      // Бесконечный цикл
   {
 	   asm ("nop");                    // Ничего не делаем, ждем пока сработает прерывание.
   }

}
