Я бы вообще сделал проще. Вместо малочитабельных сдвигов ради непонятно чего, сделал бы всё побитно.
Возможно, такой код и будет чуть медленнее (а может, и нет, с учётом имеющихся ассемблерных инструкций установки/сброса бита, более быстрых, чем "длинные" сдвиги), но зато его легко модифицировать в случае изменения назначения пинов (скажем, плата оказывается проще при другой конфигурации).
видишь, там сложное действие (раскладывается на несколько более простых) как и в математике снаыала выполняются действия в скобках х' я обозначил результат вычисления скобки (так я сделал акцент на то, что в переменную х он не запишется) просто я попытался пошагово расписать птоцесс вычисления этого выражения
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
(1<<7) это вариант записи числа 0b10000000 (1 сдвинута на 7 позиций влево)
Добавлено after 2 minutes 45 seconds: я бы отправил тебя читать учебник т.к. это основы... но, к сожалению я не помню в каком это написано более доходчиво если до понедельника не разберёшься - обращайся, найду, укажу...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Ай да прав. Теперь до меня дошло. Вот тупень. & дают 1 и 1 = 1. Теперь ясно. Вот причина .
Я разобрался. Смодулировал ситуацию в CodeVishion и все получилось. И все действия на бумаге просчитал. Все сошлось. Но самому что то подобное составить это нужно огромный опыт иметь.
Код:
while (1) { b<<=1; b&=~(1<<7); b|=(b<<1)&(1<<7); while (c=1,c++) { x=b; delay_ms (100); PORTB=x&((1<<7)|(1<<6)); x=x<<1; x&=~(1<<7); x|=(x<<1)&(1<<7); PORTD=x&((1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)); } }
а все это случайно не для того, чтобы раскидать по разным портам байты, выводимые при динамиеской индикации на индикаторы? просто в этом случае можно применить еще и перестановку битов в самих байтах... и в итоге получить заметный выигрыш в сдвигах и т.п.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
в исходном задании было PORT=x&((1<<7)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)); а тут PORT=x&((1<<6)|(1<<5)|(1<<4)|(1<<3)|(1<<2)|(1<<1)); для этого варианта действия x&=~(1<<7); x|=(x<<1)&(1<<7); не требуются.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
объявляй переменную до описания прерываний, тогда она будет видна во всём коде
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт фев 14, 2020 17:49:48
Опытный кот
Карма: 13
Рейтинг сообщений: 163
Зарегистрирован: Сб дек 22, 2012 08:17:42 Сообщений: 744 Откуда: Караганда, Казахстан
Рейтинг сообщения:0
На Си? То есть из программы ISR(<вектор>) ? Обычным return'ом. Или простым окончанием программы - по последней замыкающей фигурной скобке - ISR(<вектор>){ ... } - вот этой. Си прячет особенности программы обслуживания прерываний и делает ее для нас, как функцию без параметров и без возвращаемого значения. Ну, и нормальные функции вызываются явным вызовом, а эта вызывается каким-то аппаратным сигналом.
Связь с остальным хозяйством предполагается через общие переменные - те, которые объявлены вне (до) любой из функций.
_________________ Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Давненько не пользовался CVAVR, и вот недавно выскочил такой глюк - из папки BIN стал пропадать файл avrasm2.exe, вернее сначала при сборке проекта, сборке файлов проекта вылетала ошибка, типа нет файла avrasm2.exe. Помогала повторная установка в режиме восстановления, файл появлялся, но через несколько нажатий на кнопки компиляции, сборки файл на глазах исчезал. Проверка компа на вирусы и прочую гадость ничего не дала. Пока решил проблему так: присвоил avrasm2.exe атрибут "системный". Вроде пока работает и не пропадает, но хотелось бы понять причину такого глюка. Версия CVAVR 3.12 + лекарство.
Здравствуйте. Может ли кто помочь с написанием кода в CVAVR? Есть готовый код, просто правильно записать туда, а сама не понимаю Если кто-то сможет помочь, напишите, пожалуйста, в лс
Добрый день. Решил обратится за помощью, так как сам в С -1(т.е. меньше нуля) да и еще наверное стар и туп Не могу придумать алгоритм "вытаскивания" определенной последовательности символов/знаков из принимаемых по UART данных. Последовательность которая мне нужна имеет вид двух букв и 11 цифр типа IF00144000000. Сделал несколько вариантов поиска внутри обработчика прерываний UART, но все равно иногда проскакивают "левые" значения. Может кто то занимался подобным, прошу откликнутся.
може тктото и занимался, если делал то-же, что и вы... то он наверно и данные принимал так-же, и хранил их так-же, и правила выбора нужных данных у него были один в один... может это даже был я... только отсутствие экстрасенсорных способностей не даёт мне возможности узнать это а кодевижен хороший и в твоих проблемах не виноват
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения