Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Введение. Формирование объектного файла




Язык макрокоманд

Формирование объектного файла

Недопустимые директивы

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

6.10.1 Абсолютный код

Reset ORG H'OIPF' GOTO Start

6. 10.2 Перемещаемый код

Reset CODE H'OIFF' GOTO Start

Получить объектный файл можно компиляцией отредактированного исходного текста программы разными версиями MPASM:

1. При использовании MPASM для операционной системы Windows, проверьте установку флага "Object File".

2. В случае использования DOS версии MPASM с управлением из командной строки - введите параметр /о.

3. В оконной версии MPASM для DOS установите "Yes" в строке "Assemble to Object File". Полученный объектный файл будете расширением.о.


6.12 Пример программы

6.12.1 Абсолютный код

LIST P=16C54 ftINCLUDE "P16C5X.INC"

cblock H '020'

mulcnd RES 1; 8-битный множитель

mulpir res l; 8-битное множимое

H_byte res l; Старший байт 16-битного результата

L_byte res l; Младший байт 16-битного результата

count res l; Счетчик

тру cirf H_byte

cirf L_byte

movlw 8

movwf count

movf mulcnd,w

bcf STATUS,С Loop rrf mulpir, F

btfsc STATUS,С

addwf H_byte,F

rrf H_byte,F

rrf L_byte,F

decfsz count,F

goto loop

retlw 0

•A******************************************************

; Тестовая программа

start cirw

option

main movf PORTB, w movwf mulpir movf PORTB,W movwf mulcnd

call_m call тру goto main

ORG OlFFh goto start

END

Подпрограмма умножения двух 8-разрядных чисел, может использоваться и в других проектах. Создав объектный файл программы, он может быть подключен к проекту, когда это необходимо. Представленный файл может быть разделен на две части: 1 - вызывная часть, включаемая в основной текст; 2 - основная программа, которая может быть включена в библиотеку.

6.12.2 Перемещаемый код, основная часть

LIST Р=1бС54 ftINCLUDE "P16C5X.INC"

EXTERN mulcnd, mulpir, H_byte, L_byte EXTERN mpy

CODE

start cirw

option

main movf PORTB, W movwf mulpir movf PORTB, W movwf mulcnd

call_m call mpy goto main

Reset CODE H'OIFF'

goto start END


6.12.3 Перемещаемый код, библиотечная часть

LIST P=16C54 ftINCLUDE "P16C5X.INC"

UDATA

mulcnd RES 1; 8-битный множитель mulpir res l; 8-битное множимое H_byte res l; Старший байт 16-битного результата L_byte res l; Младший байт 16-битного результата count res l; Счетчик

GLOBAL mulcnd, mulpir, H_byte, L_byte

CODE mpy

GLOBAL mpy

cirf H_byte cirf L_byte movlw 8 movwf count movf muland, W bcf STATUS, С loop rrf mulpir, F

btfsc STATUS, С addwf H_byte, F rrf H_byte, F rrf L_byte, F decfsz count, F goto loop

retlw 0 END


Макрос - определенный пользователем набор инструкций и директив, которые будут подставлены в исходный текст программы при каждом его вызове.

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

Основные аргументу в пользу использования макросов:

более высокий уровень написания программы;

текст программы удобен для чтения;

уменьшение числа ошибок;

упрощение возможных изменений.

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

7.2 Основные части раздела

Синтаксис макрокоманд Директивы макрокоманд Замена текста Использование макросов Примеры программ

7.3 Синтаксис макрокоманд

Макросы имеют следующий синтаксис:

<label> macro [<argl>,<агд2>..., <агдп>]

endm

Где:

<label> - метка MPASM;

<arg> - любое количество необязательных аргументов.

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

В тело макроса могут быть включены любые инструкции микроконтроллера, директивы или макро-директивы MPASM (например, LOCAL). Описание директив смотрите в главе 5. MPASM продолжает обрабатывать инструкции и директивы тела макроса до тех пор, пока не встретит директиву ЕХ1ТМ или ENDM.

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

7.4 Директивы макрокоманд

Часть директив используется для формирования макрокоманды, и не могут использоваться вне макроса:

MACRO LOCAL ЕХ1ТМ ENDM

При написании макрокоманд Вы можете использовать эти и другие директивы поддерживаемые MPASM.

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


7.5 Замена текста

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

<arg> - замена имени аргумента, используется как часть макро обращения;

#v(<expr>) - возвращает значение <ехрг>. Используется для создания уникальной переменной с общими приставками или суффиксами. Не может использоваться в директивах условий (IDEF, WHILE). Эти параметры могут использоваться в теле макроса, исключая его выражения.

Пример макроса

define_table macro

local a = О

while a < 3 entryftv(a) dw 0 a += 1

endw

endm

Выполненные действия:

entryO dw 0 entryl dw 0 entry 2 dw 0 entry 3 dw 0

7.6 Использование макросов

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

<macro_name> [<arg>,..., <агд>] Где:

<macro_name> - название предварительно определенного макроса;

<arg> - требуемые аргументы.

Макрозапрос не занимает место в памяти программ. Однако тело макроса будет расположено с текущего адреса. Запятые могут использоваться для резервирования положения аргумента. Список аргументов заканчивается

символом пробел или точка с запятой.

Директива ЕХ1ТМ (см. главу 5) обеспечивает дополнительный метод завершения макроса с игнорированием

директивы ENDM. Если используется вложенная структура макросов, то по директиве ЕХ1ТМ вызовет переход на верхний

уровень макрокоманд.

7.7 Примеры программ

7.7.1 Умножение двух 8-разрядных чисел

Пример макроса умножения двух 8-разрядных чисел для микроконтроллера Р1С17С42 с минимизацией времени вычисления.

subtitle "macro definitions" page

multiply macro argi, arg2, dest_hi, dest_lo

local i = 0; объявление локальной переменной

movlw argi; получение множимого movwf mulpir

movlw arg2; сохранение множителя в регистре W

drf dest_hi; очистка регистров результата cirf dest_lo

bcf ALUSTA,С; сброс бита С

while i < 8; цикл, пока 8 бит не будут сдвинуты rrcf mulpir btfsc ALUSTA,С addwf dest_hi rrcf dest_hi rrcf dest_lo i += 1

endw; конец вычислений endm; конец макроса


В макросе объявляется четыре требуемых аргумента. Директивой LOCAL назначается местная переменная "i", которая будет использоваться как счетчик. При инициализации значение переменной "i" равно нулю.

Макрокоманда выполняет умножение по алгоритму, в котором используется сдвиг вправо и дополнение для каждого разряда 8-битного множителя. Директива WHILE используется для организации цикла внутри макроса, пока значение переменной Т меньше 8.

Конец цикла отмечен директивой ENDW. Выполнение инструкций внутри цикла будет происходить до тех пор, пока условие WHILE не станет ложным.

Завершение макроса отмечено директивой ENDM.

7.7.2 Сравнение констант Пример программы сравнения переменных с использованием макрокоманды.

include "16cxx.reg"

cfl_jge macro file, con, jump_to movlw con & Oxff subwf file, w btfsc status, carry goto jump_to endm

Вызов процедуры макроса:

cfl_jge switch_val, max_switch, switch_on

Подставленный текст программы:

movlw max_switch & Oxff subwf switch_val, w btfsc status, carry goto switch_on





Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 466; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.022 сек.