Хорошо, с PORTB мы разобрались, а что тогда за константа PORTB1? Где и как она используется?
Блин, Баском попроще управляет ногами, написал PORTB.1 = 1, включил пин 1 на порту B. А у Си какие сложности(возможно у меня, но с Баскомом я быстрее разобрался).
Хорошо, с PORTB мы разобрались, а что тогда за константа PORTB1? Где и как она используется?
Блин, Баском попроще управляет ногами, написал PORTB.1 = 1, включил пин 1 на порту B. А у Си какие сложности(возможно у меня, но с Баскомом я быстрее разобрался).
#define PORTB1 1
применяется для удобства чтения написанных программ
PORTB |= (1 << PORTB1);
идентично
PORTB |= (1 << 1);
но, по неизвестным мне причинам, первое считается более удобным
лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота?
ozonn писал(а):
лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота?
В Баскоме уже всё объявлено, даже не объявлено, а это является частью синтакса местного бейсика. А ещё в Баскоме есть такая удобная штука как алиасы, т.е. можно в начале программы объявить какие псевдонимы к каким пинам привязаны и управлять пинами через псевдонимы, т.е. в случае изменения назначений ног, меняем псевдонимы в начале программы, а не перелопачиваем весь текст программы. В Си я что-то не нашел похожей штуки, есть такое? Алиасы это конечно не только про пины в Баскоме, но сейчас я про них.
ozonn писал(а):
лично я не вижу никакой простоты в PORTB.1. Поскольку для этого надо объявит структуру PORTB с восемью полями. И где же тут простота?
В Баскоме уже всё объявлено, даже не объявлено, а это является частью синтакса местного бейсика. А ещё в Баскоме есть такая удобная штука как алиасы, т.е. можно в начале программы объявить какие псевдонимы к каким пинам привязаны и управлять пинами через псевдонимы, т.е. в случае изменения назначений ног, меняем псевдонимы в начале программы, а не перелопачиваем весь текст программы. В Си я что-то не нашел похожей штуки, есть такое? Алиасы это конечно не только про пины в Баскоме, но сейчас я про них.
есть. Например:
#define AAAA 12
объявив один раз константу с определенным значением и, впоследствии, изменив ее значение, препроцессор сам заменит значение константы во всех местах программы, где она встречается
Рекомендую помедитировать над этими конструкциями, составить таблицы истинности до полного понимания как они работают.
Еще один момент: использовать конструкции вроде if( (PINA & (1<<0)) == 1 ) не стоит, это потенциальная ошибка. Если разберетесь с таблицами истинности поймете почему.
COKPOWEHEU писал(а):Обе конструкции - и проверка пина, и изменение порта - сделаны некрасиво. Для проверки и изменения отдельного бита используются следующие конструкции
Рекомендую помедитировать над этими конструкциями, составить таблицы истинности до полного понимания как они работают.
Еще один момент: использовать конструкции вроде if( (PINA & (1<<0)) == 1 ) не стоит, это потенциальная ошибка. Если разберетесь с таблицами истинности поймете почему.
это единственная работа которую делает МК. Т.е. при лог.0 на ноге 5 порта D, переключать ногу 5 порта B. Вроде код простой, в симуляторе ведет себя как надо, но в реальном МК, реагирует не сразу. Ведь если исходить из кода, при лог.0 на ноге B5, МК должен постоянно дёргать ногой, а он не дергает не постоянно, а только в момент когда на ноге появляется лог.1, да и с задержкой какой-то, т.е. приходится кнопкой ловить момент что ли, когда исполнение программы находится в нужном месте. Я понимаю, что этот опрос кнопки бестолковый(в плане нет компенсации дребезга), я только пытаюсь понять как всё правильно управлять ногами, чтобы программа делала то, что я запланировал.
Или все же ошибся я, плохо медитировал
Все что угодно бывает, в том числе функции, не возвращающие ничего (даже void).
Поэтому покажите лучше свой код целиком. Разумеется, нормально оформленный, с отступами, комментариями, форматированием и под спойлером.
COKPOWEHEU писал(а):Все что угодно бывает, в том числе функции, не возвращающие ничего (даже void).
Поэтому покажите лучше свой код целиком. Разумеется, нормально оформленный, с отступами, комментариями, форматированием и под спойлером.
дефайны и прочее вне функции main данном случае имеют значение, т.к. там кода нет, ну не считать же за код #include <avr/io.h> или return 0;. Не, я хоть в Си и слаб пока, но опыт то программирования есть, я же говорю, другого значимого кода там нет. Ну да ладно, с тем вопросом разобрался я
Теперь вопрос такой: как в С, а конкретно в АВРСтудии7 сделать конструкции типа:
Если (условие1) или (условие2) или (условие3) или (...) то (сделать тото)
Если (условие1) и (условие2) и (условие3) и (...) то (сделать тото)
такое возможно?? В книге, которую я читаю, если обычное ветвление if-else, а вот если несколько условий я не понял как это можно оформить. Спасибо!
Оператор "||", т.е. логическое ИЛИ.
Не забывайте каждое условие обрамлять в скобки, во избежании нарваться на непонятки с приоритетами. Да и читабельность кода при этом улучшается.
Jack_A писал(а):что же она возвращает в случае void ? Я всегда считал, что ничего
ой, вот только не надо снова... если функция возвращает еще больше "ничего", чем просто void, это так и есть - лучше согласитесь, что бывают такие вот суперничегоневозвращающие функции, и все - иначе COKPOWEHEU выкушает все мозги у вас и у меня (я и так еще от прошлого раза не восстановился полностью).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...