BANKISEL - Выбор банка для косвенной адресации
Синтаксис bankisel <label>
Описание Используется при генерации объектного файла. Директива дает команду компилятору сгенерировать код настройки банка памяти данных для косвенного обращения к регистру <label>. Только одна метка может быть указана в директиве. Предварительно метка <label> должна быть объявлена, и соответствовать назначению директивы. Линкер генерирует соответствующий код для выбора банка памяти. Для 14 - разрядных микроконтроллеров выполняется воздействие на бит IRP в регистре STATUS в соответствии с банком размещения регистра. Для 16-разрядных микроконтроллеров генерируются команда MOVLB или MOVLR. Если пользователь сам выбирает рабочий банк памяти, то никаких дополнительных инструкций в код программы добавлено не будет.
Пример:
movlw Varl
movwf FSR
bankisel Varl
movwf INDF
BANKSEL - Выбор банка для прямой адресации
Синтаксис banksel <label>
Описание
Используется при генерации объектного файла. Директива дает команду компилятору сгенерировать код настройки банка памяти данных для прямого обращения к регистру <label>. Только одна метка может быть указана в директиве. Предварительно метка <label> должна быть объявлена, и соответствовать назначению директивы.
Линкер генерирует соответствующий код для выбора банка памяти. Для 12-разрядных микроконтроллеров устанавливает/сбрасывает бит в регистре FSR. Для 14-разрядных микроконтроллеров - изменяются биты в регистре STATUS. Для 16-разрядных микроконтроллеров генерируются команда MOVLB или MOVLR. Для усовершенствованных 16-разрядных микроконтроллеров будет сгенерированна команда MOVLB. Если в микроконтроллере только один банк памяти никакой дополнительный код генерироваться не будет.
banksel | Varl |
movwf | Varl |
CBLOCK- Определение блока констант
Синтаксис cblock [<ехрг>] <label>[:<increment>][,<label>[:<increment>]] endc
Описание Определить список именованных констант. Каждая именованная константа <label> имеет некоторое значение, описанное выше по тексту программы. Цель данной директивы состоит в том, чтобы указать адреса размещения нескольких констант. Список именованных констант заканчивается директивой ENDC. <ехрг> - указывает стартовый адрес для первой константы. Если адрес не указан, то используется заключительное значение предыдущего CBLOCK. Если первый CBLOCK не имеет никакого значения <ехрг>, то размещение начинается с нулевого адреса. <increment> - указывает приращения адреса для текущей именованной константы. Именованные константы в одной строке разделяются запятыми. Директива CBLOCK используется для размещения констант в памяти программ и памяти данных.
Пример
cblock 0x2 0 ; name_1 будет иметь адрес 20
name_1, name_2 ; name_2, 21, name_3, 22
name_3, name_4 ; паmе_4 адрес 23.
endc
cblock 0x30
TwoByteVar: 0, TwoByteHigh, TwoByteLow
Queue: QUEUE_SIZE
QueueHead, QueueTail
Doublel:2, Double2:2
endc
CODE - Начало кода объектного файла в памяти программ
Синтаксис [<label>] code [<R0M address>]
Описание Используется при генерации объектного файла. Объявляет начало секции кода программы. Если <label> не указана, секции присваивается имя .code. Если не указан адрес секции, то ей будет присвоено текущее значение адреса в памяти программ.
Пример RESET code H'01FF' goto START
CONFIG - Установка битов конфигурации микроконтроллера
Синтаксис _ _config <expr> OR _ _config <addr>, <expr>
Описание Устанавливает биты конфигурации микроконтроллера в соответствии со значением <ехрг>. Для микроконтроллеров семейства PIC18CXXX дополнительно указывается адрес <addr> размещения конфигурационных битов. Подробное описание конфигурационных битов смотрите в технической документации на соответствующий микроконтроллер. Предварительно, перед директивой CONFIG, надо указать тип микроконтроллера с помощью директивы LIST или PROCESSOR. Для микроконтроллеров семейства PIC17CXXX в директиве LIST необходимо указать выходной формат HEX файла INHX32.
Пример
list p=17c42,f=INHX32
config h'ffff' ; Конфигурация по умолчанию
CONSTANT- Определить символьную константу
Синтаксис constant <label>[=<expr>, . ..,<label>[=<expr>] ]
Описание Создает символьную константу для использования в выражениях MPASM. Существующая константа не может быть определена повторно, а выражения используемые при определении константы должны быть полностью разрешимы. Это основное отличие между константами определенными директивой CONSTANT и VARIABLE, SET. Иначе, константы и переменные могут поочередно использоваться в выражениях.
Пример
variable RecLength=64
constant BufLength=512
constant MaxMem=RecLength+BufLength
DA - Сохранение строки в памяти программ
Синтаксис da <expr> [, <expr2>, ..., <exprn>]
Описание Упаковывает в 14-битный формат два 7-битных символа ASCII. Используется для сохранения символьной строки в FLASH памяти программ микроконтроллера.
Пример
da "abcdef"
ВПаМЯТИПрограмм - 30Е2 31Е4 32Е6 3380
da "12345678" ,0
ВПаМЯТИПрограмм - 18В2 19В4 1АВ6 0 00 0
da OxFFFF
В памяти программ - 0x3fff
DATA - Сохранение значений или текста в памяти программ
Синтаксис [<label>] data <expr>,[,<expr>,...,<expr>] [<label>] data "<text_string>"[,"<text_string>",...]
Описание Инициализирует одно или более слов памяти программ. Данные могут быть в виде констант, внутренних/внешних меток или их выражений. Данные также могут состоять из цепочки (одного) символов ASCII <text_string>. Один символ сохраняется в младшем байте памяти программ, в случае сохранения нескольких символов они упаковываются в слова по два знака. Если сохраняется нечетное число символов, то заключительный байт равен нулю. Во всех семействах микроконтроллеров, кроме PIC18CXXX, первый символ сохраняется в старшем байте слова. Для PIC18CXXX первый символ сохраняется в младшем байте слова. Эта директива может использоваться при генерации объектного файла. Дополнительную информацию смотрите в описании директивы IDATA.
Пример
data reloc_label+10 data l,2,ext_label data "testing 1,2,3" data 'N' data start_of_program
DB - Побайтное сохранение данных в памяти программ
Синтаксис db <expr>[,<expr>,...,<expr>]
Описание Резервирует слово в памяти программ с сохранением 8-битного значения. Многозначные выражения последовательно заполняют слова памяти программ. В случае нечетного числа значений последний байт будет равен нулю. Эта директива может использоваться при генерации объектного файла. Дополнительную информацию смотрите в описании директивы IDATA.
Пример db 't', OxOf, 'e', OxOf, 's', OxOf, 't', '\n'
DE - Резервирует 8-разрядное значение в EEPROM памяти
Синтаксис de <expr>[,<expr>,...,<expr>]
Описание Резервирует слово в EEPROM памяти для сохранения 8-битное значения <ехрг>. Старшие биты слова равны нулю. Каждое 8-разрядное значение сохраняется в отдельном слове. Директива была разработана для PIC16F8X, но может быть использована и в других микроконтроллерах.
Пример
org H'20' ; Инициализация EEPROM
de "My Program", 0
#DEFINE - Определить замену текста
Синтаксис #define <name> [<string>] #define <name> [<arg>,...,<arg>] <string>
Описание Данная директива определяет правила замены текста. В тексте программы строка <name> будет заменена последовательностью символов <string>. В случае использования директивы без указания параметра <string> последовательность <name> отмечается MPASM для последующей проверки IFDEF. Эта директива подражает директиве #define стандарта ANSI 'С. Символы, определенные данным методом не доступны для просмотра в среде MPLAB IDE.
Пример
#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 ; установка бита 7 в регистре 0x19
DT- Определяет таблицу данных
Синтаксис [<label>] dt <expr>[,<expr>,...,<expr>] [<label>] dt "<text_string>"[,"<text_string>",...]
Описание Генерирует серию команд RETLW для 8-разрядных значений <ехрг>. Каждое значение <ехрг> сохраняется в отдельной команде RETLW.
Пример
dt "A Message", О
dt FirstValue, SecondValue, EndOfValues
DW - Резервирует слова памяти программ
Синтаксис [<label>] dw <expr>[,<expr>,...,<expr>] [<label>] dw "<text_string>"[,"<text_string>",...]
Описание Резервирует слова в памяти программ для данных, заполняя пустые места определенными значениями. Для микроконтроллеров семейства PIC18CXXX директива DW работает подобно DB. Адрес последнего резервирования в памяти программ запоминается и увеличивается на единицу при каждом сохранении значений. Выражения могут быть литеральными с сохранением в памяти программ аналогично директиве DATA.
Эта директива может использоваться при генерации объектного файла. Дополнительную информацию смотрите в описании директивы IDATA.
Пример
dw 39, "diagnostic 39", (d_list*2+d_offset) dw diagbase-1
ELSE - Начало альтернативного блока программы условия IF
Синтаксис else
Описание Используется совместно с директивой IF для обеспечения альтернативного хода выполнения программы, соответствующему ложному выполнению условия. Директива ELSE может быть использована внутри регулярного блока программы или макроса.
Пример
speed macro rate if rate < 50
dw slow else
dw fast endif endm
END - Окончание программы
Синтаксис end
Описание Указывает окончание текста программы.
Пример
list p=17c42
: ; текст программы
end ; конец всех команд
ENDC - Окончание автоматического блока констант
Синтаксис endc
Описание Используется совместно с директивой CBLOCK. Указывает окончание списка констант.
ENDIF - Окончание условного блока программы
Синтаксис endif
Описание Указывает окончание условного блока. Директива ENDIF может быть использована внутри регулярного блока программы или макроса.
ENDM - Окончание макроса
Синтаксис endm
Описание Завершает макрос, открытый директивой MACRO.
Пример make_table macro argl, arg2 dw argl, 0 res arg2 endm
ENDW- Завершает цикл While
Синтаксис endw
Описание Завершает цикл WHILE. Пока условие, указанное в директиве WHILE, остается истинным, программа будет выполняться между директивами WHILE и ENDW. Директива ENDW может быть использована внутри регулярного блока программы или макроса.
EQU - Определение константы ассемблера
Синтаксис <label> equ <expr>
Описание Присваивает значение <ехрг> константе <label>.
Пример
four equ 4 ; присваивает значение 4 константе four
ERROR - Формирует сообщение об ошибке
Синтаксис error "<text_string>"
Описание Сообщение <text_string> (длиной от 1 до 80 символов) будет напечатано в списках ошибок MPASM.
Пример
error_checking macro argl
if argl >= 55
error "error_checking-01 arg out of range"
endif endm
ERRORLEVEL - Настройка параметров вывода сообщений об ошибках
Синтаксис errorlevel {0|1|2|+<msgnum>|-<msgnum>} [, ...]
Описание Указание типов сообщений, которые будут включены в файл списка ошибок.
Параметр | Эффект |
Вывод сообщений, предупреждений и ошибок | |
Вывод предупреждений и ошибок | |
Вывод только ошибок | |
+<msgnum> | Разрешить ВЫВОД Сообщение С КОДОМ <msgnum> |
-<msgnum> | Запретить ВЫВОД Сообщение С КОДОМ <msgnum> |
Пример
errorlevel 1, -202
EXITM - Выход из макроса
Синтаксис exitm
Описание Принудительный выход из макроса во время его выполнения. Эффект аналогичен выполнению директивы ENDM.
Пример
test macro filereg if filereg == 1
exitm else
error "bad file assignment" endif endm
EXPAND - Включение текста макроса в файл листинга программы
Синтаксис expand
Описание Разрешает включение в файл листинга программы полного текста макроса. Действие аналогично команде /т MPASM при его запуске из командной строки. Действует до директивы NOEXPAND.