Опубликован: 25.07.2003 | Уровень: для всех | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 12:

Разработка программного обеспечения для PIC-микроконтроллеров

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >
Аннотация: В этой лекции рассказывается об основных этапах проектирования и разработки цифровых устройств и систем на основе микроконтроллеров, а также приводится обзор методов совместной отладки аппаратных и программных средств.

6.2. Разработка программного обеспечения для PIC-микроконтроллеров

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

Основным инструментом для профессиональной разработки программ является ассемблер, предполагающий детализацию на уровне команд МК. Только ассемблер позволяет максимально использовать ресурсы кристалла.

Для микроконтроллеров PIC выпущено большое количество различных средств разработки. В данной главе речь пойдет о средствах, предоставляемых фирмой Microchip, которые весьма эффективны и широко используются на практике.

6.2.1. Ассемблер MPASM

Ассемблер MPASM представляет собой интегрированную программную среду для разработки программных кодов PIC микроконтроллеров всех семейств. Выпускается фирмой Microchip в двух вариантах: для работы под DOS и для работы под Windows 95/98/NT. Ассемблер MPASM может использоваться как самостоятельно, так и в составе интегрированной среды разработки MPLAB. Он включает несколько программ: собственно MPASM, MPLINK и MPLIB, причем каждая из них обладает собственным интерфейсом.

Программа MPASM может использоваться для двух целей:

  • генерации исполняемого (абсолютного) кода, предназначенного для записи в МК с помощью программатора;
  • генерации перемещаемого объектного кода, который затем будет связан с другими ассемблированными или компилированными модулями.

Исполняемый код является для MPASM выходным кодом по умолчанию. При этом все переменные источника должны быть явно описаны в тексте программы или в файле, подключаемом с помощью директивы INCLUDE <filename>. Если при ассемблировании не выявляется ошибок, то генерируется выходной .hex-файл, который может быть загружен в МК с помощью программатора.

При использовании ассемблера MPASM в режиме генерации перемещаемого объектного кода формируются объектные модули, которые могут быть впоследствии объединены с другими модулями при помощи компоновщика MPLINK. Программа-компоновщик MPLINK преобразует перемещаемые объектные коды в исполняемый бинарный код, привязанный к абсолютным адресам МК. Библиотечная утилита MPLIB позволяет для удобства работы сгруппировать перемещаемые объекты в один файл или библиотеку. Эти библиотеки могут быть связаны компоновщиком MPLINK в файл выходного объектного кода ассемблера MPASM.

Программы MPASM и MPLINK доступны через оболочку MPASM, тогда как MPLIB доступна только со своей командной строки.

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

Ассемблер MPASM может быть вызван командной строкой

MPASM [/<Option>[ /<Option>...]] <file_name>

где /<Option> означает выбор режима работы ассемблера в командной строке; <file_name> – имя файла на ассемблирование.

Режимы работы ассемблера, выбранные по умолчанию, приведены в табл. 6.1.

Таблица 6.1. Режимы работы ассемблера по умолчанию.
Выбор Значение по умолчанию Описание
? N/A Вызвать помощь
a INHX8M Генерировать абсолютный .COD и hex выход непосредственно из ассемблера:
c On Выбрать/запретить чувствительность к регистру
e On Выбрать/запретить файл ошибок
h N/A Отобразить панель помощи MPASM
l On Выбрать/запретить файл листинга, генерированный из макроассемблера.
m On Вызвать/запретить макрорасширение
o N/A Установить путь для объектных файлов /o<path>\object.file
p None Установить тип процессора: /p<processor_type> ;
q Off Разрешить/Запретить скрытый режим (запретить вывод на экран)
r Hex Определяет тип числа по умолчанию: /r<radix>
w 0

Определяет уровень диагностических сообщений в файле листинга /w<level>, где <level> может быть:

0 – сообщать все,

1 – сообщать о предупреждениях и ошибках,

2 – сообщать только об ошибках.

x Off Разрешить/запретить перекрестные ссылки в файле листинга.

Здесь и далее используются следующие соглашения по использованию символов:

  • [ ] – для аргументов по выбору;
  • < > – для выделения специальных ключей <TAB>, <ESC> или дополнительного выбора;
  • | – для взаимоисключающих аргументов (выбор ИЛИ);
  • строчные символы – для обозначения типа данных.

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

  • /<option> разрешает выбор;
  • /<option>+ разрешает выбор;
  • /<option> – запрещает выбор.

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

  • метки (labels)
  • мнемоника (mnemonics)
  • операнды (operands)
  • комментарий (comments)

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

Максимальная длина строки 255 символов.

Один или несколько пробелов должны отделять метку и мнемонику или мнемонику и операнд(ы). Операнды могут отделяться запятой. Например:

List  p=16C54, r=HEX
      ORG 0x1FF     ;Вектор сброса
      GOTO START    ;Возврат на начало
      ORG 0x000     ;Адрес начала исполнения 
                    ;программы 
START 
      MOVLW 0x0A    ;Выполнение программы 
                    ;PIC МК
      MOVLW 0x0B    ;Выполнять всегда
      GOTO START
      END
Метки

В поле метки размещается символическое имя ячейки памяти, в которой хранится отмеченный операнд. Все метки должны начинаться в колонке 1. За ними может следовать двоеточие ( :), пробел, табуляция или конец строки. Комментарий может также начинаться в колонке 1, если используется одно из обозначений комментария.

Метка может начинаться с символа или нижнего тире ( _ ) и содержать буквенные символы, числа, нижние тире и знак вопроса. Длина метки может быть до 32 символов.

Мнемоники

Мнемоники представляют собой мнемонические обозначения команды, которые непосредственно транслируются в машинный код. Мнемоники ассемблерных инструкций, директивы ассемблера и макровызовы должны начинаться, по крайней мере, в колонке 2. Если есть метка на той же линии, она должна быть отделена от этой метки двоеточием или одним или более пробелами или табуляцией.

Операнды

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

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

В ассемблере MPASM используются следующие форматы выражений:

  • текстовая строка;
  • числовые константы и Radix;
  • арифметические операторы и приоритеты;
  • High / Low операторы.

Текстовая строка – это последовательность любых допустимых ASCII символов (в десятичном диапазоне от 0 до 127), заключенная в двойные кавычки. Строка может иметь любую длину в пределах 132 колонок. При отсутствии ограничения строки она считается до конца линии. Если строка используется как буквенный операнд, она должна иметь длину в один символ, иначе будет ошибка.

Числовая константа представляет собой число, выраженное в некоторой системе счисления. Перед константой может стоять + или . Непосредственные величины в константах рассматриваются как 32-разрядные целые без знака.

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

Операторы – это арифметические символы, подобные + и , которые используются при формировании выражений. Каждый оператор имеет свой приоритет. В общем случае приоритет устанавливается слева направо, а выражения в скобках вычисляются первыми. В табл. 6.3 приведены обозначения, описания и примеры применения основных операторов MPASM.

Таблица 6.2. Системы счисления (Radix).
Тип Синтаксис Пример
Десятичная D'<цифры>' или .<цифры> D'100' или .100
16-ричная H'<цифры>' или 0x<цифры> H'9f' или 0x9f
Восьмиричная O'<цифры>' O'777'
Двоичная B'<цифры>' B'00111001'
Символьная '<символ>' или A'<символ>' 'C' или A'C'
Таблица 6.3. Основные арифметические операторы MPASM
Оператор Описание Пример
$ Текущий счетчик команд goto $ + 3
( левая скобка 1 + ( d * 4 )
) правая скобка ( lenght + 1 ) * 255
! операция "НЕ" (логическая инверсия) if ! ( a - b )
~ дополнение flags = ~ flags
- инверсия (двоичное дополнение) – 1 * lenght
High выделить старший байт слова movlw high llasid
Low выделить младший байт слова movlw low (llasid + .251)
upper выделить наибольший байт слова movlw upper (llasid + .251)
* Умножение a = c * b
/ Деление a = b / c
% Модуль lenght = totall % 16
+ Сложение Tot_len = lenght * 8 + 1
- Вычитание Entry_Son = ( Tot – 1 ) / 8
<< сдвиг влево Val = flags << 1
>> сдвиг вправо Val = flags >> 1
>= больше либо равно if ent >= num
> больше if ent > num
< меньше if ent < num
<= меньше либо равно if ent <= num
== равно if ent == num
!= не равно if ent != num
& поразрядное "И" flags = flags & err_bit
^ поразрядное "ИСКЛЮЧАЮЩЕЕ ИЛИ" flags = flags ^ err_bit
| поразрядное "ИЛИ" flags = flags | err_bit
&& логическое "И" if (len == 512)&&( b == c )
|| логическое "ИЛИ" if (len == 512 ) || ( b == c )
= установить равным... entry_index = 0
++ увеличить на 1 (инкремент) i ++
уменьшить на 1 (декремент) i —

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

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

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >
Татьяна Фёдорова
Татьяна Фёдорова
Виктор Радкевич
Виктор Радкевич

Ответил на все тесты и сдал экзамен по курсу "Основы микропроцессорной техники". Результаты на сайе в зачетке не отображаются. Синхронизацию выполнял. 

Ирина Ткаченко
Ирина Ткаченко
Россия, Москва
Николай Ткаченко
Николай Ткаченко
Россия