Директивы это программирование

СТРАНИЦА11/13

Микроконтроллеры и люди общаются посредством языка программирования, называемого ассемблером. Само слово Ассемблер не имеет более глубокого значения, оно соответствует названиям других языков. Таких как английский или французский. Точнее говоря, язык ассемблера-это лишь временное решение. Чтобы микроконтроллер мог понять программу, написанную на ассемблере. Она должна быть скомпилирована на язык нулей и единиц. Язык ассемблера и Ассемблер не имеют одного и того же значения. Первый относится к набору правил, используемых для написания программы для микроконтроллера. В то время как последний относится к программе на персональном компьютере. Используемой для перевода операторов ассемблера на язык нулей и единиц.

Скомпилированная программа также называется Машинным кодом. Язык ассемблера понятен человеку, потому что он состоит из осмысленных слов и символов алфавита. Возьмем, например, команду В машинном коде одна и та же команда представлена 14-битным массивом нулей и единиц. Понятных микроконтроллеру. Все команды языка ассемблера аналогично компилируются в соответствующий массив нулей и единиц. Файл данных, используемый для хранения скомпилированной программы, называется

Имя происходит от шестнадцатеричного представления файла данных и также имеет суффикс После генерации файл данных загружается в микроконтроллер с помощью программатора. Программы на ассемблере могут быть написаны в любой программе для обработки текста (редакторе). Способной создавать файлы данных ASCII на жестком диске или в специализированной рабочей среде. Такой как MPLAB. Описанная ниже.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig1

ЭЛЕМЕНТЫ АССЕМБЛЕРА

Программа, написанная на ассемблере, состоит из нескольких элементов. Которые по-разному интерпретируются при компиляции программы в исполняемый файл данных.

Использование этих элементов требует строгих правил. И на них необходимо обращать особое внимание при написании программы. Чтобы избежать ошибок.

СИНТАКСИС ЯЗЫКА АССЕМБЛЕРА

Как уже упоминалось, необходимо соблюдать некоторые специфические правила. Чтобы процесс компиляции в исполнительный шестнадцатеричный код проходил без ошибок. Обязательные правила, объясняющие, как последовательности выражений собираются вместе. Чтобы сформировать операторы. Составляющие программу на языке ассемблера. Называются синтаксисом. Их всего несколько:

  • Каждая строка программы может состоять максимум из 255 символов;

  • Каждая строка программы, которая должна быть скомпилирована, должна начинаться с символа, метки. Мнемоники или директивы;
  • Текст, следующий за знаком
  • Все элементы одной строки программы (метки. Инструкции и т. д.) должны быть разделены хотя бы одним символом пробела. Для большей наглядности вместо него обычно используется кнопочная ВКЛАДКА. Чтобы было легко разграничивать столбцы метками. Директивами и т. Д. в программе.

ЭТИКЕТКИ

Метка представляет текстовую версию некоторого адреса в ПЗУ или оперативной памяти. Каждая метка должна начинаться в первом столбце с буквы алфавита или Кроме того, он легко используется:

  • Достаточно ввести имя метки вместо 16-битного адреса в инструкции. Вызывающей какую-либо подпрограмму или переход. Метка с таким же названием также должна быть написана в начале строки программы. В которой запускается подпрограмма или где должен быть выполнен переход. Как правило, этикетки имеют легко узнаваемые имена.

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

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig2

КОММЕНТАРИИ

Комментарий часто представляет собой пояснительный текст, написанный программистом для того. Чтобы сделать программу более понятной и понятной.

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

ИНСТРУКЦИИ

Инструкции определяются производителем для каждого семейства микроконтроллеров. Поэтому пользователь должен следовать правилам их использования. Способ написания инструкций также называется синтаксисом инструкций. Инструкции movlpgotto

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig3

ОПЕРАНДЫ

Операнд-это значение (аргумент), на котором действует инструкция. Именуемая мнемонической. Операнды могут быть регистром, переменной, литеральной константой, меткой или адресом памяти.

pic-микроконтроллеры-примеры-язык сборки-appa_fig4

ДИРЕКТИВЫ

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

Директива ПРОЦЕССОРА

