_Pasha что вы подразумеваете под " программа очень кривая и страшная"?? Как она написанна, отредоктированна или что то в ней не потдаётся логике.
что значит обьявить volatile??
Код
volatile short cntr = 0;
volatile int a=0;
Видимо так.
Анатолий нащёт того чтобы обьявить cntr в SIGNAL(SIG_OVERFLOW0) точно я незнаю, но мы всегда её обьвляли до main(). Возможно и грамотнее но мы задаём ей значение в main() равное 28.
Возможно я неправильно выразился нащёт "SIG_INTERRUPT0". Дело в том что 2 борта соединяются и на них зашивается почти одна и таже программа, единственное отличие между программами это первое значение "а".
При запуске у обоих бортов зажигаются крассные лампочки. Тот борт у которого "а=0" зажигает лампочки в таком порядке : крассная-> крассно-желтая -> зелёная -> желтая -> крассная и сажает значение а=1 и останавливается, но в тот момент когда он останавливается(ботр) в SIG_INTERRUPT0 он посылает второму борту сигнал и тот сажает своё а=0 и проходит цепочку так же как и первый. Такая логика моего светофора.
Мне кажется что в программе неправильно написал принцип отправления а=0.
В моей версии avr-gcc ещё используется SIGNAL(), на других программах уже проверенно.
Вот принцеп соединения бортов, вроде правильно.
Эскизы прикрепленных изображений