Новый модуль конфигурации кода для средства разработки mplab® x ide

MPLAB Code Configurator (плагин к MPLAB X)

ПодробностиКатегория: Microchip

Плагин MPLAB Code Configurator (MCC, MC2) к среде разработки MPLAB X позволяет разработчикам быстро и в наглядной форме сконфигурировать периферийные модули микроконтроллера и создать файлы конфигурации и драйверов на языке Си (.c и .h файлы).

Рассмотрим основы работы с плагином, конфигурирование периферии микроконтроллера.

Видеоруководство

Пошаговая инструкция

  1. Установка плагина.

    Плагин доступен из меню Tools -> Plugins

  2. Запуск плагина.

    Перед запуском плагина нужно создать (пустой) проект. Если в проекте нет никаких файлов, то плагин создаст все необходимое.

    Установленный на шаге 1 плагин доступен через меню Tools -> Embedded -> MPLAB Code Configurator.

  3. Плагин содержит 3 области:
    1. Окно ресурсов
    2. Окно редактора
    3. Окно управления выводами

Окно ресурсов микроконтроллера (Device Resources) показывает всю доступную для конфигурирования периферию микроконтроллера.

Выбор периферии (клик мышкой) в окне ресурсов микроконтроллера (Device Resources) переводит периферию в окно Project Resources, т.е. используемую в проекте и для которой будет созданы файлы в проекте.

Для удаления периферии из инициализации и создания файлов драйверов просто нажмите на крестик в правой части окна.

Системные ресурсы (System) в ресурсах проекта (Project Resources) позволяет настроить биты конфигурации и системный генератор. Доступные для редактирования настройки появляются в Окне Редактора. Плагин MC2 вычисляет настройки делителей и другие необходимые параметры.

Выбор и изменение тактовой частоты автоматически влияет на параметры настройки таймеров. В настройке таймеров вы можете задать все необходимые настройки, настроить прерывания.

Обратите внимание, что при использовании прерываний и таймеров в коде вам нужно дополнительно разрешить прерывания и включить таймеры, при этом вы можете использовать сгенерированные плагином драйвера:

TMR1_StartTimer();INTERRUPT_GlobalInterruptEnable();

INTERRUPT_PeripheralInterruptEnable();

Специализированные драйвера периферии отвечают за специфические функции периферии. Для примера, модуль MSSP может быть использован интерфейсами I2C или SPI. Оба интерфейса могут выступать в роли Master или Slave. Плагин MC2 предоставляет специализированные драйвера позволяя программисту сконцентрироваться на выбранной функции а не на индивидуальных управляющих регистрах.

Когда периферия добавлена в ресурсы проекта (Project Resources), то выводы микроконтроллера, соответствующие выбранной периферии, отображаются в Окне управления выводами. Клик в матрице ресурсов закрепляет вывод микроконтроллера за выбранной периферией.

Окно управления выводами включает отображение корпуса микроконтроллера с отмеченными сконфигурированными выводами.

При конфигурации периферии вы можете задать свои имена выводам микроконтроллера, например, в соответствии с вашей схемой электрической принципиальной.

Вид корпуса микроконтроллера и матрицы соответствия выводов периферии может быть распечатан или сохранен для использования, например, в документации к коду.

Генератор кода добавляет в проект файлы инициализации и управления периферией.

Плагин MC2 генерирует стандартизированный код драйверов на основании выбранной для конфигурации периферии и выполненных настроек. Полученный код может редактироваться и отлаживаться в среде разработки. Программист может модифицировать сгенерированный код или изменить его с помощью MPLAB Code Configurator.

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

В следующих версиях плагина планируется добавление новых семейств микроконтроллеров PIC компании Microchip.

Источник: http://gamma.spb.ru/obuchenie/stati/microchip/111-mplab-code-configurator-plagin-k-mplab-x

MPLAB® Code Configurator

MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.<\p>

Используя интуитивно понятный интерфейс, он позволяет и настраивает богатый набор периферийных устройств и функций, специфичных для вашего приложения.

MPLAB Code конфигуратор поддерживает 8-битные, 16-битные и 32-разрядный PIC ® микроконтроллеры. MCC включен в обе среды загружаемый MPLAB IDE X и облачного на основе MPLAB IDE Xpress.

280 +8-разрядные устройства 255 +16-разрядных устройств 55 +32-разрядных устройств