Эта директива должна быть написана в начале каждой программы. Он определяет тип микроконтроллера. Для которого написана программа. Например:

Процессор 16f887

Директива экватора

Эта директива используется для замены числового значения символом. Таким образом, некоторому определенному месту в памяти присваивается имя. Например:

МАКСИМАЛЬНЫЙ ЭКВАЛАЙЗЕР H’25’

Это означает. Что ячейке памяти по адресу 25 (шестнадцатеричному) присваивается имя Каждое появление метки Символы могут быть определены таким образом только один раз в программе. Что эта директива в основном используется в начале программы.

Директива ОРГ

Эта директива указывает место в памяти программы. Куда должна быть помещена следующая директива программы. Например:

 ОРГ 0x100 НАЧАЛО ... ... ... ОРГ 0x1000 СТОЛ ... ..

Эта программа запускается в местоположении 0x100. Таблица, содержащая данные, должна храниться в местоположении 1024 (1000h).

КОНЕЧНАЯ директива

Каждая программа должна быть завершена с помощью этой директивы. Как только программа сталкивается с этой директивой. Ассемблер немедленно прекращает компиляцию. Например:

... END ;Конец программы

Директива \$INCLUDE

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

Директивы CBLOCK и ENDC

Все переменные (их имена и адреса), которые будут использоваться в программе. Должны быть определены в начале программы. Из-за этого нет необходимости указывать адрес каждой указанной переменной позже в программе. Вместо этого достаточно указать адрес первого из них с помощью директивы CBLOCK. А затем перечислить все остальные. Компилятор автоматически присваивает этим переменным соответствующие адреса в соответствии с порядком их перечисления. Наконец, директива ENDC указывает конец списка переменных.

CBLOCK 0x20 НАЧАЛО ; адрес 0x20 RELE ; адрес 0x21 СТОП ; адрес 0x22 СЛЕВА ; адрес 0x23 СПРАВА ; адрес 0x24 ЭНДК ...

Директивы IF, ENDIF и ELSE

Эти директивы используются для создания так называемых условных блоков в программе. Каждый из этих блоков начинается с директивы IF и заканчивается директивой ENDIF или ELSE. Оператор или символ (в скобках), следующий за директивой IF, представляет собой условие, определяющее. Какая часть программы должна быть скомпилирована:

  • Если оператор верен или значение символа равно единице, программа компилирует все инструкции. Написанные до директивы ELSE или ENDIF; и
  • Если оператор неверен или значение символа равно нулю, то компилируются только инструкции. Написанные после директив ELSE или ENDIF.

Пример 1:

ВЫЗОВ Table_2 ВЫЗОВ ЭНДИФ ...

