Этапы написания, трансляции, отладки программ на ассемблере для «учебного» микроконтроллера. Состав пакета программ

КОМПЬЮТЕРНЫЕ ТЕХНОЛОГИИ В ПРИБОРОСТРОЕНИИ

 

 

Учебно-методическое пособие

к лабораторным работам и практическим занятиям

 

Новочеркасск

ЮРГПУ (НПИ)

2017

УДК 681.3 (076.5)

 

Рецензент -  доцент кафедры «Автоматика и телемеханика»

 ЮРГПУ (НПИ), кандидат технических наук, доцент

              К.Ю. Соломенцев

 

Кучеров В.А.

 

Компьютерные технологии в приборостроении: учебно-методическое пособие к лабораторным работам и практическим занятиям / Южно-Российский государственный политехнический университет имени М.И. Платова. - Новочеркасск: ЮРГПУ (НПИ), 2017. – 62 с.

 

Приведены общие требования и методики проведения лабораторных работ и практических занятий, посвященных изучению приемов программирования и разработке программ на языке низкого уровня для микроконтроллера конкретного типа, выполняющего роль «учебного». Последние занятия посвящены разработке программ для измерительных устройств на основе изучаемого микроконтроллера (аналого-цифровой преобразователь, частотомер).

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

 

УДК 681.3 (076.5)

 

 

Ó Южно-Российский государственный       

 политехнический университет (НПИ)

имени М.И. Платова, 2017

 

 

Лабораторная работа №1

ЭТАПЫ НАПИСАНИЯ, ТРАНСЛЯЦИИ, ОТЛАДКИ ПРОГРАММ НА АССЕМБЛЕРЕ ДЛЯ «УЧЕБНОГО» МИКРОКОНТРОЛЛЕРА. СОСТАВ ПАКЕТА ПРОГРАММ

Цель работы: ознакомиться с этапами написания, трансляции, отладки программ на ассемблере микроконтроллера типа КМ1816ВЕ48, а также с составом пакета программ для микропроцессоров типа Intel 8048 (аналог КМ1816ВЕ48).

Пояснения к работе

Основные этапы обработки программ на ассемблере КМ1816ВЕ48 приведены в табл.1.

Таблица 1- Этапы написания, трансляции (ассемблирование, компоновка) и отладки программ на ассемблере для микроконтроллера типа КМ1816ВЕ48

№   Содержание этапа Входной файл Утилита(ы) (программа(ы) обработки) Выходной файл(ы) Команда в командной строке
1 Набор исходного текста Лист бумаги с программой Текстовый редактор (Блокнот) file.mac (файл на ассемблере) -
2   Трансляция file.mac   avmac48.exe (макроас-семблер), avlink.exe (компоновщик) file.hex (файл в HEX- формате); промежуточные файлы: file.obj (объектные коды, нет кодов меток), file.prn (адреса ПЗУ, коды команд, команды, синтаксические ошибки), file.map (информационный файл) C:\USERS\WE48\maker.bat file  
3 Отладка (поиск логических ошибок) file.hex avsim48.exe (экранный отладчик-симулятор) file.hex C:\USERS\WE48\av.bat

Каждый этап при наличии ошибок предполагает возвращение к предыдущим этапам, исправление ошибок и выполнение этих этапов заново.

Пакет программ находится на диске C, путь к пакету: C:\USERS\WE48. Содержимое подкаталога C:\USERS\WE48: G23_11, G23_21 и т.д.  - каталоги бригад; av.bat - файл для запуска экранного отладчика-симулятора; avlink.exe - компоновщик; avmac48.exe - макроассемблер; avref.exe - утилита для создания перекрестных связей; avsim48.exe, avsim48.hlp, avsim48.ovr, avsim48.reg, avsim48.tr - файлы экранного отладчика-симулятора; hexform.exe - утилита для перевода файла из HEX-формата в двоичный формат; maker.bat - файл для запуска процесса трансляции, команда в командной строке: maker.bat file, где file - имя исходного файла на ассемблере file.mac без расширения (осуществляет ассемблирование и компоновку, при отсутствии синтаксических ошибок - удаление всех файлов кроме *.mac и *.hex).

 

