Страница 1 из 1
CVAVR
Добавлено: Пн фев 20, 2012 11:31:28
igumich
не могу понять как осуществить:
нажал на кнопу-помигал 4 раза свд потом горит постоянно. А при отпускании кнопки в любой момент выполнения программы свд должен выключится
Диод-PORTB.0
кнопка-PORTC.4
Re: CVAVR
Добавлено: Пн фев 20, 2012 11:46:02
pyzhman
Код: Выделить всё
void wait(void)
{
for(k= 0; k<100; k++)
{
if(PINC.1) #asm("RJMP 0");
}
}
.
.
.
.
while(PINC.4);
for(i= 0; i<4; i++)
{
PORTB.0= 1;
wait();
PORTB.0= 0;
wait();
}
PORTB.0= 1;
while(!PINC.4);
#asm("RJMP 0");
Re: CVAVR
Добавлено: Пн фев 20, 2012 11:49:06
Flasher
1. Переименуй тему, а то ее закроют.
2. Ты даже не удосужился привести структуру программы.
3. в цикле :
Опрашивать кнопку.
Нажата и флаг нажатости сброшен? - да- пауза 10 мс- нажата еще? - поехали : включить светодиод. пауза, выключить. пауза. включить светодиод. пауза, выключить. пауза. включить светодиод. пауза, выключить. пауза. включить светодиод пауза, выключить. пауза включить светодиод. выставить флаг нажатости.
Отжата и флаг нажатости выставлен? - да- пауза 10 мс- отжата еще? - поехали : выключить светодиод, сбросить флаг нажатости.
Re: CVAVR
Добавлено: Пн фев 20, 2012 14:47:08
igumich
void wait(void)
{
for(k= 0; k<100; k++)
{
if(PINC.1) #asm("RJMP 0");
}
}
.
.
.
.
while(PINC.4);
for(i= 0; i<4; i++)
{
PORTB.0= 1;
wait();
PORTB.0= 0;
wait();
}
PORTB.0= 1;
while(!PINC.4);
#asm("RJMP 0");
а при чём тут PINC.1
Re: CVAVR
Добавлено: Пн фев 20, 2012 18:00:12
pyzhman
Опечатка.
Re: CVAVR
Добавлено: Пн фев 20, 2012 19:07:51
Flasher
pyzhman, вчитывался несколько раз в псевдокод. Думаете оно будет работать?
Re: CVAVR
Добавлено: Пн фев 20, 2012 19:34:52
pyzhman
А что строить догадки? Пуляем в CV и пробуем.
Re: CVAVR
Добавлено: Вт фев 21, 2012 04:52:35
igumich
не работает этот код.
Flasher, как должно быть?
Re: CVAVR
Добавлено: Вт фев 21, 2012 06:23:09
pyzhman

Как не работает? Как в смысле что делалось и как проверялось.
Re: CVAVR
Добавлено: Вт фев 21, 2012 11:25:20
Flasher
Кнопка подключена к PINC.4 и к GND
Код: Выделить всё
#define KEY PINC.4
#define LED PORTB.0
#define ON 1
#define OFF 0
void main(void)
{
unsigned char FlagKey=0;
DDRB|=(1<<0);
PORTB&=~(1<<0);
DDRC&=~(1<<4);
PORTC|=(1<<4);
if((!FlagKey)&&(!KEY))
{
delay_ms(10);
if (!KEY)
{
for (unsigned char i=0; i<3; i++)
{
LED=ON;
delay_ms(300U);
LED=OFF;
delay_ms(300U);
}
LED=ON;
FlagKey=1;
}
}
if((FlagKey)&&(KEY))
{
delay_ms(10);
if (KEY)
{
LED=OFF;
FlagKey=0;
}
|
}
Re: CVAVR
Добавлено: Вт фев 21, 2012 11:30:04
pyzhman
А как же
при отпускании кнопки в любой момент выполнения программы свд должен выключится
?
Re: CVAVR
Добавлено: Вт фев 21, 2012 12:59:07
Flasher
Мне еще вытесняющую RTOS написать?
Пусть автор сам заводит прерывания (на неизвестном чипе с неизвестной тактовой) и играется с системными таймерами и обработкой событий.
Явно, что это только фрагмент программы, и надо встраивать в другой код. Без знания структуры ничего не напишешь.
Да и не оговорены приоритеты миганий и выключения.
Re: CVAVR
Добавлено: Вт фев 21, 2012 13:32:12
pyzhman
Код: Выделить всё
{
for(k= 0; k<100; k++)
{
if(PINC.1) #asm("RJMP 0");
}
}
.
.
.
.
while(PINC.4);
for(i= 0; i<4; i++)
{
Явно, что это только фрагмент программы, и надо встраивать в другой код. Без знания структуры ничего не напишешь.
