Перейти к содержанию

Язык СИ для микроконтроллеров


Рекомендуемые сообщения

Всем привет!!! Решил я наконец освоить микроконтроллер. Как-то давно нашел и распечатал уроки-этих уроков уже нет на сайте и ссылку дать не могу. На данный момент я изучаю подключения кнопки и разобрался как при нажатии диод горел или на оборот отключался, но вот возник у меня вопрос как сделать чтоб при первом нажатии диод горел, а при втором нажатии он отключался. Пытался разобраться сам и не чего у меня не выходит.

#include <tiny13a.h>

#include <delay.h>

..........

while (1)

{

while(PINB.2==0)

{

delay_ms(100);

PORTB.0=0;

PORTB.1=1;

}

while(PINB.2==1)

{

PORTB.0=1;

PORTB.1=0;

}

}

}

проэкт.rar

Изменено пользователем Смит
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В обычной переменной.

Нажали кнопку - смотрим что в переменной. Если 1, то пишем в неё 0, и наоборот. Т.б. делаем инверсию (для 2-ух состояний).

Ну а по этой переменной уже включаем или отключаем светодиод.

Ссылка на комментарий
Поделиться на другие сайты

Да при таком раскладе:

while (1)

{

while(PINB.2==0)

{

delay_ms(100);

PORTB.1=1;

}

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

Вот так если:

while (1)

{

while(PINB.2==0)

{

delay_ms(100);

PORTB.1=1;

}

while(PINB.2==1)

{

PORTB.1=0;

}

то светодиод загорается только при нажатой кнопкой.

Ссылка на комментарий
Поделиться на другие сайты

Вот так если

то светодиод загорается только при нажатой кнопкой.

когда надоест изучать методом научного тыка, начните изучать язык на котором пишите....
Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Я тут глянул, язык Си имеет несколько диалектов:

  • «K&R» C (1978)
  • ANSI C (1989)
  • C90 (1990)
  • C99 (1999)
  • C11 (2011)

Хотелось бы идти в ногу со временем. Имеет смысл учить новейший С11 или студии с этим стандартом не работают?

На форумах часто предлагают прочесть книгу K&R, но многие фишки оттуда давно не работают.

Какая самая свежая и актуальная книга по изучению программирования контроллеров на Си?

Ссылка на комментарий
Поделиться на другие сайты

Это я касательно стандартных функций и некоторых объявлений. Многие современные компиляторы ругаются на тексты из K&R, им по-своему подавай. Так или иначе вопрос про С11 остаётся открытым.

Ссылка на комментарий
Поделиться на другие сайты

так вот я и спрашивал - конкретно на что ругается компилятор?

По какому по своему им подавать?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Ладно. Спрошу по-другому. Где можно сейчас найти ту IDE, в котором все программы из любой книги K&R будут работать, как авторы писали? Даже если брать Linux - там тоже все примеры откомпилятся?

Речь сейчас идёт не столько о контроллерах, сколько о литературе для общего изучения языка Си.

Неужели все современные компиляторы для PIC, AVR, STM и других контроллеров до сих пор используют старые диалекты языков, когда в новых появились новые, широкие возможности, такие, как атомарные операции и т.п.?

Или я всё не так понимаю? :)

Ссылка на комментарий
Поделиться на другие сайты

Ну если примеры содержат операторы потокового ввода-вывода, то конечно они в MDK IDE не откомпилятся. Программы с alloc/malloc тоже врятли заработают. Голову то надо наверное включать, а не пенять на корифеев. У них то все верно написано.

Любая IDE подойдет на компе. Хоть MSVC, хоть Turbo C (неплохой кстати вариант) и вперед писать консольки, так как K&R ни под что другое книг не писал

У меня вот до сего момента (а думаю и дальше тоже) из Риччи работало все, независимо от версии компилятора. Вы просто каких то странных приключений ищите, не вникнув в суть вопроса и даже не начав по моему чтото "учить"

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

  • 4 месяца спустя...
2 минуты назад, Alex сказал:

Немного непонятно.
 

Я сам еще не знаю что мне нужно иметь:huh:

Хотя бы ссылку. 

Я тут прикинул в двух пальцах, но код будет ужасно огромным. Знаю что есть простое решение, а где...

 

Ссылка на комментарий
Поделиться на другие сайты

34 минуты назад, si4karuk сказал:

Я тут прикинул в двух пальцах, но код будет ужасно огромным

Интересно, как, учитывая, что :
 

34 минуты назад, si4karuk сказал:

Я сам еще не знаю что мне нужно иметь

? :)


 

Определитесь что Вам нужно и задайте нормально вопрос :)




 

34 минуты назад, si4karuk сказал:

Хотя бы ссылку

Тогда работайте с указателем. По нему и ищите минимальное число.
Искать можно, как вариант, в цикле. Но для 4-ёх переменных, рационально создать макрос для сравнения 2-ух переменных и вызвать его 2 раза.


 

Ссылка на комментарий
Поделиться на другие сайты

#define P_MIN(p1, p2)   ((*p1<*p2)?p1:p2)

int     a,b,c,d;
int*    p_min;
                                          
p_min = P_MIN(P_MIN(&a,&b),P_MIN(&c,&d));

Сравниваем значения в переменных a,b,c,d и укладываем в указатель p_min адрес переменной с минимальным значением.
 

С циклом вариант не прокатит. Нужно чтобы адреса переменных шли подряд. Либо нужно иметь массив указателей.
 

Ссылка на комментарий
Поделиться на другие сайты

Хорошо. 

 Есть четыре частных дома. И одна скважина к которой они подключены.

Задача -- Нужно сделать некую коробку, которая будет подключать насос поочередно к каждому дому. Грубо говоря, если насос работает 4 часа в месяц, то он должен поработать по одному часу от каждого дома.

Почему принято такое решение? Разные тарифы за электроэнергию... 

Вот:unsure: Что то типа такого. Бред конечно, но выход только такой.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...