Исходный текст программы на языке ассемблера имеет определенный формат. Каждая команда представляет собой строку четырехзвенной конструкции:

МЕТКА: ОПЕРАЦИЯ ОПЕРАНД(Ы);КОММЕНТАРИЙ

Звенья (поля) могут отделяться друг от друга произвольным числом пробелов. Метка, комментарий и даже операнд (в некоторых командах) могут отсутствовать. В поле метки размещается символическое имя ячейки ПЗУ программ, в которой хранится отмеченная команда или операнд. Метка представляет собой буквенно-цифровую комбинацию, начинающуюся с буквы. Используются только буквы латинского алфавита. Длина метки не должна превышать шести символов. Метка начинается с самой первой позиции от края (т.е. в строке до метки не должно быть ни одного пробела). Метка завершается двоеточием (:). В качестве метки не могут быть использованы мнемокоды команд (MOV, ADD и т.д.), а также символьные обозначения регистров, аккумулятора, портов и других внутренних блоков микроконтроллера.

В поле операции записывается мнемоническое обозначение команды микроконтроллера, которое является сокращением полного английского наименования выполняемого действия. Например: MOV - move - переместить, ADD - addition - сложение, JMP - jump - прыгнуть и т.д. Набор мнемонических кодов команд строго определен, и любой другой набор символов в поле операции воспринимается ассемблером как ошибочный. При отсутствии метки поле операции должно отделяться от начала строки хотя бы одним пробелом.

В поле "ОПЕРАНД(Ы)" записываются операнд (или операнды), участвующие в операции. Команды ассемблера могут быть одно-, двух- или безоперандными. Операнды разделяются запятой (,). Операнд может быть задан непосредственно или в виде его адреса (прямого или косвенного). Непосредственный операнд представляется числом (MOV A,#7EH) или символическим именем (MOV A,#OPER2, при этом OPER2 численно равно адресу ПЗУ, по которому расположена команда или операнд с меткой OPER2). Признак непосредственного операнда - префикс (#). Для чисел существуют указатели системы счисления: D - десятичное, В - двоичное, О - восьмеричное, Н - шестнадцатеричное, по умолчанию - десятичное. Прямой адрес может быть задан мнемоническим обозначением (INC R5). Указанием на косвенную адресацию служит префикс @ (ADD A,@R1). Поле комментария может быть использовано программистом для текстового или символьного пояснения логической организации программы. Поле комментария полностью игнорируется ассемблером, однако он не должен содержать заглавных русских букв. По правилам ассемблера поле комментария начинается после точки с запятой (;). Комментарий может располагаться и отдельной строкой. Ассемблирующая программа (AVMAC48) преобразует исходную программу в объектные коды, а компоновщик (AVLINK) переводит их в абсолютные. Хотя эти программы берут на себя многие из рутинных задач программиста, такие как присвоение действительных адресов, преобразование чисел и т.п., программист все же должен указать некоторые параметры: начальный адрес программы (по умолчанию адрес нулевой) и конец ассемблируемой программы (директива END).

 

Экранный отладчик-симулятор, AVSIM48 в частности, позволяет производить отладку программ на ассемблере представленных в объектных кодах или НЕХ-формате для микроконтроллера типа КМ1816ВЕ48 и ему подобным. Запуск программы производится с помощью файла av.bat (этап №3). После появления заставки для выбора конфигурации микроконтроллера нажать латинскую 'a' или 'A'. Затем появляется картинка экранного представления отладчика, на которой представлены все программно-доступные составляющие микроконтроллера.

Картинка разделена на окна, которые выделены цветом. Левое окно – «стакан» ПЗУ, в котором слева расположены адреса (LABEL), а справа - команды на ассемблере (OPERATION), занимающие эти адреса.

Правее вверху расположено следующее окно, в котором: С- признак переноса (переполнения), а ниже (0)- его содержимое; ACCUMULATOR- аккумулятор, а ниже (00000000)- его содержимое в двоичном виде, (00)- в шестнадцатеричном виде, правее - символьное изображение содержимого соответственно кодам ASCII; AC,F0,F1- признаки (флаги) соответственно вспомогательного переноса и признаков пользователя F0 и F1, а ниже (0)- их содержимое; РС- счетчик команд и правее его содержимое (0000) в шестнадцатеричном виде, которое указывает на адрес очередной выполняемой команды ПЗУ; правее РС (27 BF 10 B8)- первые четыре кода команд, расположенных в ПЗУ, начиная с адреса, находящегося в РС (в данном случае адреса 0000Н); SP- указатель стека и правее его содержимое (00), а также содержимое четырех пар ячеек стека (00 00),(00 00),(00 00),(00 00), начиная с пары, адрес которой находится в SP (в данном случае с нулевой пары, находящейся по адресам 0008Н и 0009Н ОЗУ данных (всего в стеке восемь пар с адресами ОЗУ от 0008Н по 0017Н)); RB- указатель банка прямоадресуемых регистров ((0)- используется банк RB0, (1)- используется банк RB1); МВ- указатель блока ПЗУ ((0)-блок МВ0, (1)- блок МВ1).

Ниже описанного окна расположено окно регистров. В этом окне: (R0:00:_)- регистр R0, (00)- его содержимое в шестнадцатеричном выражении, (_)- символьное изображение содержимого регистра R0 соответственно кодам ASCII; правее (п 00:_)- содержимое ячейки, на которую указывает R0 в шестнадцатеричном выражении (00) и символьном (_); (R1:00:_) и (п 00:_)- аналогично для регистра R1; далее (R2:00 R4:00 R6:00) и (R3:00 R5:00 R7:00)- регистры R2, R4,R6,R3,R5,R7 и их содержимое в шестнадцатеричном виде.

Ниже находятся два окна ОЗУ, причем левый ряд - шестнадцатеричные адреса первых в строке ячеек ОЗУ, далее по строкам - содержимые очередных восьми ячеек в шестнадцатеричном виде, справа - символьное изображение содержимого ячеек.

Далее окно режимов работы отладчика-симулятора. В частности в этом окне: Cycles - счетчик машинных циклов и его содержимое (0), если он включен.

Далее - окно таймера, окно признаков прерываний и входов Т0,Т1, INT.

Справа также есть окно портов ввода-вывода BUS,P1,P2.

В нижней части экрана расположено меню отладчика-симулятора, состоящее из двух частей, причем видна только одна из этих частей. Другая часть меню становится доступной после нажатия пробела или после неоднократного нажатия клавиш курсора «влево» или «вправо». В верхней части меню после значка (>) располагается краткий комментарий команды, на которую указывает курсор (цветной прямоугольник). Раскрытие команды меню или выполнение команды подменю осуществляется нажатием клавиши Enter или нажатием выделенной буквы команды меню или подменю (как правило первой). Выход из подменю на более высокий уровень осуществляется нажатием Ctr-C. Переход из экранной области в меню и наоборот осуществляется нажатием клавиши Esc. Перемещение по экранной области осуществляется с помощью клавиш курсора, а также можно использовать следующие: HOME - к первому символу окна; END - к последнему символу окна.

     Краткая характеристика меню отладчика-симулятора: Dump - установка конфигурации окон ОЗУ данных; Expression - установка значения; commandFile - загрузка/сохранение командного файла; Help - помощь: синтаксис команд и назначение клавиш; IO - привязка файлов и определение ввода/вывода; Load - загрузка рабочих файлов формата Avsim48; Memory - операции с ОЗУ данных; Patch - использование внутреннего кросс-ассемблера; Quit - выход; Reset - сброс процессора, останов счетчика машинных циклов и др.; Set - установка точек останова, конфигурации ОЗУ данных и др.; setUp - установка количества шагов назад; View - просмотр контрольных точек, карты памяти, таблицы символов; eXecution - выполнение введенной с клавиатуры команды на ассемблере.

Более подробно рассмотрим лишь некоторые команды, которые используются в учебном процессе: Expression - с помощью этой команды можно изменять содержимое в той позиции, где находится курсор; Load-Avocet - загрузка программы в объектных кодах; Load-Program - загрузка программы в НЕХ-формате; Exit-Quit - выход в DOS; Reset-CPU - сброс процессора, при котором обнуляется счетчик команд РС, указатель стека SP, указатели RB и МВ, признаки С,АС,F0,F1 и другие (tov,tf,ie,tie,iip), останавливается и сбрасывается таймер/cчетчик (ctr); Reset-cYcles - сброс счетчика машинных циклов; Set-cYcles - запуск счетчика машинных циклов; setUp-Undo - установка количества шагов назад при пошаговой отладке программы (от 20 до 1340 через 20); eXecution - одноразовое выполнение введенной с клавиатуры команды на ассемблере.

Функциональные клавиши отладчика-симулятора:

F1 - непрерывное выполнение программы; F10 - один шаг при пошаговом режиме выполнения программы; F9 - один шаг назад (Undo) при пошаговом выполнении программы; F2 - перемещение курсора точки останова вверх; F4 - перемещение курсора точки останова вниз; F3 - установка динамической (одноразовой) точки останова на месте курсора точки останова; F5 - установка скорости выполнения программы (медленная -LOW, средняя -MID, быстрая -HI в поле SPD окна режимов работы); F7 - режим отображения данных (Hex, ASCII, Binary в поле CURSOR окна режимов работы).

Экспресс-клавиши для быстрого перехода курсора:

ctl-A - аккумулятор А; ctl-P - счетчик команд РС; ctl-S - указатель стека SP; ctl-I/Z/O - соответственно входы Int/T0/T1; ctl-B - порт BUS; ctl-T/V/U - таймер соответственно Ctr/TOV/TF; ctl-C/X/F/G - признаки соответственно C/AC/F0/F1; alt-0..7 - регистры соответственно R0..R7; alt-P/Q/F/S - порты соответственно Р1/Р2/Р45/Р67; alt-R/M -признаки соответственно RB/MB; alt-A/B - окна ОЗУ данных соответственно 1/2; alt-E/T/I - признаки соответственно EI/TEI/IIP; alt-Y  - счетчик циклов CYCLES.

 

Порядок выполнения работы

 

1. Внимательно изучить табл.1.1 раздела «Методические указания».

2. Ознакомиться с составом пакета программ для  микроконтроллера типа КМ1816ВЕ48, сравнить его с имеющимся на Вашем компьютере.

3. Создать с помощью текстового редактора «Блокнот» файл со следующим тестом:

MOV A,#7EH; (A)<--7EH

MOV R2,A; (R2)<--(A)

END

Сохранить файл в каталоге C:\USERS\WE48 под именем lab1_1.mac с типом «Все файлы».

4. Осуществить этап №2 над файлом lab1_1.mac. Наблюдать за появлением сообщений на экране, а также файла lab1_1.hex в каталоге C:\USERS\WE48.

5. Осуществить этап №3 под руководством преподавателя.

6. Повторить п.3, убрав из текста префикс «#» и сохранив файл под именем lab1_2.mac (файл содержит синтаксическую ошибку). Повторить п.4 для этого файла, наблюдать за появлением сообщений об ошибке и файлов типа *.obj, *.prn. С помощью «Блокнота» просмотреть файл lab1_2.prn.

7. Перенести все появившиеся файлы lab*.* в свой каталог.

 

8. В текстовом редакторе «Блокнот» создать файл lab2.mac (п.3) со следующим текстом программы на ассемблере (обнуление ячеек ОЗУ с 30Н по 3FH):

   ; очистка (30H)-(3FH)

   CLR A      ; (A)<--0

   MOV R7,#10H; всего 16 ячеек

   MOV R0,#30H; адрес 1 ячейки

M1: MOV @R0,A; ((R0))<--0

   INC R0    ; указать на след. ячейку

   DJNZ R7,M1; повтор 16 раз

   END

9. Произвести трансляцию исходного текста программы (этап №2). Убедиться в отсутствии ошибок и в успешном осуществлении трансляции программы.

10. Под руководством преподавателя с помощью отладчика убедиться в правильности работы программы (этап №3).

11. Последовательно вводя с помощью текстового редактора различные ошибки в текст программы, наблюдать за появляющимися при трансляции сообщениями на экране или в файле типа *.prn. Записать в отчет введенные ошибки и соответствующие им сообщения. Перечень вводимых ошибок: 1) вставить пробел до метки М1; 2) сделать так, чтобы метка М1: и ссылка на нее в операторе DJNZ не совпадали по написанию; 3) заменить М1 на R1; 4) заменить М1 на метку начинающуюся с цифры; 5) исказить мнемонику одной из команд (MOV заменить на MAV); 6) одну из команд расположить в самом начале строки; 7) убрать префикс #; 8) перед одним из комментариев убрать (;); 9) удалить END.

