Цель работы. Целью лабораторной работы является приобретение навыков использования ассемблера, редактора связей и эмулятора при формировании и отладке прикладных программ для однокристальных микроконтроллеров семейства МК51.
Запись исходного текста программы осуществляется с помощью любого текстового редактора (например, вход в редактор Shift+F4 из FAR, VC или NC). Рекомендуется поле метки располагать с нулевой позиции, остальные поля отделять друг от друга клавишей табуляции. Имя программы на языке ассемблера должно иметь расширение .asm. Программа должна заканчиваться директивой END.
Ниже приводится пример записи на языке ассемблера текста программы TABLO.ASM:
Метка | Мнемокод | Операнды | Комментарий |
; Основная программа | |||
MAIN: | MOV | R0,#20H | ; начальный адрес массива в РПД |
MOV | DPTR,#20H | ; адрес таблицы символов в ПП | |
MOV | R7,#32 | ; число элементов массива | |
LCALL | TEXT | ; вызов подпрограммы TEXT | |
MOV | R0,#20H | ; начальный адрес массива в РПД | |
MOV | DPTR,#40H | ; адрес таблицы символов в ПП | |
MOV | R7,#32 | ; число элементов массива | |
LCALL | TEXT | ; очистка экрана | |
SJMP | MAIN | ; зацикливание программы | |
; Подпрограмма заполнения массива ОЗУ | |||
TEXT: | CLR | A | ; очистка аккумулятора |
MOVC | A,@A+DPTR | ; пересылка символа в А | |
MOV | @R0,А | ; пересылка символа в РПД | |
DJNZ | R6,$ | ; временная задержка | |
INC | R0 | ; увеличение указателей памяти | |
INC | DPTR | ; на единицу | |
DJNZ | R7,TEXT | ; организация цикла обработки | |
RET | ; массива | ||
; Таблица кодов отображаемых символов | |||
ORG | 20H | ||
DB | '^^DEAR^^FRIEND!^WELCOME^TO^TOMSK' | ||
ORG | 40H | ||
DB | '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^' | ; 32 пробела | |
END | |||
Для трансляции исходной программы с языка мнемокодов в машинные коды команд в данной лабораторной работе используются следующие кросс-средства:
Ассемблирование производится
в диалоговом режиме. Для трансляции программы TABLO.ASM можно вызвать ассемблер
командой а8051, следующим образом отвечая на его запросы:
sourse file [.msa/s03]=TABLO.ASM
list file [.lst]=TABLO
object file=<Enter>
options=<Enter>
После ассемблирования в текущей директории будут сформированы файлы TABLO.LST (файл листинга программы) и TABLO.R03 (файл программы в объектном коде).
При наличии синтаксических ошибок ассемблер выдаст строку с ошибкой и кратким комментарием к ней на экран дисплея, а также продублирует эту информацию в листинге программы.
Если ошибок нет, можно вызвать редактор связей:
xlink -c8051 TABLO -o TABLO.HEX
Редактор связей сформирует файл TABLO.HEX, который необходим для работы эмулятора.
Эмулятор МК51 разработан фирмой AVOSET SISTEMS INC.
Для вызова эмулятора выполнить команду: avsim51 -c1 a
и загрузить в него программу:
Load Avoset
Enter filename: TABLO.HEX
Для пользователя эмулятор представлен в виде отдельных окон: окна для размещения отлаживаемой программы (левое окно) и набора окон для программно доступных ресурсов микроконтроллера.
Эмулятор работает в двух режимах: в командном режиме и в режиме окна. Переключение режимов осуществляется клавишей Esc.
В командном режиме пользователю предлагается меню из набора команд, выбор которых осуществляется с помощью курсора. Вот некоторые из них:
Для отказа от выполнения команды и выхода в основное меню нажать Ctrl+C.
В режиме окна с помощью курсора возможен выбор любых программно доступных ресурсов с целью изменения их содержимого в двоичном, шестнадцатеричном или ASCII кодах. Также возможно задание кодов команд с целью изменения текста программы (дизассемблирование).
Для редактирования в режиме окна могут применяться клавиши:
Для управления работой эмулятора в режиме отладки служат функциональные клавиши. Их назначение:
1. Скопировать для выполнения лабораторной работы файлы из директории AVSIM51 (c:\PUBLIC\AVSIM51) в свою рабочую папку. Получив у преподавателя номер варианта (от N=1 до N=10), создать программу TEST.ASM:
; Программа тестирования ассемблера | |||
MASC | EQU | N | |
DB | 11111111B,377Q,255,0FFH | ||
DB | “BEGIN” | ||
DB | RS1,PSW.4,0D0H.4,0D4H | ||
DW | 0,1234H,1000 | ||
ORG | 30H | ||
1LABEL: | SJMP | $ | |
ORL | A,#MASC | ||
M1: | CJNE | A,P1,M1 | |
STRT | CNT | ||
MOV | TH1,#HIGH(NOT(10000)+1) | ||
MOV | TL1,#LOW(NOT(10000)+1) | ||
MOV | B,#(15*5-MASC) | ||
ЦИКЛ: | JMP | ЦИКЛ | |
END |
Прокомментировать результаты ассемблирования программы и сообщения об ошибках (создать и проанализировать файл TEST.LST). Выполняет ли ассемблер в поле операндов арифметические команды сложения, вычитания, умножения? Может ли ассемблер выполнять логические функции при обработке операндов? Как можно отредактировать текст программы, чтобы ассемблер не выдавал сообщения об ошибках?
2. Составить комментарий к работе следующей программы:
MOV | R7,#16 | |
MOV | R0,#20H | |
MOV | R1,#3FH | |
M1: | MOV | A,@R0 |
MOV | @R1,А | |
INC | R0 | |
DEC | R1 | |
DJNZ | R7,M1 | |
SJMP | $ | |
END |
Пояснить результаты трансляции команд, размещенных в 8 и 9 строках программы. Что изменится, если вместо SJMP $ записать команду AJMP $ или LJMP $ ?
Проверить работу программы на эмуляторе, предварительно заполнив массив ячеек резидентной памяти данных с 20H по 2FH числами 00,11,22,33,44,55,66,77,88,99,AA,BB,CC,DD,EE,FF.
3. Создать файл TABLO.ASM. Проассемблировать программу и проанализировать ее листинг. Сформировать файл TABLO.HEX, загрузить программу в эмулятор и запустить на выполнение. Объяснить изменение содержимого ячеек РПД при выполнении программы. Что отображают команды, расположенные в окне памяти программ по адресам 20Н-2FH?
4. В режиме Path Code ввести в эмулятор программу умножения 16-разрядного двоичного числа (DPTR) на 8-разрядное (байт в R0). 24-разрядный результат формируется в регистрах: R1 (старший байт), R2 (средний байт), R3 (младший байт).
MOV | A,DPL | |
MOV | B,R0 | |
MUL | AB | |
MOV | R3,A | |
MOV | R7,B | |
MOV | A,DPH | |
MOV | B,R0 | |
MUL | AB | |
ADD | A,R7 | |
MOV | R2,A | |
CLR | A | |
ADDC | A,B | |
MOV | R1,A |
Проверить работу программы в пошаговом режиме на тестовом примере (например, множимое - 10000=2710Н, множитель - 100=64Н, произведение - 1000000=0F4240H). Пояснить алгоритм формирования произведения. Оценить время выполнения программы.
5. Битовый процессор МК51 позволяет установить, очистить или проинвертировать любой программно доступный бит, проводить с битами логические операции И, ИЛИ (один из операндов в этом случае должен находиться в триггере переноса С), осуществлять условные переходы по нулевому или единичному состоянию тестируемого бита.
Разработать и отладить на эмуляторе индивидуальное задание (одно из следующих в соответствии со своим вариантом):
Отчет должен содержать листинги отлаживаемых программ (в том числе и по индивидуальному заданию), ответы на контрольные вопросы и комментарии по ходу выполнения пунктов программы работы.