/*
 * begogni.cpp
 *
 *
 * Author : autoielec.ru
 * licence (CC BY)
 */ 

#define F_CPU 8000000UL    // Работаем от внутреннего генератора 8МГц.
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> 
#define Z 50
#define V 150

volatile int clik;
volatile int m;
volatile int r;

ISR (INT0_vect) // Устанавливаем вектор прерывания INT0.
{
	clik++;
	if (clik==3) clik=0;
	_delay_ms(Z);
}

int main(void)
{
	//Настройка портов ввода вывода******************************************************************
	
	DDRB = 0b11111111;   // Настраиваем порт B на выход.
	DDRD &= ~(1 << 2);   // Настраиваем ножку порта PD2 на вход
	
	
	//Настройка портов ввода вывода*****************************************************************

	//Настройка прерывания**************************************************************************
	
	MCUCR = (0<<ISC01) | (0<<ISC00);   //Если низкий уровень INT0 генерируем запрос прерывания.
	GICR |= (1<<INT0);                 // Разрешаем работать прерыванию.
	GIFR = (1<<INTF0);
	asm("sei");                        // Разрешаем глобальное прерывание.

	//Настройка прерывания***************************************************************************
	
	
	while (1)
	{
		if (clik==0)
		{
			PORTB = 0x00;
		}
		
		if (clik==1)
		{
		    for(r=0;r<=7;r++)     //******************************
		{                         //    Первая программа         *
			PORTB = (1<<r);       //                             *
			_delay_ms(V);         //******************************
		}	
		}
		
		if (clik==2)
		{
			 for(m=7;m>=0;m--)    //******************************
		{                         //    Вторая программа         *
			PORTB = (1<<m);       //                             *
			_delay_ms(V);         //******************************
		}
		}
		
		
			
		
		
	}
}