Все плагины являются бесплатными, MCC доступныq и готовыq к установке сразу, он установлен в MPLAB ® X IDE. Просто следуйте простым шагам ниже , чтобы не только увидеть все доступные плагины , но для установки MCC.

  1. Выберите меню “Tools” (Сервис) и нажмите на кнопку “Plugins” (Плагины)
  2. В окне MPLAB IDE X Плагины, нажмите на ссылку “Available Plugins” (Доступные подключаемые модули) вкладку
  3. Выберите MPLAB Code конфигуратор и нажмите кнопку “Install” (Установить)

 

Предоставляет список доступных периферийных устройств

Графический пользовательский интерфейс отображает все доступные периферийные устройства для выбранного микроконтроллера в области ресурсов устройства. Просто нажмите на панель ресурсы устройства и выберите те которые хотите добавить в проект. Периферийные переместится в область МСС ресурсов проекта, и готов быть настроены с требованиями вашего проекта.

Легкость выбора периферийного устройства для настройки

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

https://www.youtube.com/watch?v=P4CKlUionBo

В области ресурсов проекта, модуль System всегда присутствует. Модуль System упрощает настройку конфигурации битов и настройка системного генератора.

Интеграция MPLAB Code Configurator код в свой существующий проект или начните новый проект с нуля

Использованием MPLAB® Code Configurator можно добавить код для периферийного устройства к существующему проекту, или вы можете использовать MPLAB ® Code конфигуратор, чтобы вы начать работу над новым проектом. Если MPLAB ® Code конфигуратор обнаруживает файл main.

c уже в проекте, он не будет его создавать. Вам нужно всего лишь добавить две строки в файл main.c, чтобы начать использовать сгенерированные драйверы. Если ваш проект не имеет main.c, MPLAB ® Code конфигуратор создаст его для вас.

Код , сгенерированный MPLAB ® Code Configurator автоматически добавляется в ваш проект. Когда периферийное устройство добавляется при помощи MPLAB Code Configurator, сгенерированный код и новые файлы автоматически добавляются в проект.

Все модули добавляются в папку MCC и разбиваются по устройствам и периферийным модулям, что легко для понимания и настройки.

Быстро установить биты конфигурации

Тактовый генератор и биты конфигурации системы могут быть быстро настроены в области копозитора. Частота системного генератора может быть настроена в нем и будет автоматически использоваться MCC для расчета периодов таймеров, рабочих циклов, и скорости передачи данных в соответствии с требованиями периферийных устройств.

 Формирует стандартизированный код драйвера

MPLAB ® Code конфигуратор генерирует пользовательский стандартизированный код драйвера на основе выбора, сделанного в области композитора. Это реальный код, который автоматически добавляется в ваш проект. Код может быть отлажен, отредактирован и просмотрен, как и любой другой код. Он может быть изменен вручную, или перенастроен в MPLAB ® в окне композитора.

Простая процедура для удаления периферийных устройств

Удаление периферийного устройства проста. Любое устройство в области ресурсов проекта могут быть удалены из проекта, нажав на X справа от периферийного устройства.

Сохраните изменения в сгенерированный код

Код сгенерирован MPLAB ® Code Configurator можно редактировать , как и любой другой код. Сгенерированный код реальный код! Если вы решили изменить код после того, как он генерируется, вы можете сделать это.

Но что произойдет, если вы также изменили конфигурацию в MPLAB Code Configurator и сгенерировали код еще раз? Нет проблем.

MPLAB Code конфигуратор обнаруживает изменения и отображает окно сравнения , который позволяет выбрать , следует ли сохранить изменения, или вновь сгенерированный код.

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

Легкость в  конфигурации GPIOs

Выводы портов могут быть сконфигурированы как GPIO выводы, просто нажав на Pin на графическом изображении микроконтроллера. Каждому вывод порта может быть дано пользовательское имя. Это имя затем может быть использовано как на дисплее графического изображения, так и в создаваемом коде.

Направление передачи выводов порта, вход или выход, а также начальные значения, могут быть сконфигурированы в несколько кликов. Для входных контактов слабые подтягивающие резисторы (WPUE), а также прерывание по изменению состояния (IOC), также могут быть настроены.

Настройка периферийных прерываний, используемых системой

Легко изменить порядок, обработки процедур в прерывании, которые вызываются в диспетчере прерываний. Выберите периферийное прерывание и нажмите на стрелку вверх или вниз, чтобы установить приоритет выполнения.

