#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define CW -1
#define CCW 1
volatile int arah =0;
ISR(INT2_vect)
{
arah = CW;
}
ISR(INT1_vect)
{
arah = CCW;
}
int main (void)
{
DDRA=0xff;
PORTA = 0x00;
DDRB |=(1<<PB7);// LED output enable
PORTD |=_BV(PD2); // pin PD.0 input pullup
PORTD |=_BV(PD1); // pin PD.1 input pullup
EIMSK |= (1<<INT2) | _BV(INT1); // enable interrupt
EICRA |= _BV(ISC21)|_BV(ISC20)|_BV(ISC10)|_BV(ISC11); //rising edge activate INT0
sei();
while(1)
{
if (arah==CCW)
{
for(int i=0;i<=7;i++)
{
PORTA = ~(1<<i);
_delay_ms(500);
}
}
else if (arah==CW)
{
for(int i=7;i>=0;i--)
{
PORTA = ~(1<<i);
_delay_ms(500);
}
}
else if (arah==0)
{
PORTA=0xFF;
}
}
}