12. Последовательно ввести в текст программы ошибки, не являющиеся синтаксическими, но изменяющими логику программы (убрать во втором операторе признак шестнадцатеричного числа Н, затем убрать в четвертом операторе префикс @). Оттранслировав программу, под руководством преподавателя наблюдать с помощью отладчика за нарушением логики работы программы.

13. Выполнить п.7.

 

14. Запустить отладчик-симулятор AVSIM48. Загрузить какую-нибудь программу в НЕХ-формате. Внимательно изучить картинку экранного представления отладчика-симулятора, сверяясь с разделом «Пояснения к работе».

15. Перейти в экранную область. Перемещать курсор по экрану с помощью клавиш курсора, а также «Номе», «Еnd».

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

17. Изменяя содержимое счетчика команд РС, наблюдать за перемещением курсора в «стакане» ПЗУ и изменением четырех кодов команд, расположенных рядом с РС.

18. Изменяя содержимое регистров банка RB0 в окне регистров, наблюдать за изменением соответствующей области ОЗУ данных.

19. Изменить признак RB (0 на 1), наблюдать за появлением апострофов в окне регистров. Повторить пункт 5 для банка регистров RB1.

20. Изменяя содержимое ОЗУ данных, добиться изменения содержимого регистров в окне регистров (как банка RB0, так и банка RB1) и четырех пар ячеек стека, находящихся рядом с указателем стека SP. Четко уяснить структуру ОЗУ данных.

21. Изменяя содержимое регистров R0 и R1 как указателей на ячейки ОЗУ, наблюдать за соответствием содержимого ячеек в окнах ОЗУ данных и содержимым ячеек, находящихся рядом с R0 и R1 в окне регистров.

22. Изменяя содержимое указателя стека SP, наблюдать за изменением содержимого четырех пар ячеек стека, находящихся рядом с SP.

23. Перейти в меню отладчика-симулятора. Внимательно изучить это меню, сверяясь с разделом «Пояснения к работе».

24. Опробовать команды, которые более подробно описаны в разделе «Пояснения к работе».

25. Опробовать функциональные клавиши отладчика симулятора (непрерывное выполнение программы, пошаговое выполнение программы (вперед, назад) с установкой количества шагов назад в меню setUp и с подсчетом количества машинных циклов, выполнение программы при наличии точек останова, а также клавиши F5 и F7).

26. Опробовать экспресс-клавиши отладчика-симулятора.

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: