Страница 1 из 1
Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 09:52:16
DDimka
Всем привет. Подскажите пожалуйста почему при переходе от while(i==1) к while(i==2) на PORTB.2 так и остаётся лог.1 и цикл прокручивается до конца а не сразу переходит. пишу в CodeVisionAVR
while (i==1)
{ if(m==3){PORTB.2=1;}
else{PORTB.2=0;}
break;
};
while (i==2)
{
if(s==6){PORTB.3=1;}
else{PORTB.3=0;}
break;
};
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 10:02:58
alex38779
Желательно бы глянуть весь код программы.
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 10:12:18
DDimka
alex38779 писал(а):Желательно бы глянуть весь код программы.
int i = 0;
int m = 0;
int s = 0;
interrupt [PC_INT0] void pin_change_isr(void)
{
if(!PINB.0){i++;}
if(i==5){i=0;}
if(!PINB.1){i--;}
if(i==0){i=0;}
}
interrupt [EXT_INT0] void ext_int0_isr(void)
{
}
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
m++;
if(m>3){m=0;}
s++;
if(s>6){s=0;}
TCNT0=0x00;
}
void main(void)
{
#pragma optsize-
CLKPR=0x80;
CLKPR=0x05;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
PORTB=0x03;
DDRB=0x3C;
TCCR0A=0x00;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x92;
OCR0B=0x00;
GIMSK=0x60;
MCUCR=0x00;
PCMSK=0x03;
GIFR=0x60;
TIMSK0=0x04;
#asm("sei")
while (1){
while (i==1)
{ if(m==3){PORTB.2=1;}
else{PORTB.2=0;}
break;
};
while (i==2)
{
if(s==6){PORTB.3=1;}
else{PORTB.3=0;}
break;
};
};
как то так
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 11:12:26
ARV
если бы вы хотя бы структурно форматировали свой код, то поняли бы, в чем проблема... может, так станет понятнее:
Код: Выделить всё
while (i==1) {
if(m==3){
PORTB.2=1;
} else {
PORTB.2=0;
}
break;
}
while (i==2) {
if(s==6){
PORTB.3=1;
} else {
PORTB.3=0;
}
break;
}
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 17:06:38
DDimka
[quote="ARV"]если бы вы хотя бы структурно форматировали свой код, то поняли бы, в чем проблема... может, так станет понятнее:
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 18:20:49
ARV
разве вы не видите, что while у вас оба не работают? благодаря break внутри каждого они оба выполняются не до тех пор, пока верно условие, а пролетают только 1 раз?
Добавлено after 1 minute 4 seconds:
кроме того у вас в самом первом сообщении написаны одни условия, а потом в "коде" совсем другие - где-то явно лажа закралась.
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 19:47:19
DDimka
ARV писал(а):разве вы не видите, что while у вас оба не работают? благодаря break внутри каждого они оба выполняются не до тех пор, пока верно условие, а пролетают только 1 раз?
Добавлено after 1 minute 4 seconds:
кроме того у вас в самом первом сообщении написаны одни условия, а потом в "коде" совсем другие - где-то явно лажа закралась.
почему не работают? в протеусе работает, только только криво, цикл до конца крутится. Крутяться постоянно пока не выйдешь из условия, что в первом сообщении что в коде условия одинаковы, пните в нужное направление как надо сделать, я только начинаю изучать мк, суть в том что по нажатию кнопки(внешнее прерывание) выполняем какое то действие раз в 3 секунды, при повторном нажатии уже раз в 6 секунд
Re: Не выключается PORTB при переходе от while k while
Добавлено: Пт окт 07, 2016 21:18:22
mas123
DDimka писал(а):почему не работают? в протеусе работает, только только криво
Так "работает" или же "криво"?
Или вообще не работает - и остаётся лог. "1"?
DDimka писал(а):цикл до конца крутится.
Оператор "break" осуществляет выход из цикла "while".
DDimka писал(а):нажатию кнопки(внешнее прерывание)
Имей в виду, вот такой обработчик прерывания от кнопки - работать не будет! Ибо дребезг контактов кнопки!
DDimka писал(а):как надо сделать
В данном случае, имхо, было бы полезно переменные "i", "m" и "s" объявить как "volatile"