(Оба кода работают как надо)
Вариант 1:
Спойлер
Код: Выделить всё
#include <avr/io.h> //Подключаем библиотеку AVR
#include <avr/iotn2313.h> //Подключаем библиотеку ATtiny2313
#include <avr/interrupt.h> //Подключаем библиотеку прерываний
#define F_CPU 1000000UL
#include <util/delay.h>
//Глобальные переменные сюда:
volatile unsigned char reg=0; //Переменная reg - режим
//Обработка прерывания по спаду напряжения на INT0
ISR(INT0_vect)
{
_delay_ms(10);
reg++; //при нажатии на кнопку Увеличиваем значение переменной reg на 1
if (reg==4) reg=0; //Если досчитали до 4, то reg=0
}
void INTinit()
{
GIMSK=(1<<6); //Разрешаем прерывание INT0
MCUCR=(1<<0)|(1<<1); //Прерывыание по ниспадающему форонту (с 1 на 0); ISC01=1, ISC00=1
}
int main (void)
{
DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7); //Порт В на ВЫХод
PORTD=(1<<2); //Порт PD2 Подтягивающий резистор ВКлючен
INTinit(); // вызываем функцию инициализации прерываний
sei(); //Глобальное разрешение прерываний
while (1)
{
switch(reg)
{
case 1:
PORTB=(1<<0);
break;
case 2:
PORTB=(1<<1);
break;
case 3:
PORTB=(1<<2);
break;
default:
PORTB=0;
}
};
}Спойлер
Код: Выделить всё
#include <avr/io.h> //Подключаем библиотеку AVR
#include <avr/iotn2313.h> //Подключаем библиотеку ATtiny2313
#include <avr/interrupt.h> //Подключаем библиотеку прерываний
#define F_CPU 1000000UL
#include <util/delay.h>
//Глобальные переменные сюда:
volatile unsigned char reg=0; //Переменная reg - режим
//Обработка прерывания по спаду напряжения на INT0
ISR(INT0_vect)
{
_delay_ms(10);
reg++; //при нажатии на кнопку Увеличиваем значение переменной reg на 1
if (reg==4) reg=0; //Если досчитали до 4, то reg=0
}
int main (void)
{
DDRB=(1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<6)|(1<<7); //Порт В на ВЫХод
PORTD=(1<<2); //Порт PD2 Подтягивающий резистор ВКлючен
GIMSK=(1<<6); //Разрешаем прерывание INT0
MCUCR=(1<<0)|(1<<1); //Прерывыание по ниспадающему форонту (с 1 на 0); ISC01=1, ISC00=1
sei(); //Глобальное разрешение прерываний
while (1)
{
switch(reg)
{
case 1:
PORTB=(1<<0);
break;
case 2:
PORTB=(1<<1);
break;
case 3:
PORTB=(1<<2);
break;
default:
PORTB=0;
}
};
}



