Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:ЦМПУ / Новая папка / Лаб1ЦМПУ
.docx
Лабораторная работа №1
«Освоение среды разработки VMLAB 3.12»
Цель работы: изучить возможности и основные принципы работы в среде разработки VMLAB 12.
Исходные данные: программа умножения двух чисел.
Порядок выполнения работы:
1. Создание проекта
1. Создала рабочую папку lab1 в каталоге VMLAB. В этой папке будет храниться созданный проект.
2. Открыла меню Project/New Project.
В появившемся диалоговом окне в поле Select Project File name and location нажала кнопку Enter name/browse/directory и указала папку расположения нового проекта и задала имя проекта lab1.prj. В поле Select micro указала модель МК, который будет симулироваться. В нашем случае необходимо выбрать модель AT128. Поле Select software toolchain изменять нет необходимости, − оно предназначено для подключения компилятора языка Си и др. целей. В поле Add source code file(s) будут содержаться файлы с именем, как и у файла проекта, и расширениями *.asm и *.hex. Собственно, файл lab1.asm и является тем файлом, в котором будет написан текст программы. Для его выбора необходимо нажать кнопку Add this. Если же этот файл уже создан, то его можно включить в проект кнопкой Browse+Add. Для завершения работы с процедурой нажал кнопку Ок.
2. Редактирование файла ассемблера
На этом этапе в окно кодов нужно ввести программу. В качестве примера предложена программа умножения двух чисел. Рассмотрим простейший способ умножения восьмиразрядных целых двоичных чисел без знака суммированием с накоплением. Множитель А находится в регистре R16, множимое В – в регистре R17. Для формирования результата воспользуемся однобайтной командой сложения двух регистров ADD. Результат будет находиться в регистре R18. Множитель А и множимое В нужно задать любыми числовыми значениями.
Листинг программы №1:
.include "C:\VMLAB\include\m128def.inc"; определение библиотеки МК ;ATmega128, при условии расположения программы VMLAB на ;локальном диске С
reset: ; начальная метка
rjmp start ; Переход на начало основной программы
reti ; Addr $01
reti ; Addr $02
reti ; Addr $03 Вектора прерываний МК ATmega128.
reti ; Addr $04 Приведены вектора с адреса $01 по адрес $10.
reti ; Addr $05 Полностью вектора прерываний представлены
reti ; Addr $06 в приложении с назначением прерываний
reti ; Addr $07 (внешних и внутренних).
reti ; Addr $08
reti ; Addr $09
reti ; Addr $0A
reti ; Addr $0B
reti ; Addr $0C
reti ; Addr $0D
reti ; Addr $0E
reti ; Addr $0F
reti ; Addr $10
start: clr r18 ; очистка регистра
ldi r16,5 ; загрузка множителя
ldi r17,2 ; загрузка множимого
clz ; сброс флага Z
m1: breq done ; проверка завершения умножения
add r18,r17 ; суммирование множимого
dec r16 ; декремент множителя
rjmp m1 ; переход на следующий цикл
done: rjmp done ; пустой цикл (конец программы)
3. Ассемблирование и выполнение программы
Подготовленный текст программы на языке ассемблера должен быть преобразован в форму двоичных команд, которые могут быть выполнены микроконтроллером. Ассемблирование можно выполнить командой Project/Build (F9).
В выполняемой программе нужно в окне регистров проследить за изменением значений регистров r16, r17 и r18. Окно регистров вызывается через меню View/Register/flags (Alt+Shift+R). Там же можно посмотреть за изменением флагов регистра SREG.
Остановить выполнение программы можно через меню Run/Pause program (Shift+F5). Если необходимо сделать рестарт с сохранением текущих значений регистров, флагов и т.д., можно вызвать из меню Run команду Restart light (F8). Для полного рестарта МК в первоначальное состояние нужно воспользоваться командой Run/ Restart deep (Shift+F8).
Блок схема к данной программе:
r18=0
r16=A
r17=B
r18=(r18)+(r17)
r16=(r16)-1
Начало
(r16=0) Z = 1
да
нет
Конец
Задание на лабораторную работу:
№ Варианта |
Задание |
1 |
Организовать счетчик |
В программе сначала очищаем регистр r17. Затем загружаем в регистр r16 число, которое нам надо посчитать. Подсчёт происходит в цикле, заход в цикл происходит с использованием флага Z. В цикле происходит сначала уменьшение исследуемого числа в регистре, затем увеличиваем регистр 17 на единицу. Цикл длится до тех пор, пока не происходит обратный процесс, 16 регистр увеличивается до заданного числа, а 17 выходит в 0. В 16 регистре оказывается заданное число.
Результат выполнения программы:
Блок-схема программы:
Начало
r17=0
r16=A
r17=B
да
Z = 1
нет
r16=r16-1
r17=r17+1
Конец
Вывод: изучили возможности и основные принципы работы в среде разработки VMLAB 3.9.
Соседние файлы в папке Новая папка