Возникла проблема: пишу прогу симулятор светофора (учусь мигать светодиодами) и возникла такая проблема
оператор switch не входит в тело функции, точнее проходит только ее 1е значение (1й case) и выходит из нее
Вот код
Код: Выделить всё
#include <mega16.h>
unsigned int n;
unsigned int sec;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x06;
n++;
if(n==4)
{
sec++;
n==0;
}
}
void main(void)
{
DDRB=0xFF;
PORTB=0xFF;
TCCR0=0x05;
TCNT0=0x06;
OCR0=0x00;
TIMSK=0x01;
#asm("sei")
while (1)
{
switch (sec)
case 1: PORTB=00011110; //зажигаем красный
case 30: PORTB=00011101; //зажигаем желтый
case 35: PORTB=00011101; //тушим красный
case 40: PORTB=00011011; //тушим желтый, зажигаем зеленый
case 70: PORTB=00011111; //тушим зеленый
case 75: PORTB=00011011; //зажигаем зеленый
case 80: PORTB=00011111; //тушим зеленый
case 85: PORTB=00011011; //зажигаем зеленый
case 90: PORTB=00011101; //тушим зеленый, зажигаем желтый
case 95: PORTB=00011110; //зажигаем красный
}
}- 8Мгц кристал
- таймер Т/С0 с частотой 7813 Гц (системный такт/1024)
- таймер начинает тикать со значения 6 (TCNT0=0x06;), т.е. по 250 мс и инкрементируем переменную n до 4х раз (n==4) и получаем секунду (переменная sec)
- далее главная функция и алгоритм
Вот тут то вся веселуха и начинается ....
Оператор switch "заходит" только на case 1: PORTB=00011110;
и весело с него вылетает

Что токлько не было перепробовано ничего не смог получить, гугл как и поиск по этому форуму - молчит как партизан выдавая только уроки по С++ и C#.
Прошу помочь с моим говнокодом)) и обьяснить мне почемуже не пашет этот СВИТЧ
PS возможно напорол чтото с таймером оО
Заранее всем спасибо !



