Доброго бремени суток!
Вот уже неделю как пытаюсь разобраться с простыми вещами на микроконтроллере, получилось следующее:
1. Смог повторить светофор на АТмега16. Ну собственно здесь замарочился - захотел добавить кнопку, по которой светофор включается... Проблема в том, что хотелось бы закончить работу светофора при отжатии кнопки... Так вот такая функция не работает, если таймер delay_ms запустился на каком либо шаге...
Код программки здесь
Помогите с вопросиком - как прерывать/возвращать программу в шаг 1 при отжатии кнопки PB0, тоесть завершать таймер автоматически или другим способом - .
За ранее благодарен.
Сори за тупой вопрос
Раздел: Песочница или Вопрос-Ответ
Вот уже неделю как пытаюсь разобраться с простыми вещами на микроконтроллере, получилось следующее:
1. Смог повторить светофор на АТмега16. Ну собственно здесь замарочился - захотел добавить кнопку, по которой светофор включается... Проблема в том, что хотелось бы закончить работу светофора при отжатии кнопки... Так вот такая функция не работает, если таймер delay_ms запустился на каком либо шаге...
Код программки здесь
#include <mega16.h>
#include <delay.h>
#include <io.h>
// Declare your global variables here
#define F_CPU 1000000UL;
void main(void)
{
PORTD=0x00;
DDRD=0x07;
PORTB=0x00;
PORTB.0=0b00000000;
DDRB=0xAA;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
while (1)
{
STEP1:
if ((PINB.0 == 1) ) // Если кнопка нажата...
{
while( (PINB.0 == 1) ) {
PORTD.2=0;
PORTD.0=1;
if (PINB.0==0)
{goto STEP1;}
if (PINB.0==1)
{delay_ms(10000);}
PORTD.0=0;
if(PINB.0==0)
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=0;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=0;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.0=0;
PORTD.1=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(3000);}
PORTD.1=0;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.1=1;
PORTD.2=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.1=0;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(3000);}
PORTD.2=0;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.2=1;
if ((PINB.0==0) )
{goto STEP1;}
if (PINB.0==1)
{delay_ms(1000);}
PORTD.2=0;
}}
else
PORTD.0=0;
PORTD.1=0;
PORTD.2=0;
}
}
Помогите с вопросиком - как прерывать/возвращать программу в шаг 1 при отжатии кнопки PB0, тоесть завершать таймер автоматически или другим способом - .
За ранее благодарен.
Сори за тупой вопрос
Раздел: Песочница или Вопрос-Ответ