С чего начать программировать микроконтроллеры?

Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Пухич писал(а):Я ж там привел код из своего РАБОТАЮЩЕГО проекта. По-моему там все понятно.

Он C учит, а не ассемблер :)
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

SeregaT писал(а):
Пухич писал(а):Я ж там привел код из своего РАБОТАЮЩЕГО проекта. По-моему там все понятно.

Он C учит, а не ассемблер :)


Тогда чуть выше можно прочитать описание работы. Все станет ясно. :)
Знание - сила!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

вот например код:

if (PINB.0)
{
delay_ms(50); //
while (PINB.0)
{некоторый код}
}

...
:oops:
мы должны нажать кнопку с быстротой в 50 или более миллисекунд, что бы сработал некоторый код?
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Этот код делает такое: как только нажали кнопку он ждет 50 мс, а затем код выполняется до тех пор, пока нажата кнопка. Вы этого хотели?
Знание - сила!
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

Stalker46 писал(а):мы должны нажать кнопку с быстротой в 50 или более миллисекунд, что бы сработал некоторый код?


А вы справа от кода напишите комментари КОТОРЫЕ ОБЯЗАТЕЛЬНЫ ДЛЯ УЧЕНИКА и все прояснится наверняка.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

net...
что то не понял я про дребезг...
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Stalker46 писал(а):net...
что то не понял я про дребезг...


А что конкретно не ясно?
Знание - сила!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

ну я же сделал так же как и SeregaT!
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
Пухич
Модератор
Сообщения: 4673
Зарегистрирован: Вс июн 01, 2008 00:17:35
Откуда: Я всего лишь плод вашего воображения...

Сообщение Пухич »

Stalker46 писал(а):ну я же сделал так же как и SeregaT!


А вот не совсем так. Найдите как минимум одно отличие. :)
Знание - сила!
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

переменная i. кстати - грамматическая ошибка: после операторов ; не ставиться...
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Stalker46
Я думаю Вам надо так:

if (PINB.0) // Проверяем наличие лог 1. (Если нужен лог 0, пишем: if (!PINB.0);)
{
delay_ms (20); // Пауза (антидребезг)
if (PINB.0) // Проверяем, нажата ли кнопка
{
некоторый код; // Исполняемый при нажатии кнопки код
while (PINB.0); // Ждём, когда кнопка будет отпущена
}
}
Последний раз редактировалось SeregaT Вс апр 12, 2009 13:25:15, всего редактировалось 1 раз.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):if (PINB.0) // Ждём лог 1.

Есть небольшая страничка на руском языке - называется "язык Си для микроконтроллеров" - советую неспеша, думая прочитать от начала и до конца.
http://radiokot.ru/forum/viewtopic.php?p=197255#197255
Многое прояснится.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):А что я опять не так написал?

То, что в цитате я указал.

SeregaT писал(а):я не нашёл по приведённой ссылке этой книги "язык Си для микроконтроллеров"...

Как можно найти книгу где сказано НЕБОЛЬШАЯ СТРАНИЧКА ? Вы когда нибудт начнете читать ВНИМАТЕЛЬНО и понимать написаное по-русски ???

Изображение
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

ikarab
Тот код, который я написал,работает нормально.
Я не пойму, на что Вы намекаете? Нужно было использовать еще и else ? Можно-же сказать прямо, что не так...
Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"? Но от этого код не станет работать по другому :)
Последний раз редактировалось SeregaT Вс апр 12, 2009 12:49:16, всего редактировалось 3 раза.
Arlleex
Друг Кота
Сообщения: 4435
Зарегистрирован: Сб мар 07, 2009 20:44:36

Сообщение Arlleex »

вот как правильно:

If (PINA.0==1) {
delay_ms(50);
If (PINA.0==1) {
// код, который должен выполняться при нажатии кнопки
}
}
Не умеешь - не берись, но не взявшись не научишься...
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

Stalker46
А если кнопку вовремя не отпустить, то этот код выполнится еще раз (а может и не раз, зависит от длительности выполнения дальнейшего кода).
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):Или Вы пишете про то, что я написал "Ждём лог 1" вместо того, чтобы написать "Если лог 1"?

А по цитате этого не видно ?

if - не ждет , он проверяет и идет дальше.

SeregaT писал(а): Но от этого код не станет работать по другому :)

Дак напишите другой - который будет работаь. который ЖДЕТ. там же написан в "язык Си для микроконтроллеров".
Аватара пользователя
SeregaT
Генеральный секретарь МЯУ
Сообщения: 18852
Зарегистрирован: Пн сен 03, 2007 18:24:27
Откуда: Россия. Омск.
Контактная информация:

Сообщение SeregaT »

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

А этот код написан в конце (моего кода) :) И он работает...
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Сообщение ikarab »

SeregaT писал(а):ikarab
Дак и не надо чтобы он ЖДАЛ. Если единицы нет, код выполняется дальше. Если единица, то выполняется тот код, что идёт после if (PINB.0);. Это просто в комментариях я имел ввиду то


дак вы не "имейте ввиду" - выж не для телепатов постите - а пишите - ПРОВЕРЯЕТ бит
Аватара пользователя
megasvintus
Вымогатель припоя
Сообщения: 568
Зарегистрирован: Вт мар 04, 2008 20:03:03
Откуда: Нижний Новгород

Сообщение 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;} // Если отреагировали на нажатие кнопки и ее уже отпустили, то снова ставим флаг- кнопка свободна
Трудно быть деревянным, совсем трудно....
Ответить

Вернуться в «Теория»