CVAVR

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
igumich
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб ноя 06, 2010 19:17:02
Откуда: Россия, Омск

CVAVR

Сообщение igumich »

не могу понять как осуществить:
нажал на кнопу-помигал 4 раза свд потом горит постоянно. А при отпускании кнопки в любой момент выполнения программы свд должен выключится

Диод-PORTB.0
кнопка-PORTC.4
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение 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");
Docendo discimus
Реклама
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: CVAVR

Сообщение Flasher »

1. Переименуй тему, а то ее закроют.
2. Ты даже не удосужился привести структуру программы.
3. в цикле :
Опрашивать кнопку.
Нажата и флаг нажатости сброшен? - да- пауза 10 мс- нажата еще? - поехали : включить светодиод. пауза, выключить. пауза. включить светодиод. пауза, выключить. пауза. включить светодиод. пауза, выключить. пауза. включить светодиод пауза, выключить. пауза включить светодиод. выставить флаг нажатости.

Отжата и флаг нажатости выставлен? - да- пауза 10 мс- отжата еще? - поехали : выключить светодиод, сбросить флаг нажатости.
igumich
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб ноя 06, 2010 19:17:02
Откуда: Россия, Омск

Re: CVAVR

Сообщение 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
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение pyzhman »

Опечатка.
Docendo discimus
Реклама
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: CVAVR

Сообщение Flasher »

pyzhman, вчитывался несколько раз в псевдокод. Думаете оно будет работать?
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение pyzhman »

А что строить догадки? Пуляем в CV и пробуем.
Docendo discimus
igumich
Встал на лапы
Сообщения: 100
Зарегистрирован: Сб ноя 06, 2010 19:17:02
Откуда: Россия, Омск

Re: CVAVR

Сообщение igumich »

не работает этот код.

Flasher, как должно быть?
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение pyzhman »

:) Как не работает? Как в смысле что делалось и как проверялось.
Docendo discimus
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: CVAVR

Сообщение 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;
        }
    |

}
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение pyzhman »

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

delay_ms(300U);
А как же
при отпускании кнопки в любой момент выполнения программы свд должен выключится
?
Docendo discimus
Аватара пользователя
Flasher
Мудрый кот
Сообщения: 1802
Зарегистрирован: Ср сен 07, 2011 21:40:30

Re: CVAVR

Сообщение Flasher »

Мне еще вытесняющую RTOS написать?
Пусть автор сам заводит прерывания (на неизвестном чипе с неизвестной тактовой) и играется с системными таймерами и обработкой событий.

Явно, что это только фрагмент программы, и надо встраивать в другой код. Без знания структуры ничего не напишешь.
Да и не оговорены приоритеты миганий и выключения.
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Re: CVAVR

Сообщение pyzhman »

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

{
for(k= 0; k<100; k++)
    {
     if(PINC.1) #asm("RJMP 0");
    }
}
.
.
.
.

while(PINC.4);

for(i= 0; i<4; i++)
    {
Явно, что это только фрагмент программы, и надо встраивать в другой код. Без знания структуры ничего не напишешь.
:)
Docendo discimus
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»