Текст задачи:
Светодиоды с нечетными номерами включаются по очереди, создавая эффект
бегущих огней справа налево. После нажатия на кнопку SW6 эффект бегущих огней
создается четными светодиодами. После нажатия на кнопку SW5 снова
используются нечетные светодиоды. Для изменения режимов управления
светодиодами ипользовать прерывания INT1 (кнопка SW6) и INT2 (кнопка SW5).
Мой текст программы:
CODE
#define F_CPU 3686400UL
#include <avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>
unsigned char r, d,a;
ISR (INT1_vect)
{
d=0;
}
ISR (INT2_vect)
{
d=1;
}
int main (void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
PINE = 0xFF;
GICR=0b10100000;
MCUCR=0b00001010;
sei();
while (1)
{
if (d == 1)
r = 0b00000010;
else
r = 0b00000001;
while(r!=0)
{
PORTB = r^0xFF;
if (d == 1)
{
r <<= 2;
}
else
{
r <<= 2;
}
//_delay_ms(1000);
{
if(!(PINE&(1<<1)))
d=0;
r >>= 1;
}
{
if(!(PINE&(1<<0)))
d=1;
r <<=1;
}
}
}
}
#include <avr/io.h>
#include<util/delay.h>
#include <avr/interrupt.h>
unsigned char r, d,a;
ISR (INT1_vect)
{
d=0;
}
ISR (INT2_vect)
{
d=1;
}
int main (void)
{
DDRB = 0xFF;
PORTB = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
PINE = 0xFF;
GICR=0b10100000;
MCUCR=0b00001010;
sei();
while (1)
{
if (d == 1)
r = 0b00000010;
else
r = 0b00000001;
while(r!=0)
{
PORTB = r^0xFF;
if (d == 1)
{
r <<= 2;
}
else
{
r <<= 2;
}
//_delay_ms(1000);
{
if(!(PINE&(1<<1)))
d=0;
r >>= 1;
}
{
if(!(PINE&(1<<0)))
d=1;
r <<=1;
}
}
}
}
Я как понимаю , мои прерывания висят в воздухе , не могли бы помочь сделать так , что бы прерывание происходило при нажатии этих кнопок?