Настройка выводов, используемые в периферийных устройствах

Когда добавляется периферийное устройство в проект, в области ресурсов проекта, контакты, связанные с периферийным отображаются в диспетчере выводов. Нажатие на вывод в графическом изображении контроллера, блокирует этот штырь для выбранного периферийного устройства.

Вид пакета конфигурации контактов

Можно использовать специализированные драйверы периферийных устройств сосредоточиться на конкретных функциях периферийного устройства. Например, MSSP может быть использован для I2C или SPI. Обе эти функции могут быть использованы в ведущем или ведомом. MPLAB ® Code Configurator предоставляет специализированные драйверы, чтобы позволить вам сосредоточиться на нужной функции периферийного вместо того, чтобы требовать от вас, чтобы навастривать отдельные регистры управления.

Источник: http://open.e-voron.dp.ua/mplab-code-configurator/

Дайте мне железа! Часть 2

Часть 1

Итак, мы закупились всем необходимым. Настало время развернуть эксперементальную лабораторию! Ставим софт, который идет в комплекте с программатором: PICKit2 Utility и MPLAB IDE. Первое — утилита для работы с программатором, второе — среда разработки. PICKit2 Utility нам в принципе не понадобится, но есть один момент, который я упомяну позже. А пока перенесем свое внимание на MPLAB IDE.

MPLAB IDE

Открваем среду разработки и создаем новый проект. Один из минусов этой IDE — отсутствие прилипающих панелек, вместо этого мы имеем нагромождение окон.

Чтобы можно было жить дальше, я упорядочил все привычным образом (окно уменьшено, чтобы картинка влезла):

upd: все прекрасно прилипает! Кликаем по иконке в левом верхнем углу окна, в меню выбираем Dockable, после чего тащим его к границе. Спасибо lunatik42 за информацию!

File > New; File > Save as…, выбираем тип Assembly, ставим галку Add to project. Таки да, кодить будем на ассемблере.

Также нужно указать IDE, что мы используем ассемблер.

Лезем в Project > Select Language Toolsuite… и выбираем Microchip MPASM Toolsuite:

Теперь идем в Project > Build options… > Project, там у нас настройки компиляции. На вкладке «MPASM/C17/C18 Suite» выбираем генерацию абсолютного кода:

При написании абсолютного кода мы можем сами указывать, по каким адресам располагать наш код и данные. При написании переносимого кода компилятор сам рулит памятью, но для этого придется париться с секциями, нам это пока не надо.

На вкладке MPLAB Assembler можно отключить чувствительность к регистру переменных. Я решил не отключать.

Ну и чтобы жилось легче, слазаем в Edit > Properties… Там ставим отображение номеров строк и меняем шрифт по вкусу.

Я поставил Lucida Console 8 кегля, чтобы в окно влезало больше кода.

Снова матчасть

Наша текущая задача — написать минимальный объем кода, который скомпилируется, чтобы попробовать прошить контроллер. В результате мы получим несколько строчек кода, но для их написания придется много читать документацию.

Нам понадобятся два источника: даташит и встроенные в IDE мануалы (Help > Topics… > MPLAB Assembler), которые открываются в отдельном окне и не мешают процессу. Там есть таблица с набором команд и описание всех директив; если вы встретите в коде непонятное слово, то за толкованием нужно лезть именно туда. В разделе «8.

0 Instruction Set Summary» даташита приведено подробное описание системы команд, рекомендую вдумчиво прочитать этот раздел.

Минимальный код

Окей, можно наконец немножко покодить — это мы умеем! Начнем с конца и напишем единственную строчку: Компилируем по F10, получаем успешный билд и ошибку, мол невозможно что-то там загрузить.

Еще получаем ворнинг от компилятора, которому не нравятся директивы в начале строки — это не проблема, сдвигаем наш end на один таб. Что же касается ошибки, ее причина в отсутствии конфигурации камня.

Конфиг по сути представляет собой 12-битное слово, которое прописывается в камень при прошивке, у камней AVR это называется fuse-битами. Значение каждого бита описано в даташите, раздел «7.1 Configuration Bits».

А теперь квест на внимательность! Что мы забыли сделать? Мы забыли указать, под какой камень нужно собирать наш код. Чтобы сделать это, идем в Configure > Select Device… и выбираем наш камень — PIC12F509. IDE похвастается перед нами кучей возможностей, которые она предоставляет для этого камня:

