Усиливием решение:
#include <mega8.h> //Включаем библиотеку для работы с микроконтроллером ATMega8
#include <delay.h> //Включаем библиотеку для организации задержек
void main(void)
{
char i1 = 1;
char i2 = 1;
char i2count = 0;
int i; // описание переменной "і" как целое число Int - (Integer)
PORTD=0x00; //Выставляем все выходы порта D на 0, то есть, выключаем весь порт D
DDRD=0xFF; //Делаем порт D, как выход, чтобы на выходах порта было напряжение 5В
while(1)
{
if (i1==1) // на первой миллисекунде включаем
PORTD.0=1; //Включаем светодиод на 0 выходе порта D.0
else if (i1==40) // на сороковой выключаем
PORTD.0=0; //Выключаем светодиод на 0 выходе порта D.0
else if (i1>=220) // на 220 миллисекунде (40+180) сбрасываем счётчик на ноль
i1 = 0;
else // в противном случае просто увеличиваем счётчик
i1++;
if (i2==1) // для первой светодиода на нулевой включаем
PORTD.1=1; //Включаем светодиод на 0 выходе порта D.1
else if (i2==40) // на сороковой выключаем
PORTD.1=0; //Выключаем светодиод на 0 выходе порта D.1
else if (i2>=140) // если больше 140 (40+100), то принимаем решение, нужно ли ещё мигать или делать паузу
{
if (i2count<4) // если было меньше 4 миганий, то просто мигаем ещё
{
i2 = 0; // сбрасываем счётчик миллисекунд
i2count++; // и увеличиваем счётчик миганий
} else
{ // если было уже 4 мигания, то счётчик не сбрасываем, а ожидаем ещё 400 мс
if (++i2 >= 540) // увеличиваем счётчик и если он стал больше 540 мс (40+100 с последнего мигания +400)
{
i2=0; // сбрасываем все счётчики, относящиеся ко второму диоду
i2count=0;
}
}
}
i1++; // увеличивам оба счётчика на 1 мс
i2++;
delay_ms(1); // задержка 1 мс для цикла
}
}
Теперь первый светодиод мигает адекватно, второй - 1 раз вместо четырех