Он C учит, а не ассемблерПухич писал(а):Я ж там привел код из своего РАБОТАЮЩЕГО проекта. По-моему там все понятно.
С чего начать программировать микроконтроллеры?
- Реклама
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
А вы справа от кода напишите комментари КОТОРЫЕ ОБЯЗАТЕЛЬНЫ ДЛЯ УЧЕНИКА и все прояснится наверняка.Stalker46 писал(а):мы должны нажать кнопку с быстротой в 50 или более миллисекунд, что бы сработал некоторый код?
- Реклама
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
- Сообщения: 4673
- Зарегистрирован: Вс июн 01, 2008 00:17:35
- Откуда: Я всего лишь плод вашего воображения...
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
Stalker46
Я думаю Вам надо так:
if (PINB.0) // Проверяем наличие лог 1. (Если нужен лог 0, пишем: if (!PINB.0);)
{
delay_ms (20); // Пауза (антидребезг)
if (PINB.0) // Проверяем, нажата ли кнопка
{
некоторый код; // Исполняемый при нажатии кнопки код
while (PINB.0); // Ждём, когда кнопка будет отпущена
}
}
Я думаю Вам надо так:
if (PINB.0) // Проверяем наличие лог 1. (Если нужен лог 0, пишем: if (!PINB.0);)
{
delay_ms (20); // Пауза (антидребезг)
if (PINB.0) // Проверяем, нажата ли кнопка
{
некоторый код; // Исполняемый при нажатии кнопки код
while (PINB.0); // Ждём, когда кнопка будет отпущена
}
}
Последний раз редактировалось SeregaT Вс апр 12, 2009 13:25:15, всего редактировалось 1 раз.
- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
Есть небольшая страничка на руском языке - называется "язык Си для микроконтроллеров" - советую неспеша, думая прочитать от начала и до конца.SeregaT писал(а): if (PINB.0) // Ждём лог 1.
http://radiokot.ru/forum/viewtopic.php?p=197255#197255
Многое прояснится.
- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
То, что в цитате я указал.SeregaT писал(а):А что я опять не так написал?
Как можно найти книгу где сказано НЕБОЛЬШАЯ СТРАНИЧКА ? Вы когда нибудт начнете читать ВНИМАТЕЛЬНО и понимать написаное по-русски ???SeregaT писал(а):я не нашёл по приведённой ссылке этой книги "язык Си для микроконтроллеров"...

ikarab
Тот код, который я написал,работает нормально.
Я не пойму, на что Вы намекаете? Нужно было использовать еще и else ? Можно-же сказать прямо, что не так...
Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"? Но от этого код не станет работать по другому
Тот код, который я написал,работает нормально.
Я не пойму, на что Вы намекаете? Нужно было использовать еще и else ? Можно-же сказать прямо, что не так...
Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"? Но от этого код не станет работать по другому
Последний раз редактировалось SeregaT Вс апр 12, 2009 12:49:16, всего редактировалось 3 раза.
- Сообщения: 4435
- Зарегистрирован: Сб мар 07, 2009 20:44:36
Stalker46
А если кнопку вовремя не отпустить, то этот код выполнится еще раз (а может и не раз, зависит от длительности выполнения дальнейшего кода).
А если кнопку вовремя не отпустить, то этот код выполнится еще раз (а может и не раз, зависит от длительности выполнения дальнейшего кода).
- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
А по цитате этого не видно ?SeregaT писал(а):Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"?
if - не ждет , он проверяет и идет дальше.
Дак напишите другой - который будет работаь. который ЖДЕТ. там же написан в "язык Си для микроконтроллеров".SeregaT писал(а): Но от этого код не станет работать по другому
ikarab
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после if (PINB.0);. Это просто в комментариях я имел ввиду то, что именно эта строчка ждёт лог 1, чтобы выполнить нижеследующий код.
И он работает...
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после if (PINB.0);. Это просто в комментариях я имел ввиду то, что именно эта строчка ждёт лог 1, чтобы выполнить нижеследующий код.
А этот код написан в конце (моего кода)Дак напишите другой - который будет работаь. который ЖДЕТ. там же написан в "язык Си для микроконтроллеров".
- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
дак вы не "имейте ввиду" - выж не для телепатов постите - а пишите - ПРОВЕРЯЕТ битSeregaT писал(а):ikarab
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после if (PINB.0);. Это просто в комментариях я имел ввиду то
Можно сделать так:
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;} // Если отреагировали на нажатие кнопки и ее уже отпустили, то снова ставим флаг- кнопка свободна
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;} // Если отреагировали на нажатие кнопки и ее уже отпустили, то снова ставим флаг- кнопка свободна
Трудно быть деревянным, совсем трудно....


