Есть такая наука - ВЫСШАЯ АРИФМЕТИКА. Изучает теорию чисел. Алгоритм преобразования из аппноты микрочипа как раз оттуда. Поэтому в подобных вещах изобретать велосипед не стоит. Оная наука весьма сложна и не зазорно просто воспользоваться некоторыми ее плодами. А если есть интерес, то и попытаться ее освоить в некоем доступном (по образованию) объеме.
Доброго времени суток, просветите, не совсем понимаю директиву BANKSEL. Как я понял, если написать, скажем banksel PORTB, то контроллер перейдёт в тот банк памяти, в котором находится этот регистр(сделает этот банк текущим), правильно? Но например у 628-го, PORTB отображается и на нулевой и на второй банк, в какой тогда перейдёт команда... или просто компилятор выкинет ошибку? http://radiolaba.ru/wp-content/uploads/2013/12/karta_pamyati.jpg
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Люди, объясниет мне, почему перебор не работает (начальный адрес в переменной точно тот, что нужно): START: MOVLW B'00000000' TRIS 0x06 GOTO CODESTART RETLW 0x07 RETLW 0x0A CODESTART: variable a = 0x06 LOOP: CALL a MOVWF 0x06 a = a + 1 GOTO LOOP Переменная a не инкриментируется почему-то
Вроде, не гибрид. Я делал все по мануалу в MPLAB X, так что все претензии к ним . Директива varible там есть и, вроде, работает, но в этом случае переменная почему-то не хточет изменять значение
Гибрид, причем неудачный. movwf 0x06 перестает содержимое аккумулятора в переменную (регистр) по указанному адресу. А выше вы объявляете переменную и назначаете ей значение 6. Не стыкуется одно с другим, не говоря уже об адресации внутри пика. Адрес и содержимое как бы разные вещи.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Есть понятие "макрос" и там некоторые примеры авторазметки/автозаполнения. НО... Макросы перед подстановкой в код обрабатываются препроцессором компилятора. И всего-то выполняют роль подстановок сгенерированного фрагмента кода в нужное место программы, а не непосредственного исполнения - участок кода будет исполняться АЛУ(ядром) МК. Посему - любое изменение делать должен исключительно МК, опираясь на имеющиеся ресурсы. Ежли есть изменяемая константа - то только в регистре(ЕЕПРОМ) и/или акумуляторе. А далее используя имеющуюся систему команд и ресурсы ядра проводим с той переменной необходимые действия ПОКОМАНДНО. Это ассемблер, а не чего более "высокоуровневого" (к примеру СИ).
Отсюда такой перл "CODESTART: variable a = 0x06 LOOP: CALL a MOVWF 0x06 a = a + 1 GOTO LOOP" вообще весьма сомнительный: "а" (в CALL a) есть адрес подпрограммы, котроая выполняет "= a + 1" а затем без усякого return принудительно посылается на GOTO LOOP... Это всего-то вместо использования какого-нибудь регистра ОЗУ в текущем банке с командой INCF Rn,f даже без использования W ...
PIC12F509. А как тогда мее реалтзовать на нем перебор информации, занесенной при помощи RETLW? Мне, просто, нужно хранить больше констант, чем влезет в файловые регистры. И CALL a работает как раз корректно, вызывая именно первый RETLW. Оно, просто, не хочет выполнять a = a + 1, которое работает, если делать не цикл, а последовательно писать CALL a MOVWF 0x06 a = a + 1 CALL a MOVWF 0x06 a = a + 1 ...
У PIC12F509-го аж 48 регистров РОН... Неуж-то мало?
Тогда ищем кристалл с ЕЕПРОМ - там возможно хранение изменяемых величин.
Касательно возврата по таблице... Там используется особенность ПИКовых подставлять значения в счетчик команд. Табличка снабжается заголовочным фрагментом к которому и обращается вызов CALL, а уже сам заголовок выполняет функционал выборки нужного RETLW. Принцип примерно такой:
только там еще кучка замечаний и относительно корректного размещения самой таблицы и относительно диапазона (ибо переполнение PCL не влияет на содержимое PCLATH содержимое коего используется при любой модификации PCL)....
Последний раз редактировалось BOB51 Чт мар 23, 2017 10:10:15, всего редактировалось 2 раз(а).
Заголовок сообщения: Re: Вопросы начинающих PIC ASM
Добавлено: Вс май 07, 2017 16:40:43
Родился
Зарегистрирован: Вс май 07, 2017 16:16:01 Сообщений: 8 Откуда: Саратов
Рейтинг сообщения:0
Здравствуйте!!! Подскажите почему при попытке чтения PIC16F73, не отображается окно EEPROM, в то время как у PIC16F628a все нормально отображается. Программатор Pickit3.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения