Схему собирал такую: только mega8

Собирался реализовать простенький алгоритм описанный тут: http://roboforum.ru/post168731.html#p168731
Но увы....
Выкладываю видео того, что получилось:
Итак если по вызову прерывания подпрограмма определяет, что порт д3 равен 1 то мигаем одной лампочкой, если равен 0 то мигаем другой лампочкой. Но, как видно на видео, при вращении в одну сторону всё верно, а при обратном направлении сначала мигает "нужная" лампочка а потом первая, которая не должна загораться. У кого какие идеи, где я ошибаюсь?
казалось бы, что может быть проще считывать импульсы.....
вот код, прошитый в контроллер:
- Код: Выделить всё • Развернуть
 #include <mega8.h>
 #include <delay.h>
 #define F_CPU 8000000UL
 // External Interrupt 0 service routine
 interrupt [EXT_INT0] void ext_int0_isr(void)
 {
 
 if (PIND.3==0){ PORTC.3=1; delay_ms(100); PORTC.3=0; delay_ms(200); #asm("cli") } /* если по вызову прерывания опредяем, что PINd.3 то выключаем прерывания.
 
 else if (PIND.3==1)
 { PORTC.4=1; delay_ms(100); PORTC.4=0; }
 
 }
 void main(void)
 {
 delay_ms(500);
 SREG=1;
 PORTC=0x00; // выход на светодиоды
 DDRC=0xFF;
 
 DDRD=0xC0; // вход, это ж прерывание
 GICR=0x40; // включаю прерывания 0
 MCUCR=0x02; // по спадающему фронту
 GIFR=0xC0;
 ACSR=0x80;
 // Global enable interrupts
 #asm("sei")
 // PORTC=0x08 ;
 PORTD.2=1; // включаю подтяжки
 PORTD.3=1;
 PORTD.6=1;
 while (1)
 {
 // Place your code here
 if (PORTD.6==1) {PORTD.6=0; PORTD.7=1; delay_ms(500); } else
 if (PORTD.7==1) {PORTD.7=0; PORTD.6=1; delay_ms(500); }
 };
 }




