Здравствуйте, недавно начал изучать Си на платформе XC8 Mplab X, так вот возникла задача выполнять проверку бита порта пока идет отсчет до нуля. На ассемблере эту функцию хорошо выполняла команда decfsz, в Си так и не понял как реализовать такую команду. Пытался делать так while(--X==0) но это не совсем то. Здесь происходит вычитание единицы с последующей проверкой.
Ну так decfsz тоже уменьшает некую переменную до достижения нуля. Если нужна проверка бита порта, то while или if, а в качестве аргумента (PORTBbits.RB0) например. Да и другие варианты есть, все зависит от задачи.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Да все верно но ка то привык циклы выполнять через decfsz, да и место в МК не всегда достаточно чтоб читать единицу а потом делать сравнение, вместо одной команды decfsz
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Да дело не в проверке бита, проверка бита это часть цикла, примерно так movlw 0x05 movwf count L1 call процедура btfss portb,1 goto уход из цикла decfsz count,f goto L1
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
movlw 0x05 movwf count L1 call процедура btfss portb,1 goto уход из цикла decfsz count,f goto L1
Код:
for(count = 5; count > 0; count--) { proc(); if(!PORTBbits.RB1) break; // либо какое-то иное действие }
Глупо, конечно, напрямую переносить ассемблерный код в Си. Это на первых порах так будет при переходе с асм на Си, потом мышление изменится. Так что написанное мной можете считать бредом, а не советом к продолжению в том же духе.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
А смысл? Может там вообще без всего этого можно обойтись. Конечной задачи мы же не знаем, хотя сдается мне, что это кнопочный антидребезг. Тогда там вообще не так нужно действовать.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Смысла нет однозначно , они так и будут сравнивать каждый оператор и писать в С на асм_стайл и голосить что компилятор лох... Единицы из них осознают что такое структурное программирование и чем оно выгоднее лапшеобразной или линейной писанины...
Это переходный период, сам так же делал. Первым блином по познанию Си был перенос термометра с динамической индикацией, и переключение разрядов на Си я делал так же, как на асме Потом уже понял, что тут нужны иные подходы.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
В общем да переходный период, пока изучаю Си понемногу, пишу прогу будильника напоминалки. Считывание времени и вывод на LCD заработал. Заткнулся на цикле с проверкой порта для активации или пропуска звонка. В общем данный пример то что нужно судя по всему. Спасибо всем откликнувшимся.
Код:
for(count = 5; count > 0; count--) { proc(); if(!PORTBbits.RB1) break; // либо какое-то иное действие }
Все разобрался, проблема была в недоломоном XC8, сейчас все компилируется как положено. Функции for и do while, выполняют то что нужно да и код резко сократился.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения