Национальный исследовательский ядерный университет «МИФИ»
Опубликован: 25.07.2003 | Доступ: свободный | Студентов: 10426 / 2574 | Оценка: 4.44 / 4.22 | Длительность: 18:11:00
ISBN: 978-5-9556-0082-6
Специальности: Разработчик аппаратуры
Лекция 12:

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

< Лекция 11 || Лекция 12: 12345 || Лекция 13 >
Комментарии

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

Расширения файлов, используемые MPASM и утилитами

Существует ряд расширений файлов, применяемых по умолчанию MPASM и связанными утилитами. Назначения таких расширений приведены в табл. 6.4.

Таблица 6.4. Используемые по умолчанию назначения расширений файлов.
Расширение Назначение
.ASM Входной файл ассемблера для MPASM <source_name>.ASM
.OBJ Выходной файл перемещаемого объектного кода из MPASM <source_name>.OBJ
.LST Выходной файл листинга, генерируемый ассемблером MPASM или MPLINK: <source_name>.LST
.ERR Выходной файл ошибок из MPASM: <source_name>.ERR
.MAP Выходной файл распределения памяти из MPASM: <source_name>.MAP
.HEX Выходной файл объектного кода в шестнадцатиричном представлении из MPASM: <source_name>.HEX
.HXL/.HXH Выходной файл объектного кода в шестнадцатиричном представлении c раздельным представлением младших и старших байт: <source_name>.HXL, <source_name>.HXH
.LIB Библиотечный файл, созданный MPLIB и привязанный компоновщиком MPLINK: <source_name>.LIB
.LNK Выходной файл компоновщика: <source_name>.LNK
.COD Выходной символьный файл или файл отладчика. Формируются MPASM или MPLINK: <source_name>.COD

Листинг представляет собой текстовый файл в формате ASCII, который содержит машинные коды, сгенерированные в соответствии с каждой ассемблерной командой, директивой ассемблера или макрокомандой исходного файла. Файл листинга содержит: имя продукта и версии, дату и время, номер страницы вверху каждой страницы.

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

Директивы языка

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

Существует четыре основных типа директив в MPASM:

  • директивы данных;
  • директивы листинга;
  • управляющие директивы;
  • макро-директивы.

Директивы данных управляют распределением памяти и обеспечивают доступ к символическим обозначениям данных.

Директивы листинга управляют листингом файла MPASM и форматом. Они определяют спецификацию заголовков, генерацию страниц и другие функции управления листингом.

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

Макро-директивы управляют исполнением и распределением данных в пределах определений макротела.

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

CODE – начало секции объектного кода

Синтаксис:

[<label>] code [ROM address>]

Используется при генерации объектных модулей. Объявляет начало секции программного кода. Если <label> не указана, секция будет названа code. Стартовый адрес устанавливается равным указанному значению или нулю, если адрес не был указан.

Пример:

RESET code H'01FF'
     goto START

#DEFINE – определить метку замены текста

Синтаксис:

#define <name> [<string>]

Директива задает строку <string>, замещающую метку <name> всякий раз, когда та будет встречаться в исходном тексте.

Символы, которые определены директивой #DEFINE, не могут быть просмотрены симулятором. Используйте вместо этой директивы EQU.

Пример

#define length 20
#define control 0x19,7
#define position (X,Y,Z) (y-(2 * Z +X)).
test_label dw position(1, length, 512)
bsf control     ; установить в 1 бит 7 в f19

END – конец программного блока

Синтаксис:

end

Определяет конец программы. После остановки программы таблица символов сбрасывается в файл листинга.

Пример:

start
;исполняемый код
;
end     ; конец программы

EQU – определить ассемблерную константу

Синтаксис:

<label> equ <expr>

Здесь <expr> – это правильное MPASM выражение. Значение выражения присваивается метке <label>.

Пример:

four equ 4   ; присваивает численное значение
             ; метке four

INCLUDE – включить дополнительный исходный файл

Синтаксис:

include <<include_file>>
include "<include_file>"

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

Пример:

include "c:\sys\sysdefs.inc" ; system defs
include <addmain.asm> ; register defs

LIST – установить параметры листинга

Синтаксис:

list [<list_option>, , <list_option>]

Директива <list> разрешает вывод листинга, если он до этого был запрещен. Кроме того, один из параметров листинга может быть изменен для управления процессом ассемблирования в соответствии с табл. 6.5.

Таблица 6.5. Параметры, используемые директивой list.
Параметр Значение по умолчанию Описание
C=nnn 80 Количество символов в строке
n=nnn 59 Количество строк на странице
t=ON|OFF OFF Укорачивать строки листинга
p=<type> None Установить тип процессора: PIC16C54, PIC16C84, PIC16F84, PIC17C42 и др.
r=<radix> HEX Установить систему счисления по умолчанию: hex, dec, oct.
w=<level> 0

Установить уровень сообщений диагностики в файле листинга:

0 – выводить все сообщения;

1 – выводить предупреждения и ошибки;

2 – выводить только ошибки.

x=ON|OFF OFF Включить или выключить макрорасширения.

NOLIST – выключить выход листинга

Синтаксис:

NOLIST

ORG – установить начальный адрес программы

Синтаксис:

<label> org <expr>

Устанавливает начальный адрес программы для последующего кода в соответствии с адресом в <expr>. MPASM выводит перемещаемый объектный код, а MPLINK разместит код по определенному адресу. Если метка <label> определена, то ей будет присвоена величина <expr>. По умолчанию начальный адрес имеет нулевое значение. Директива может не использоваться, если создается объектный модуль.

Пример:

int_1 org 0x20; Переход по вектору 20
int_2 org int_1+0x10; Переход по вектору 30

PROCESSOR – установить тип процессора

Синтаксис:

processor <processor_type>

Устанавливает тип используемого процессора <processor_type>: [16C54 | 16C55 | 16C56 | 16C57 | 16C71 | 16C84 | 16F84 | 17C42]. Общие процессорные семейства могут быть выбраны как: [16C5X | 16CXX | 17CXX]

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

SET – определить ассемблерную переменную

Синтаксис:

<label> set <expr>

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

Пример:

area set 0
width set 0x12
length set 0x14
area set length * width
length set length + 1

TITLE – Определить программный заголовок

Синтаксис:

title "<title_text>"

Эта директива устанавливает текст, который используется в верхней строке страницы листинга. <title_text> - это печатная ASCII последовательность, заключенная в двойные скобки. Она может быть до 60 символов длиной.

Пример

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

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