Но что делать, если мы вдруг захотим использовать другую среду разработки? Для этого мы можем указать тип камня прямо в коде, делается это при помощи директивы list.

После прочтения мануалов по этой директиве становится понятно, что нужно написать следующее (не забываем про таб в начале):
Тип камня, указанный в настройках, передается компилятору через командную строку, и он имеет больший приоритет по отношению к директиве list.

Поэтому, если задать в настройках один камень, а в директиве написать другой, то код скомпилируется под камень, указанный в настройках, при этом компилятор выдаст ворнинг «Processor superseded by command line. Verify processor symbol». Камень мы указали. Теперь вспоминаем, что в разделе даташита «4.

3 Data Memory Organization» написано, что регистры нашего камня лежат в адресном пространстве памяти данных. Чтобы обращаться к ним по именам, а не адресам, подключаем заголовочный файл: Кроме адресов регистров, там прописаны номера конфигурационных битов — то, что нам сейчас понадобится.

Также этот файл можно добавить в проект, чтобы видеть все определенные им константы в списке символов.

Вот теперь мы можем задать конфигурацию. Ее можно указать в Configure > Configuration bits…, но для лучшей переносимости и более удобного доступа лучше сделать это прямо в коде, для чего нам поможет директива __config. Открываем наш инклуд и смотрим секцию «Configuration bits». Биты названы в соответствии с даташитом.

Нам нужна следующая конфигурация: MCLR отключен (работает как обычный пин), защита кода отключена, сторожевой таймер отключен, для тактирования используется внутренний генератор.

Таким образом, наш конфиг примет следующий вид:
Обратите внимание, значения объединяются при помощи «И». Я сначала по привычке написал все через «ИЛИ», и потом долго гадал, почему ничего не работает.

Итак, вот что у нас в итоге получилось: Компилируем… успешно! Как я и обещал, несколько строчек и много документации.

Беремся за железо

Вот и настал момент, которого вы так долго ждали! Если вы скроллили страницу в поисках того места, где повествование наконец дойдет до железа, то самое время остановиться и начать читать 🙂 Итак, у нас есть программатор, микроконтроллер, программа и нездоровый энтузиазм все это совместить.

И теперь нас мучает только один вопрос: что с чем соединять? Лезем в даташит, раздел 7.12 «In-Circuit Serial Programming» и видим вот такую картинку:Normal Connections у нас пока отсутствуют, так что смотрим только на соединение ног программатора с ногами камня.

Окей, что с чем соединять мы поняли, теперь нужно найти, откуда эти самые пины растут на камне и на программаторе.

Из мануалов к программатору узнаем назначение его выводов:

В даташите (раздел «Pin Diagrams») видим выводы микроконтроллера:Теперь смотрим на камень.

Недоумеваем. Ну и на каком углу у него первый вывод? Где верх а где низ? Чтобы понять это, лезем в википедию и читаем про DIP-корпус. Оттуда узнаем, что выводы нумеруются против часовой стрелки от полукруглой засечки:

Оказывается, заботливые парни из Microchip даже поставили для нас точечку около первого вывода. Достаем, наконец, макетную плату! Я соединил все следующим образом:

То же самое в дополненной реальности, как весьма точно выразился rule:

Прошиваем

Мы всего в нескольких кликах от долгожданного результата! Итак, подключаем наш программатор, если он еще не подключен, затем в MPLAB лезем в меню Programmer и выбираем там наш программатор — PICKit2. В окне вывода откроется вкладка сообщений программатора, где он бодро доложит о своей готовности.

А еще у нас появится вот такая панелька для управления программатором:Нам нужна самая левая кнопка — «Program the target device». Нажимаем! Если мы все сделали верно, то внизу пробежит прогрессбар, а в окне вывода появятся сообщения о затирании и записи программной памяти.

Мои поздравления, камень прошит! 🙂 В следующей части мы напишем HelloWorld, а так же я расскажу, зачем же нам все-таки может понадобиться PICKit2 Utility. До встречи!

Конец второй части.

Часть 1

Источник: https://habr.com/post/112467/

Облачно ориентированная платформа разработки MPLAB® Xpress IDE – простое начало работы с микроконтроллерами PIC®

Новости электроники

Главная  Новости  Новости электроники

Microchip анонсирует среду MPLAB® Xpress Cloud-based Integrated Development Environment (IDE). Эта онлайн платформа разработки является простейшим путем освоения семейства микроконтроллеров (МК) PIC®. Для начала работы не требуется ничего загружать, входить в систему и настраивать ее.

