Страница 42 из 115
Добавлено: Сб апр 11, 2009 20:50:43
SeregaT
Пухич писал(а):Я ж там привел код из своего РАБОТАЮЩЕГО проекта. По-моему там все понятно.
Он C учит, а не ассемблер

Добавлено: Сб апр 11, 2009 21:23:58
Пухич
SeregaT писал(а):Пухич писал(а):Я ж там привел код из своего РАБОТАЮЩЕГО проекта. По-моему там все понятно.
Он C учит, а не ассемблер

Тогда чуть выше можно прочитать описание работы. Все станет ясно.

Добавлено: Сб апр 11, 2009 21:33:02
Arlleex
вот например код:
if (PINB.0)
{
delay_ms(50); //
while (PINB.0)
{некоторый код}
}
...
мы должны нажать кнопку с быстротой в 50 или более миллисекунд, что бы сработал некоторый код?
Добавлено: Сб апр 11, 2009 22:40:49
Пухич
Этот код делает такое: как только нажали кнопку он ждет 50 мс, а затем код выполняется до тех пор, пока нажата кнопка. Вы этого хотели?
Добавлено: Сб апр 11, 2009 22:42:26
ikarab
Stalker46 писал(а):мы должны нажать кнопку с быстротой в 50 или более миллисекунд, что бы сработал некоторый код?
А вы справа от кода напишите комментари
КОТОРЫЕ ОБЯЗАТЕЛЬНЫ ДЛЯ УЧЕНИКА и все прояснится наверняка.
Добавлено: Сб апр 11, 2009 22:43:16
Arlleex
net...
что то не понял я про дребезг...
Добавлено: Сб апр 11, 2009 23:00:50
Пухич
Stalker46 писал(а):net...
что то не понял я про дребезг...
А что конкретно не ясно?
Добавлено: Сб апр 11, 2009 23:02:58
Arlleex
ну я же сделал так же как и SeregaT!
Добавлено: Сб апр 11, 2009 23:05:58
Пухич
Stalker46 писал(а):ну я же сделал так же как и SeregaT!
А вот не совсем так. Найдите как минимум одно отличие.

Добавлено: Вс апр 12, 2009 01:10:51
Arlleex
переменная i. кстати - грамматическая ошибка: после операторов ; не ставиться...
Добавлено: Вс апр 12, 2009 07:52:49
SeregaT
Stalker46
Я думаю Вам надо так:
if (PINB.0) // Проверяем наличие лог 1. (Если нужен лог 0, пишем: if (!PINB.0);)
{
delay_ms (20); // Пауза (антидребезг)
if (PINB.0) // Проверяем, нажата ли кнопка
{
некоторый код; // Исполняемый при нажатии кнопки код
while (PINB.0); // Ждём, когда кнопка будет отпущена
}
}
Добавлено: Вс апр 12, 2009 10:05:48
ikarab
SeregaT писал(а):if (PINB.0) // Ждём лог 1.
Есть небольшая страничка на руском языке - называется "
язык Си для микроконтроллеров" - советую неспеша, думая прочитать от начала и до конца.
http://radiokot.ru/forum/viewtopic.php?p=197255#197255
Многое прояснится.
Добавлено: Вс апр 12, 2009 12:11:28
ikarab
SeregaT писал(а):А что я опять не так написал?
То, что в цитате я указал.
SeregaT писал(а):я не нашёл по приведённой ссылке этой книги "язык Си для микроконтроллеров"...
Как можно найти книгу где сказано НЕБОЛЬШАЯ
СТРАНИЧКА ? Вы когда нибудт начнете читать ВНИМАТЕЛЬНО и понимать написаное по-русски ???

Добавлено: Вс апр 12, 2009 12:15:52
SeregaT
ikarab
Тот код, который я написал,работает нормально.
Я не пойму, на что Вы намекаете? Нужно было использовать еще и
else ? Можно-же сказать прямо, что не так...
Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"? Но от этого код не станет работать по другому

Добавлено: Вс апр 12, 2009 12:17:45
Arlleex
вот как правильно:
If (PINA.0==1) {
delay_ms(50);
If (PINA.0==1) {
// код, который должен выполняться при нажатии кнопки
}
}
Добавлено: Вс апр 12, 2009 12:21:56
SeregaT
Stalker46
А если кнопку вовремя не отпустить, то этот код выполнится еще раз (а может и не раз, зависит от длительности выполнения дальнейшего кода).
Добавлено: Вс апр 12, 2009 12:54:52
ikarab
SeregaT писал(а):Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"?
А по цитате этого не видно ?
if - не ждет , он проверяет и идет дальше.
SeregaT писал(а): Но от этого код не станет работать по другому

Дак напишите другой - который будет работаь. который ЖДЕТ. там же написан в "язык Си для микроконтроллеров".
Добавлено: Вс апр 12, 2009 13:06:58
SeregaT
ikarab
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после
if (PINB.0);. Это просто в комментариях я имел ввиду то, что именно эта строчка ждёт лог 1, чтобы выполнить нижеследующий код.
Дак напишите другой - который будет работаь. который ЖДЕТ. там же написан в "язык Си для микроконтроллеров".
А этот код написан в конце (моего кода)

И он работает...
Добавлено: Вс апр 12, 2009 13:22:32
ikarab
SeregaT писал(а):ikarab
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после if (PINB.0);. Это просто в комментариях я имел ввиду то
дак вы не "имейте ввиду" - выж не для телепатов постите - а пишите - ПРОВЕРЯЕТ бит
Добавлено: Вс апр 12, 2009 17:26:12
megasvintus
Можно сделать так:
unsigned char flag1;
unsigned char flag2;
if ((PINB.0==0)&&(flag2==1)) { //1 если нажали кнопку и это первое срабатывание, то:
delay_us(200); //ждем 200 МКс, подавляем дребезг
if ( PINB.0==0) {flag1=1;}; если это была не случайная помеха, и все еще держат кнопку- ставим флаг срабатывания кнопки
<Как-то реагируем на нажатие кнопки>
flag2=0; //изменили значение флага, чтобы пока держим кнопку, снова не зайти в этот цикл и не выполнить повторно действие
}//1
Таким образом МК делает остальную программу раз за разом, не трятя такты на ожидание, пока вы отпустите кнопку, а лишь раз за круг проверяет не отпустили ли вы ее. Это первый шаг к "многозадачности" вашей программки
//Теперь ждем отпускания кнопки
if ((PINB.0==1)&&(flag2==0)&&(flag1==1)) {flag2=1; flag1=0;} // Если отреагировали на нажатие кнопки и ее уже отпустили, то снова ставим флаг- кнопка свободна