3.2. Кросс-ассемблер X8051

Кросс-ассемблер X8051 работает в среде операционной системы MSDOS (версия не ниже 3.30) и дает пользователю возможность преобразовывать исходные модули МК-программ, написанные на языке АСМ51 и содержащие не более 30000 строк, в эквивалентные объектные модули, которые впоследствии могут быть скомпонованы с другими объектными модулями и настроены на определенное адресное пространство памяти программ МК кросс-редактором связей Link.

Основные функции кросс-ассемблера X8051:

- синтаксический и семантический контроль исходного модуля

МК-программы;

- преобразование (трансляция) исходного текста в объектный код;

- формирование листинга трансляции.

Работа кросс-ассемблера начинается с запуска файла x8051.exe и ведется в диалоговом режиме. Сразу после запуска указанного файла на экран выдается заголовок, а затем запрос на вывод листинга с указанием ключей:

Listing Destination (N, T, D, E, L, P, <CR>=N):

где

N - не выводить;

T - выводить на терминал;

D - выводить на диск;

E - выводить только ошибки;

L - выводить листинг (вкл./выкл.);

P - выводить на принтер;

<CR> - равносильно "N".

Если ответить "D" или "P", то задается вопрос - выводить ли таблицу перекрестных ссылок:

Generate Cross Reference? (Y/N <CR>=N):

где Y - да, N - нет.

Если ответить "L" (вывод листинга контролируется директивами LIST, NLIST языка АСМ51), то выводится дополнительное сообщение:

LIST ON/OFF Listing Destination (T, D, P, <CR>=T):

НЕ нашли? Не то? Что вы ищете?

где значение ключей остается прежним.

Если ответить "E" (в листинг будут выводиться только ошибки), то выводится дополнительное сообщение:

Error Only Listing Destination (T, D, P, <CR>=T):

где значение ключей остается прежним.

Затем запрашиваются имена входного и выходного файлов:

Input Filename:

Output Filename:

Если расширение входного файла (исходного модуля МК-программы) не указано, то оно по умолчанию принимается равным. asm. Расширение выходного файла (объектного модуля МК-программы) по умолчанию равно. obj. Если не указано имя выходного файла, то ему присваивается имя входного файла с расширением. obj. Файл листинга трансляции имеет расширение. lst. Таблица перекрестных ссылок, в случае ее вывода, заносится в файл листинга.

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

Пример листинга трансляции (файл prim. lst):

2500 A. D. 8051 Macro Assembler - Version 4.02a

Input Filename: prim. asm

Output Filename: prim. obj

1 0000 75 F0 64 BINBCD MOV B,#100

2 0003 84 DIV AB

3 0004 F9 MOV R1,A

4 0005 74 0A MOV A,#10

5 0007 C5 F0 XCH A, B

6 0009 84 DIV AB

7 000A C4 SWAP A

8 000B 25 F0 ADD A, B

9 000D F8 MOV R0,A

10 000E 22 RET

Lines Assembled: 10 Assembly Errors: 0

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

3.3. Кросс-редактор связей Link

Кросс-редактор связей Link работает в среде операционной системы MSDOS (версия не ниже 3.30) и дает пользователю возможность объединять до 20 сформированных кросс-ассемблером X8051 объектных модулей, настраивая их на выполнение с определенного адреса. При этом создается загрузочный модуль МК-программы.

Основные функции кросс-редактора связей Link:

- настройка объектных модулей на заданное адресное пространство памяти программ микроконтроллера 8051;

- разрешение внешних ссылок;

- формирование в различных форматах загрузочного модуля и таблицы символических имен;

- выявление ошибок редактирования;

- формирование листинга редактирования в виде карты загрузки.

Работа кросс-редактора связей начинается с запуска файла link. exe и ведется в диалоговом режиме. Сразу после запуска указанного файла на экран выдается заголовок, а затем запрашивается имя входного файла и значение смещения объектного модуля, входящего в этот файл:

Input Filename:

Enter Offset For 'Code':

Эти сообщения повторяются до тех пор, пока все входные файлы не будут перечислены. Расширение входных файлов по умолчанию принимается равным. obj. Шестнадцатеричное значение смещения прибавляется к начальному адресу объектного модуля МК-программы, устанавливаемому, как известно, директивой ORG.

После того, как все входные файлы перечислены, на запрос имени следующего входного файла надо нажать клавишу "Enter" и на экране появится запрос имени выходного файла (загрузочного модуля):

Output Filename:

Если не указано имя выходного файла, то присваивается имя первого входного файла.

После нажатия клавиши "Enter" на экране появится запрос имени файла библиотеки:

Library Filename:

Ответ из нажатия клавиши "Enter" завершает ввод имен библиотечных файлов, расширение которых по умолчанию принимается равным. lib.

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

Options (D, S, A, M, Z, X, H, E, T, 1, 2, 3, <CR>=Default):

где

D - вывод на диск выходного файла в шестнадцатеричном формате INTEL с расширением .hex (по умолчанию) и файла с расширением. map, содержащего ошибки редактирования, таблицу общих символических имен в алфавитном порядке, карту загрузки;

S - вывод на диск выходного файла в шестнадцатеричном формате INTEL с расширением. hex (по умолчанию) и файла с расширением. sym, содержащего таблицу общих символических имен (длина имени 32 знака);

A - вывод на диск выходного файла в шестнадцатеричном формате INTEL с расширением. hex (по умолчанию) и файла с расширением. sym, содержащего таблицу общих символических имен (длина имени 10 знаков);

M - вывод на диск выходного файла в шестнадцатеричном формате INTEL с расширением. hex (по умолчанию) и файла с расширением. sym в формате MICROTEK, содержащего таблицу символических имен. При этом в исходный модуль МК-программы должна быть включена директива SYMBOLS;

Z - вывод на диск выходного файла в шестнадцатеричном формате INTEL с расширением. hex (по умолчанию) и файла с расширением. sym в формате ZAK, содержащего таблицу символических имен. При этом в исходный модуль МК-программы должна быть включена директива SYMBOLS;

X - не используется;

H - вывод на диск выходного файла с расширением. hex (по умолчанию) в шестнадцатеричном формате INTEL;

E - вывод на диск выходного файла с расширением. hex (по умолчанию) в расширенном шестнадцатеричном формате INTEL;

T - вывод на диск выходного файла с расширением. tek (по умолчанию) в шестнадцатеричном формате TEKTRONIX;

1 - вывод на диск выходного файла с расширением. s19 (по умолчанию) в формате MOTOROLA S19;

2 - вывод на диск выходного файла с расширением. s28 (по умолчанию) в формате MOTOROLA S28;

3 - вывод на диск выходного файла с расширением. s37 (по умолчанию) в формате MOTOROLA S37.

Из перечисленных выше форматов, в которых может быть представлен выходной файл кросс-редактора связей (загрузочный модуль МК-программы), наиболее востребованным является шестнадцатеричный формат INTEL.

Файл в указанном формате состоит из записей (строк), причем каждая строка содержит шесть полей (поле <признак записи>, поле <длина>, поле <адрес загрузки>, поле <тип записи>, поле <данные> и поле <контрольная сумма>).

Поле <признак записи> состоит из одного символа ":" (двоеточие).

Поле <длина> занимает один байт и содержит число байтов данных в записи. Это число не может превышать значение, заданное из диапазона 01H-0FFH операндом директивы RECSIZE. При отсутствии в исходном модуле МК-программы указанной директивы число в поле <длина> не может превышать 10H. Значение поля <длина> последней записи файла равно нулю.

Поле <адрес загрузки> состоит из двух байтов и представляет собой шестнадцатеричный адрес загрузки первого в записи байта данных. В последней записи файла это поле содержит нулевой адрес.

Поле <тип записи> состоит из одного байта, значение которого равно 00H (01H), если запись не последняя (последняя).

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

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

Пример файла в шестнадцатеричном формате INTEL (файл prim. hex):

:0F00000075F06484F9740AC5F084C425F0F82201

:00000001FF

Пример файла с расширением. map (файл prim. map):

Global Symbol Name Global Value Global Filename

***********************************************************

* LOAD MAP *

***********************************************************

* Section Name Starting Address Ending Address Size *

***********************************************************

* prim. obj *

* CODE 0000 000E 000F *

***********************************************************

Link Errors: 0 Output Format: Intel Hex

3.4. Примеры микроконтроллерных программ

широкого применения

Сроки проектирования прикладного программного обеспечения микроконтроллеров MCS-51 существенно сокращаются при использовании готовых МК-программ, реализующих типовые процедуры обработки данных (преобразование системы счисления, работа с таблицами констант, формирование заданной задержки и др.). Рассмотрим ряд МК-программ широкого применения, написанных на языке АСМ51.

Преобразование системы счисления. Подпрограмма BINBCD выполняет преобразование целого двоичного 8-разрядного числа без знака, содержащегося в аккумуляторе A (значение в интервале 0-255), в трехзначное двоично-десятичное число, занимающее два байта и размещаемое в регистрах R1 (сотни), R2 (десятки и единицы).

BINBCD MOV B,#100

DIV AB ;разделить на 100 для определения

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22