Программист может работать со средой на подключенных к интернету ПК, лаптопе или планшете, ему доступны конфигурирование периферии, автоматическая генерация кодов, интегрированный компилятор MPLAB XC, аппаратный программатор/отладчик и 10 Гбайт хранилища защищенных данных в аккаунте myMicrochip.

Пользователи могут легко переносить свои проекты в полную версию загружаемой среды MPLAB X IDE.

Ключевые особенности

  • Универсальная онлайн среда разработки MPLAB® Xpress IDE
  • Облачно ориентированная IDE с Code Configurator
  • Возможность аппаратной отладки через интерфейс USB
  • Создание приложений, симуляция, компилирование и отладка исходного кода МК
  • Для начала работы не требуется загрузка и установка программного обеспечения

Аппаратная поддержка облачной платформы реализуется посредством соединения через USB ПК, лаптопов и планшетов с макетными платами MPLAB Xpress. На этих платах установлен микроконтроллер PIC16F18855. Они имеют встроенный программатор и разъем mikroBUS™ для возможности подключения с более чем 180 платами Click™ MikroElektronika.

Кроме того, MPLAB Xpress IDE поддерживает макетную плату Microchip Curiosity (экономичный и эффективный инструмент с интегрированным программатором/отладчиком), а также позволяет реализовать подключение внешних плат пользователя.

 Описываемую онлайн среду разработки можно использовать с популярным внутрисхемным программатором/отладчиком Microchip PICkit™ 3.

Веб-среда MPLAB Xpress не требует инсталляции и позволяет пользователю создавать приложения в течение нескольких минут.

Пользователь может открыть браузер и быстро сгенерировать код с помощью MPLAB Code Configurator, который интегрирован в MPLAB Xpress. Такая функция недоступна ни одной другой облачной среде разработки.

Пользователь может протестировать код с помощью симулятора, скомпилировать код,  а затем запрограммировать МК и провести отладку программы.

Сообщество MPLAB Xpress поможет пользователю быстро начать проект и решить проблемы. В разделе “Примеры” разработчику обеспечен простой поиск и доступ к кодам, разработанным и проверенным инженерами Microchip.

Разработчик может добавить к этой базе знаний любой из своих проектов, и он станет доступен остальной части сообщества.

Для удобства дальнейшего общения и обсуждений, посвященных MPLAB Xpress, доступен форум пользователей в Wiki.

Для получения более подробной информацию о просим обращаться в любой офис компании ЭЛТЕХ или по электронной почте.

Источник: www.eltechspb.by

Источник: http://www.radioradar.net/news/electronics_news/mplab_xpress_ide.html

Интегрированная среда разработки прикладного ПО MPLAB IDE (Лабораторная работа)

