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 |


