Страница 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

Код: Выделить всё

delay_ms(300U);
А как же
при отпускании кнопки в любой момент выполнения программы свд должен выключится
?

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++)
    {
Явно, что это только фрагмент программы, и надо встраивать в другой код. Без знания структуры ничего не напишешь.
:)