Источник: http://mc-plc.ru/labi/integrirovannaya-sreda-razrabotki-prikladnogo-po-mplab-ide.htm

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var debugMode="undefined"!=typeof debugFlatPM&&debugFlatPM,duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM,countMode="undefined"!=typeof countFlatPM&&countFlatPM;document["wri"+"te"]=function(a){let b=document.createElement("div");jQuery(document.currentScript).after(b),flatPM_setHTML(b,a),jQuery(b).contents().unwrap()};function flatPM_sticky(c,d,e=0){function f(){if(null==a){let b=getComputedStyle(g,""),c="";for(let a=0;a=b.top-h?b.top-h{const d=c.split("=");return d[0]===a?decodeURIComponent(d[1]):b},""),c=""==b?void 0:b;return c}function flatPM_testCookie(){let a="test_56445";try{return localStorage.setItem(a,a),localStorage.removeItem(a),!0}catch(a){return!1}}function flatPM_grep(a,b,c){return jQuery.grep(a,(a,d)=>c?d==b:0==(d+1)%b)}function flatPM_random(a,b){return Math.floor(Math.random()*(b-a+1))+a}
");let k=document.querySelector(".flat_pm_modal[data-id-modal=\""+a.ID+"\"]");if(-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(k,d):jQuery(k).html(b+d),"px"==a.how.popup.px_s)e.bind(h,()=>{e.scrollTop()>a.how.popup.after&&(e.unbind(h),f.unbind(i),j())}),void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{e.unbind(h),f.unbind(i),j()});else{let b=setTimeout(()=>{f.unbind(i),j()},1e3*a.how.popup.after);void 0!==a.how.popup.close_window&&"true"==a.how.popup.close_window&&f.bind(i,()=>{clearTimeout(b),f.unbind(i),j()})}f.on("click",".flat_pm_modal .flat_pm_crs",()=>{jQuery.arcticmodal("close")})}if(void 0!==a.how.outgoing){let b,c="0"==a.how.outgoing.indent?"":" style=\"bottom:"+a.how.outgoing.indent+"px\"",e="true"==a.how.outgoing.cross?"":"",f=jQuery(window),g="scroll.out"+a.ID,h=void 0===flatPM_getCookie("flat_out_"+a.ID+"_mb")||"false"!=flatPM_getCookie("flat_out_"+a.ID+"_mb"),i=document.createElement("div"),j=jQuery("body"),k=()=>{void 0!==a.how.outgoing.cookie&&"false"==a.how.outgoing.cookie&&h&&(jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show"),j.on("click",".flat_pm_out[data-id-out=\""+a.ID+"\"] .flat_pm_crs",function(){flatPM_setCookie("flat_out_"+a.ID+"_mb",!1)})),(void 0===a.how.outgoing.cookie||"false"!=a.how.outgoing.cookie)&&jQuery(".flat_pm_out[data-id-out=\""+a.ID+"\"]").addClass("show")};switch(a.how.outgoing.whence){case"1":b="top";break;case"2":b="bottom";break;case"3":b="left";break;case"4":b="right";}jQuery("body > *").eq(0).before("
"+e+"
");let m=document.querySelector(".flat_pm_out[data-id-out=\""+a.ID+"\"]");-1===d.indexOf("go"+"oglesyndication")?flatPM_setHTML(m,d):jQuery(m).html(e+d),"px"==a.how.outgoing.px_s?f.bind(g,()=>{f.scrollTop()>a.how.outgoing.after&&(f.unbind(g),k())}):setTimeout(()=>{k()},1e3*a.how.outgoing.after),j.on("click",".flat_pm_out .flat_pm_crs",function(){jQuery(this).parent().removeClass("show").addClass("closed")})}countMode&&(flat_count["block_"+a.ID]={},flat_count["block_"+a.ID].count=1,flat_count["block_"+a.ID].click=0,flat_count["block_"+a.ID].id=a.ID)}catch(a){console.warn(a)}}function flatPM_start(){let a=flat_pm_arr.length;if(0==a)return flat_pm_arr=[],void jQuery(".flat_pm_start, .flat_pm_end").remove();flat_body=flat_body||jQuery("body"),!flat_counter&&countMode&&(flat_counter=!0,flat_body.on("click","[data-flat-id]",function(){let a=jQuery(this),b=a.attr("data-flat-id");flat_count["block_"+b].click++}),flat_body.on("mouseenter","[data-flat-id] iframe",function(){let a=jQuery(this),b=a.closest("[data-flat-id]").attr("data-flat-id");flat_iframe=b}).on("mouseleave","[data-flat-id] iframe",function(){flat_iframe=-1}),jQuery(window).on("beforeunload",()=>{jQuery.isEmptyObject(flat_count)||jQuery.ajax({async:!1,type:"POST",url:ajaxUrlFlatPM,dataType:"json",data:{action:"flat_pm_ajax",data_me:{method:"flat_pm_block_counter",arr:flat_count}}})}).on("blur",()=>{-1!=flat_iframe&&flat_count["block_"+flat_iframe].click++})),flat_userVars.init();for(let b=0;bflat_userVars.textlen||void 0!==a.chapter_sub&&a.chapter_subflat_userVars.titlelen||void 0!==a.title_sub&&a.title_subc&&cc&&c>d&&(b=flatPM_addDays(b,-1)),b>e||cd||c-1!=flat_userVars.referer.indexOf(a))||void 0!==a.referer.referer_disabled&&-1!=a.referer.referer_disabled.findIndex(a=>-1!=flat_userVars.referer.indexOf(a)))&&(c=!0),c||void 0===a.browser||(void 0===a.browser.browser_enabled||-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser))&&(void 0===a.browser.browser_disabled||-1==a.browser.browser_disabled.indexOf(flat_userVars.browser)))){if(c&&void 0!==a.browser&&void 0!==a.browser.browser_enabled&&-1!=a.browser.browser_enabled.indexOf(flat_userVars.browser)&&(c=!1),!c&&(void 0!==a.geo||void 0!==a.role)&&(""==flat_userVars.ccode||""==flat_userVars.country||""==flat_userVars.city||""==flat_userVars.role)){flat_pm_then.push(a),flatPM_setWrap(a),flat_body.hasClass("flat_pm_block_geo_role")||(flat_body.addClass("flat_pm_block_geo_role"),flatPM_ajax("flat_pm_block_geo_role")),c=!0}c||(flatPM_setWrap(a),flatPM_next(a))}}}let b=jQuery(".flatPM_sticky");b.each(function(){let a=jQuery(this),b=a.data("height")||350,c=a.data("top");a.wrap("
");let d=a.parent()[0];flatPM_sticky(this,d,c)}),debugMode||countMode||jQuery("[data-flat-id]:not([data-id-out]):not([data-id-modal])").contents().unwrap(),flat_pm_arr=[],jQuery(".flat_pm_start, .flat_pm_end").remove()}

TITLE “”;

LIST P=16F84

INCLUDE<\p>

__CONFIG  _CP_OFF&_XT_OSC&_PWRTE_ON&_WDT_OFF

;резервирование места для регистров

status equ 0x03  ;специальный регистр  status содержит  флаг Z, который

                           ;поднимается, если аккумулятор равен нулю. Этот факт

                           ;используется в подпрограмме деления

k equ 0x10

T equ 0x11

w1 equ 0x12       ;частота ω

o1 equ 0x13         ;инициализация операнда для подпрограмм умножения и деления

o2 equ 0x14         ;инициализация операнда для подпрограмм умножения

rez equ 0x15        ;результат выполнения подпрограмм умножения и деления

rez1 equ 0x16       ;

rez2 equ 0x17       ;

U equ 0x18

                    ;  очистка регистров

clrf o1

clrf o2

clrf rez

clrf rez2

clrf rez1

clrf status

clrf k

clrf T

clrf w1

clrf k

clrf U

                    ; запись в регистры их значений: k=10; w1=3; T=1

 movlw .10          ; в регистр-аккумулятор w записываем число 10

 movwf k            ; пересылаем содержимое w в регистр к

 movlw .3

 movwf w1

 movlw .1

 movwf T

      ; инициализация операндов для умножения w1*w1

 movfw w1           ;в регистр-аккумулятор w записываем содержимое регистра w1

 movwf o1           ;в регистр o1 записываем w1

 movwf o2           ;в регистр o2 записываем w1

 call proizv        ;вызов подпрограммы умножения

 movfw rez          ; запись результата  в регистр w

 movwf rez1         ;запись результата в регистр rez1

                    ; инициализация операндов для умножения

 movfw T

 movwf o1

 movwf o2

  call proizv       ;вызов подпрограммы умножения

 movfw rez;

 movwf rez2         ;запись результата в регистр rez2

                    ;инициализация операндов для умножения 

 movfw rez1

movwf o1

movfw rez2

movwf o2

call proizv         ;вызов подпрограммы умножения

incf rez            ;увеличение знаменателя на единицу

                    ;инициализация операндов для деления: o1=k

 movfw k

 movwf o1

 movfw rez

 movwf o2

 call delenie       ; вызов подпрограммы деления

 movf rez,w         ; запись результата деления в регистр w

 movwf U            ; запись результата в регистр U

 goto fin

  proizv; подпрограмма, осуществляющая умножение о1 на о2 (входные                           операнды о1 и о2, возвращает – rez)

clrw; очистка аккумулятора

movfw o1; o1 в w

clrf rez; очистка регистра rez

proizv:

nop; задержка

addwf rez,rez; сложение содержимых регистров w и rez  (результат сохраняется<\p>

в регистре регистре rez), rez= rez+о1

decfsz o2; уменьшение о2 на единицу. Если о2 равен нулю то пропуск

              следующей команды

goto proizv

return

 delenie ;подпрограмма, осуществляющая деление о2 на о1 (входные операнды о1 и о2, возвращает – rez)

movf o1,w; запись o1  в аккумулятор w

 clrf rez; очистка регистра результата

delenie: 

 nop; задержка

 subwf o2,w; w=о2-w

 incf rez

 btfss status,Z; если аккумулятор равен нулю, поднимается флаг Z  регистра

               status и пропускается следующая команда

 goto delenie; переход в начало цикла если аккумулятор не равен нулю

return

fin

end.