Спасибо! Ща попробую, обязательно отпишусьДобавлено (13.05.2009, 22:22)
---------------------------------------------
Впринципе работает. Но это несовсем то что я хотел, наверное я неправильно обьяснил проблему. Дело в том что вместо
if (i==1)
{
///// comand 1
}
у меня
if (i==1)
{
PORTB.0=0;PORTB.1=0;PORTB.2=0;PORTB.3=0;PORTB.4=0;delay_ms(300);
for(a=10;a>0;a--){PORTB.4=~PORTB.4;delay_ms(50);}
PORTB.4=1;
for(a=10;a>0;a--){PORTB.3=~PORTB.3;delay_ms(50);}
PORTB.3=1;
for(a=10;a>0;a--){PORTB.2=~PORTB.2;delay_ms(50);}
PORTB.2=1;
for(a=10;a>0;a--){PORTB.1=~PORTB.1;delay_ms(50);}
PORTB.1=1;
for(a=10;a>0;a--){PORTB.0=~PORTB.0;delay_ms(50);}
PORTB.0=1;
delay_ms(300);
}
По вашему примеру, уважаемый Админ, нажатие кнопки теряется когда програма выполняет этот цикл, правда если в каждом
for(a=10;a>0;a--){PORTB.Х=~PORTB.Х;delay_ms(50);} поставить проверку нажатой кнопки и при нажатии выходить по метке на проверку счетчика тогда работает.
Хотелось чтобы счетчик увиличивался по прерыванию от кнопки, к примеру
interrupt [PCINT0] void pin_change_isr(void)
{
// Place your code here
if(PIND.3==0)
{
if(count<2)
count++;
else count=0;
}
}
Впринцепе он так и делает, но после того как счетчик увеличен выполнение програмы возвращается к тому месту где произошло прирывание, и только по его завершению выполняется проверка счетчика и происходит соотвецтвуючий выбор подпрограмы.
Можноли сделать так чтобы после прерывания выполнение програмы начиналось с проверки счетчика а не доделывать алгоритм в котором было прерывание. Надеюсь я правильно обьяснил свою проблему. Зарание спасибо.