Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » последовательность выполнение команд

Страниц (1): [1]
 

1. central30 - 22 Октября, 2012 - 21:39:42 - перейти к сообщению
Собираю пульт для выполнение команд с выводом на LCD.В чем собственно вопрос,или как бы сказать просьба о помощи.Значит к выводам порта ATMEGA8 подключены 6 кнопок,тоесть 3 пары пуск и стоп.Пишу на си CVAVR,кнопки программно подключены без всяких прерываний,нажал на первую кнопку старт,выполнил команду,нажал на второю стоп,остановил команду.Как мне программно написать условие последовательности выполнение команд,ну как бы сказать,нужно сделать запрет на нажатие других кнопок,чтоб ничего не выполнялось,пока не выполнится к примеру первая команда пуск-стоп
2. cjA - 26 Октября, 2012 - 21:11:22 - перейти к сообщению
дать каждой кнопке две переменных (вижу скорость и размер кода пока не важны)
Вру!
не так: если нажата кнопка - переменная "вход запрещен" скидывется. Пока не будет разрешен- никто больше кнопки обрабатывать не будет.

(а еще можно зациклить их внутри функции обработки каждой кнопки, пока второй раз не нажмется- из функции не выйдет)
Только лучьше на прерывания, на порт В, стобы с дребезгом не парится.
3. Роботов - 26 Октября, 2012 - 21:38:06 - перейти к сообщению
согласен с cjA. на прерываниях лучше. хотя и в циклах тоже можно. дребезг не страшен, в цикл вошел, и все, до лампочки дребезг. вышел из цикла, можно жать следующую кнопку.
4. central30 - 26 Октября, 2012 - 22:58:47 - перейти к сообщению
у меня условия примерно такие
CODE:

if(PINC.0==0)
{
PORTD.1=1;
//ПОТОМ ЗДЕСЬ ИНФА ВЫВОДА НА LCD
}
if(PINC.1==0)
{
PORTD.1=0;
//так же инфа на LCD
}


примерно вот так я разложил это все.тоесть первая команда пуск-стоп,пока мы не выполним стоп одной команды,другие команды выполнятся не должны,вот только туплю. значит по вашим словам надо условие сделать бесконечным типа while() ?
5. cjA - 26 Октября, 2012 - 23:57:38 - перейти к сообщению
я знаю Си только по тому как читаю чужие программы, вот Вашу например
Тут нет цикла, может вместо второго Иф
while (PINC.1 <> 0)
{}
PORTD.1=0; return 0; //или какой там в Си оператор выводит из цикла?
(Добавление)
( к тому же Вы и не на Си пишете, не может идентификатор в Си начинаться с цифры...)
6. microsmaster - 24 Января, 2013 - 23:45:58 - перейти к сообщению
Если прерывания не используете, то как код не напиши - пока выполнятся обработка одного нажатия, на остальные программа реагировать не будет.

CODE:
//в функции main
....
while(1){
if (PINC & PC0){
func1();
}

if (PINC & PC1){
func2();
}
}
7. juliarobert - 13 Февраля, 2013 - 09:45:22 - перейти к сообщению
Занимљив податак. Свиђа ми се ваше теме. Хвала за то дељење ................. смех Подшучивать, дразнить Помираю со смеху Тащусь не в себе не в себе