Если программа выпущена после версии 3 (оператор прав). То выполняются подпрограммы Если утверждение в скобках неверно (ВЕРСИЯ Пример 2: Если значение символа В противном случае, если Model=0, то инструкции между IF и ELSE игнорируются. Тогда как инструкции после директивы ELSE компилируются.

ЕСЛИ (Модель) БУФЕР MOVFW MOVWF МАКСИМУМ ЕЩЁ MOVFW BUFFER1 MOVWF МАКСИМУМ ЭНДИФ ...

Директива BANKSEL

Для доступа к регистру SFR необходимо выбрать соответствующий банк в оперативной памяти с помощью битов RP0 и RP1 регистра СОСТОЯНИЯ. В данном случае используется эта директива. Просто, поскольку файл данных Столкнувшись с этой директивой. Ассемблер самостоятельно выбирает биты RP0 и RP1 для указанного регистра. Например:

 ... БАНКСЕЛЬ ТРИСБ CLRF TRISB MOVLW B’01001101’ БАНКСЕЛЬ ПОРТБ MOVWF PORTB ...

ПРИМЕР НАПИСАНИЯ ПРОГРАММЫ

Следующий пример иллюстрирует, как выглядит простая программа, написанная на ассемблере.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig5

Помимо обычных правил ассемблера, существуют также некоторые неписаные правила. Которые следует соблюдать при написании программ. Один из них заключается в том, чтобы написать в нескольких словах в начале программы, как называется программа. Для чего она используется, версия. Дата выпуска. Тип микроконтроллера. Для которого она написана. И имя программиста. Поскольку эта информация не имеет значения для ассемблера, она записывается в виде комментария. Который всегда начинается с точки с запятой ‘;’ и может быть записан в новой строке или сразу после команды. После написания этого общего комментария пришло время выбрать микроконтроллер с помощью директивного ПРОЦЕССОРА. За этой директивой следует другая. Используемая для включения в программу всех определений внутренних регистров микроконтроллера PIC16F887. Эти определения-не что иное, как возможность адресовать порт B и другие регистры как PORTB вместо 06h. Что делает программу более четкой и разборчивой. Для того чтобы микроконтроллер работал правильно, необходимо определить несколько параметров. Таких как тип генератора. Состояние сторожевого пса и внутренняя схема сброса. Это делается с помощью следующей директивы:

_CONFIG _CP_OFF&_WDT_OFF&PWRTE_ON&XT_OSC

Когда все необходимые элементы определены. Можно приступать к написанию программы. Прежде всего, необходимо указать адрес. С которого микроконтроллер запускается при включении питания (org 0x00), а также адрес. С которого программа переходит к выполнению при возникновении прерывания (org 0x04). Поскольку эта программа очень проста. Достаточно использовать командуgoto MainСледующая команда выбирает банк памяти 1 чтобы включить доступ к регистру TRISB и настроить порт B в качестве выходного сигнала (banksel TRISB). Основная программа завершается выбором банка памяти 0 и установкой всех выводов порта B на логику один (1)(movlw 0xFF, movwf PORTB). Необходимо создать цикл, чтобы программа не Для этого существует бесконечный цикл, выполняемый все время. Пока микроконтроллер включен. end

ФАЙЛЫ ДАННЫХ. ПОЛУЧЕННЫЕ В РЕЗУЛЬТАТЕ КОМПИЛЯЦИИ ПРОГРАММЫ

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

  • Файл исполнительных данных (Program_Name.HEX);
  • Файл данных об ошибке (Program_Name.ERR); и
  • Файл данных списка (Program_Name.LST).

Первый файл содержит скомпилированную программу, которая загружается в микроконтроллер. Его содержание не дает никакой важной для программиста информации, поэтому здесь оно обсуждаться не будет. Второй файл содержит ошибки, допущенные в процессе записи и обнаруженные компилятором в процессе компиляции. Ошибки могут быть обнаружены в файле данных списка, что занимает больше времени. Поэтому файл данных ошибок больше подходит для длинных программ. Третий файл является наиболее полезным для программиста. Он содержит много информации о расположении команд и переменных в памяти на кристалле. А также о сигнализации ошибок. В конце каждого файла данных есть таблица символов, содержащая все символы, используемые в программе. Другими полезными элементами файла данных списка являются карты использования памяти и статистика ошибок. Приведенные в самом конце списка файлов.

МАКРОСЫ И ПОДПРОГРАММЫ

Одна и та же последовательность вычислительных команд обычно многократно используется в программе. Язык ассемблера очень требователен. Программист обязан позаботиться о последней мелочи при написании программы. Потому что только одна неправильная команда или имя метки могут привести к тому. Что программа не будет работать должным образом или вообще не будет работать. Поэтому менее утомительно и менее подвержено ошибкам использование последовательности инструкций в качестве единственного программного оператора. Который наверняка работает правильно. Для реализации этой идеи используются макросы и подпрограммы.

МАКРОСЫ

Макрос содержит определенные программистом символы, обозначающие последовательность строк текста. Он определяется с помощью макроса директивы который называет макрос и аргументы, если это необходимо. Макрос должен быть определен до его использования. После того. Как макрос был определен, его имя может быть использовано в программе.Когда ассемблер встречает имя макроса. Он заменяет его соответствующей последовательностью инструкций и обрабатывает их так же. Как если бы они появились в программе. Множество различных макроинструкций доступны для различных целей. Устраняя некоторую повторяемость программирования. А также упрощая написание. Чтение и понимание программы. Простейшим применением макросов может быть присвоение имени повторяемой последовательности команд. Возьмем, к примеру, процедуру включения глобального прерывания — выбор банка SFR.

имя макроса макрос arg1, arg2... ... последовательность инструкций ... эндм

В следующем примере показаны четыре макроса. Первые два макроса выбирают банки, третий включает прерывание. А четвертый отключает прерывание.

банках 0 макроса ; макро банках 0 статус КБК. RP0 ; сброс бита RP0 статус КБК, РП1 ; РП1 сбросить бит эндм ; конец макроса банк1 макро -; макро банка1 статус ЧФ. RP0 ; установить бит RP0 статус КБК, РП1 ; РП1 сбросить бит эндм ; конец макроса enableint макро ; разрешение прерываний ЧФ INTCON,7 ; Набор бит эндм ; конец макроса disableint макроса; - прерывание отключить и BCF INTCON,7 ; сброс бита endm ; Конец макроса

Макросы, определенные таким образом, сохраняются в определенном файле данных с расширением INC. Которое расшифровывается как INCLUDE data file. Как видно, эти четыре макроса не имеют аргументов. Однако при необходимости макросы могут включать аргументы. В следующем примере показаны макросы с аргументами. Pin-код настраивается в качестве входного. Если соответствующий бит регистра TRIS установлен в логический один (банк1). В противном случае он настроен как выход.

входной макрос arg1,arg2 ;Входной макрос bank1 ;Банк,содержащий регистры TRIS bsf arg1, arg2 ;Установите указанный бит (1=Вход) bank0 ;Макрос для выбора банка 0 endm ;Конец макроса выходной макрос arg1,arg2 ;Выходной макрос bank1 ;Банк,содержащий регистры TRIS bcf arg1, arg2 ;Очистить указанный бит (0=Выход) bank0 ;Макрос для выбора банка 0 endm ;Конец макроса

Макрос с аргументами может быть вызван следующим образом:

... выход TRISB,7 ;Вывод RB7 сконфигурирован как выход ...

При вызове этого макроса первый указанный аргумент TRISB заменяется первым аргументом arg1 в определении макроса. Аналогично, число 7 заменяется аргументом arg2, и генерируется следующий код:

... bsf STATUS, RP0 ;Set RP0 bit = BANK1 СТАТУС bcf, RP1 ;Сброс бита RP0 = BANK1 bcf TRISB,7 ;Настройка RB7 в качестве выходного сигнала СТАТУС bcf,RP0 ;Clear RP0 bit = BANK0 СТАТУС bcf,RP1 ;Очистить бит RP1 = BANK0 ...

С первого взгляда ясно, что программа становится более разборчивой и гибкой при использовании макросов. Основным недостатком макроса является то, что он занимает много места в памяти. Поскольку каждое имя макроса в программе заменяется его предопределенным кодом. Из-за того. Что программы часто используют макрос, все сложнее, если он длинный.

callc macro label ;Macro callc local Exit ;Define local Label within macro bnc Exit ;If C=0 jump to Exit call label ;If C=1 call subroutine at address Label(out of macro) Exit ;Локальная метка внутри макроса endm ;Конец макроса

В том случае, если макрос имеет метки. Они должны быть определены как локальные с помощью директивы local. Данный пример содержит макрос, который вызывает подпрограмму (call label в данном случае). Если установлен бит переноса регистра СОСТОЯНИЯ. В противном случае выполняется первая следующая инструкция.

ПОДПРОГРАММЫ

Asubroutine содержит последовательность инструкций. Начинается с метки (subroutine_name) и заканчивается командой return или retlw. Основное отличие от макроса заключается в том. Что подпрограмма не заменяется своим кодом в программе. А программа переходит к подпрограмме для ее выполнения. Это происходит каждый раз, когда ассемблер встречает команду call Subroutine_name в программе. При возврате командыон оставляет подпрограмму и продолжает выполнение с того места . Где он оставил основную программу. Подпрограмма может быть определена как до, так и после вызова.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig6

Как видно, в отношении макросов большое значение имеют входные и выходные аргументы. Что касается подпрограмм, то невозможно определить аргументы внутри самой подпрограммы. Однако переменные, предопределенные в основной программе. Могут использоваться в качестве аргументов подпрограммы. Логическая последовательность событий такова: определение переменных, вызов подпрограммы, которая их использует. И в конце чтение переменных. Измененных при выполнении подпрограммы. Программа в следующем примере выполняет добавление двух 2-байтовых переменных ARG1 и ARG2 и перемещает результат в переменную RES. При использовании 2-байтовых переменных необходимо определить более высокий и более низкий байт для каждого из них. Сама программа очень проста. Сначала он добавляет младшие байты переменных ARG1 и ARG2, а затем и более высокие. Если сумма сложения двух нижних байтов больше 255 (максимальное значение байта). Остаток добавляется к переменной RESH.

; Программа для добавления двух 16-битных чисел ; Версия: 1.0 Дата: 25 апреля 2007 MCU:PIC16F887 ПРОЦЕССОР 16f887 ; Определяющий процессор #include __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC Cblock 0x20 ; Начало ОЗУ ARG1H ; Аргумент 1 старший байт ARG1L ; Аргумент 1 нижний байт ARG2H ; Аргумент 2 старший байт ARG2L ; Аргумент 2 младший байт RESH ; Результат более высокий байт RESL ; Результат нижний байт endc ; Конец переменных ORG 0x00 ; Сброс вектора goto Start Start ; Запись значений в переменные movlw 0x01 ; ARG1=0x0104 movwf ARG1H movlw 0x04 movwf ARG1L movlw 0x07 ; ARG2=0x0705 movwf ARG2H movlw 0x05 movwf ARG2L Main ; Main program call Add16 ; Call subroutine Add16 Loop goto Loop ; Оставайтесь здесь Add16 ; Подпрограмма для добавления двух 16-битных чисел clrf RESH ; RESH=0 movf ARG1L,w ; w=ARG1L addwf ARG2L,w ; w=w+ARG2L movwf RESL ; RESL=w btfsc STATUS,C ; Результат больше 255? incf RESH,f ; Если больше, приращение RESH на единицу movf ARG1H,w ; w=ARG1H addwf ARG2H,w ; w=w+ARG2 addwf RESH,f ; RESH=w return ; Return from subroutine end ; End of program

короче говоря

Основное различие между макросами и подпрограммами заключается в том. Что макрос после компиляции заменяется его кодом (позволяет программисту вводить меньше). Он также может иметь аргументы, в то время как подпрограмма использует меньше памяти, но не имеет аргументов.

MPLAB

MPLAB-это программный пакет Windows, который позволяет легко писать программы, а также легко разрабатывать их. Лучше всего описать его как среду разработки стандартного программного языка. Предназначенного для программирования на ПК. MPLAB технически упрощает некоторые операции, состоящие из множества параметров. Которые до появления среды IDE* выполнялись из командной строки. Однако вкусы различны, и есть некоторые программисты. Которые предпочитают стандартные редакторы и компиляторы командной строки. Каждая программа, написанная на MPLAB, понятна, но есть и справочная документация — на всякий случай.

УСТАНОВКА MPLAB

MPLAB состоит из нескольких частей:

  • Программа, которая сортирует файлы данных одного и того же проекта в одну группу (Менеджер проектов);
  • программа для генерации и обработки текста (Текстовый редактор);
  • имитатор используется для имитации работы программы, загруженной в микроконтроллер.

Кроме того, существуют также встроенные программисты, такие как PICStart Plus и ICD (In Circuit Debugger), которые могут быть использованы для программирования программного обеспечения в микроконтроллерное устройство PIC. Поскольку они не являются предметом этой книги, они упоминаются только как варианты. Для того чтобы запустить MPLAB, ваш компьютер должен содержать:

  • Совместимый с ПК компьютер относящийся к классу 486 или выше;
  • Любая операционная система Windows;
  • Графическая карта VGA;
  • Память 8 МБ (рекомендуется 32 МБ);
  • Доступный жесткий диск объемом 200 МБ; и
  • Мышь.

Установка MPLAB идет в первую очередь. Файлы данных с компакт-диска MPLAB должны быть скопированы на жесткий диск. Процесс установки аналогичен почти всем другим установкам Windows. Сначала появляется окно приветствия, затем параметры выбора и, наконец, сама установка. Появится сообщение о том. Что программа успешно установлена и готова к использованию. Вы готовы? Шаги, которые необходимо выполнить до установки:

  1. Запустите Microsoft Windows;
  2. Вставьте компакт — диск в компакт-диск;
  3. Нажмите кнопку ПУСК и выберите опцию ВЫПОЛНИТЬ;
  4. Нажмите кнопку ОБЗОР и выберите Привод CD-ROM;
  5. Найдите папку MPLAB на компакт-диске.

Теперь все готово к началу установки. На следующих рисунках описаны шаги установки. pic-микроконтроллеры-примеры-язык сборки-appa_fig7

Нажмите на этот значок, чтобы запустить процесс…

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig8

Что — то происходит… Появившаяся картинка указывает на то, что процесс установки только начался!

Следующее окно содержит слово Нужны объяснения? На самом деле программа напоминает вам закрыть все активные программы. Чтобы не мешать процессу установки. Дальше — конечно!

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig9

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

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig10

Вы хотите установить все программное обеспечение? ДА. Далее…

pic-микроконтроллеры-примеры-язык сборки-appa_fig11

Как и другие программы, MPLAB также должен быть установлен в папку. Это может быть любая папка на любом жестком диске. Если нет необходимости вносить изменения, выберите указанный адрес и нажмите кнопку Далее.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig12

Еще одна лицензия, еще одно принятие опций, заданных компьютером… Дальше, Дальше… Будьте терпеливы!

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig13

Наконец-то! Это то, чего вы ждали. Нажмите кнопку Готово. Компьютер будет перезапущен вместе с программой, сохраненной на жестком диске. Все в порядке!

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig14

Нажмите на значок рабочего стола MPLAB, чтобы запустить программу и узнать о ней больше.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig15

Как видно, MPLAB похож на большинство программ Windows. Помимо рабочей области, есть меню (содержит опции: Файл, Правка и т.д.), панели инструментов (содержит различные значки) и строка состояния в нижней части окна. Как и в Windows, существует правило иметь ярлыки для наиболее часто используемых параметров программы. Созданных для того. Чтобы легко получить к ним доступ и тем самым ускорить работу. Эти ярлыки на самом деле являются значками под строкой меню. Другими словами, все параметры, содержащиеся в панели инструментов, также содержатся в меню.

РАЗРАБОТКА ПРОЕКТОВ

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

  1. Сделайте проект;
  2. Написать программу; и
  3. Скомпилируйте его.

Для того чтобы сделать проект, необходимо нажать кнопку Появится окно приветствия.

pic-микроконтроллеры-примеры-язык сборки-appa_fig16

Продолжайте работу над проектом, нажав кнопку ДАЛЕЕ. Затем выберите микроконтроллер, который вы будете использовать. В нашем случае это микроконтроллер PIC16F887.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig17

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

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig18

Документы, содержащиеся в проекте, не всегда должны быть написаны на MPLAB. Документы, написанные какой-либо другой программой, также могут быть включены в проект. В данном примере таких документов нет. Просто нажмите кнопку Далее.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig19

Нажмите кнопку ГОТОВО, чтобы завершить проект. Само окно содержит параметры проекта.

НАПИСАНИЕ НОВОЙ ПРОГРАММЫ

Когда проект будет создан, появится окно, показанное на рисунке ниже.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig20

Следующий шаг-написать программу. Откройте новый документ, нажав . Появится текстовый редактор в среде MPLAB. Сохраните документ в папке D:\PIC проекты с помощью команды и назовите ее Очевидно. Что вы можете найти свои файлы там. Где пожелаете. На любом жестком диске. Который пожелаете. Использование общего каталога для хранения всех ваших различных проектов и подкаталогов имеет хороший смысл.

Пример:

D:\Pic Проекты Проект светодиодной Вспышки Все связанные файлы Проект Подсчета событий Все связанные файлы Проект светодиодного сканирования Все связанные файлы

После того. Как После этого появится небольшое окно с двумя вариантами. Выберите первый

pic-микроконтроллеры-примеры-язык сборки-appa_fig21

Щелчок по этой опции открывает другое окно, содержащее папку PIC вместе с документом Blink.asm. См. рисунок ниже.

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig22

Нажмите кнопку

Пример написания программы

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

;Программа для установки выводов порта B в логику один (1). ;Версия: 1.0 Дата: 25 апреля 2007 MCU: PIC16F887 Программист: Джон Смит ;***** Объявление и настройка микроконтроллера ***** ПРОЦЕССОР 16f887 #include __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;***** Объявление переменной ***** Cblock 0x20 ; Первое свободное расположение ОЗУ endc ; Никаких переменных ;;***** Структура памяти программы ***** ORG 0x00 ; Сброс вектора goto Main ; После сброса перейти в это место ОРГ 0x04 ; Прерывание вектора goto Main ; Нет процедуры прерывания Main ; Запустите программу banksel TRISB ; Выберите банк, содержащий TRISB clrf TRISB ; Порт B настроен как выходной банкsel PORTB ; Выберите банк, содержащий PORTB movlw 0xff ; W=FF movwf PORTB ; Переместите W в порт B Loop goto Loop ; Перейти к метке Loop Конец

Программа должна быть записана в окно copy/paste. Появится новое окно. Последнее предложение является самым важным, потому что оно говорит нам. Удалось ли выполнить компиляцию или нет. Ясно, ЧТО СБОРКА УДАЛАСЬ’ сообщение означает. Что ошибка не произошла и компиляция была успешно выполнена. В случае возникновения ошибки необходимо дважды щелкнуть по сообщению, ссылающемуся на нее. В окне

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig23

ТРЕНАЖЁР

Asimulator-это часть среды MPLAB. Которая обеспечивает лучшее понимание работы микроконтроллера. Вообще говоря, моделирование-это попытка смоделировать реальную или гипотетическую ситуацию так. Чтобы ее можно было изучить. Чтобы увидеть. Как работает система. С помощью симулятора также можно контролировать текущие значения переменных. Регистров и состояний выводов порта. Честно говоря, симулятор не имеет одинакового значения для всех программ. Если программа проще (как в нашем примере), моделирование не имеет большого значения. Потому что установка выводов порта B на логический номер один (1) совсем не сложна. Однако в более сложных программах, содержащих таймеры. Различные условия и запросы (особенно математические операции). Тренажер может быть очень полезен. Как следует из самого названия, имитация означает имитацию работы микроконтроллера. Как и микроконтроллер. Имитатор выполняет команды одну за другой (строка за строкой) и постоянно обновляет состояние всех регистров. Таким образом, пользователь просто контролирует выполнение программы. В конце написания программы пользователь должен сначала протестировать ее в симуляторе перед выполнением в реальной среде. К сожалению, это одна из многих хороших вещей. Которые упускаются из виду программистом из-за его характера как такового и отсутствия качественных симуляторов.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig24

Симулятор активируется нажатием на , как показано на рисунке. В результате появляется только несколько значков, связанных с симулятором. Их значения таковы::

Запускает выполнение программы на полной скорости. В этом примере имитатор выполняет программу на полной (нормальной) скорости, пока она не остановится. Щелкнув значок ниже.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig25

Приостанавливает выполнение программы. Программа может продолжать выполняться шаг за шагом или снова на полной скорости.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig26

Запускает выполнение программы с дополнительной скоростью. Скорость выполнения задается в диалогеDebugger/Settings/Animation/Realtime Updates.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig27

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

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig28

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

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig29

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

pic-микроконтроллеры-примеры-на-ассемблере-язык-appa_fig30

Как следствие этого, в начале программы располагается зеленая линия, а счетчик программ PCL очищается до нуля. Обратитесь к окну Специальные регистры функций, показанному ниже.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig31

Помимо SFR, полезно иметь представление о файловых регистрах. Окно, содержащее их, появляется при нажатии кнопки . Если программа содержит переменные, то хорошо следить и за их значениями. Каждой переменной присваивается окно (Watch Windows), нажав option.

pic-микроконтроллеры-примеры-на-ассемблере-appa_fig32

Если программа содержит переменные, то полезно следить и за их значениями. Каждой переменной присваивается окно (Watch Windows), если нажать option. После того как все переменные и регистры, представляющие интерес, станут доступны в рабочей области симулятора. Можно начинать процесс моделирования. Следующая инструкция может быть либо Step into, либо Step over в зависимости от того. Хотите ли вы войти в подпрограмму или нет.