Л/Р: Микроконтроллеры МС8-51: команды управления
Целью работы являлось практическое освоение интегрированной среды программирования, изучение команд управления и директив Ассемблера.
В данной работе предлагается выполнить следующее задание:
С помощью редактора текста создать демонстрационную программу: Code ;--------------------Программа demo2.asm-------------------------- AJmp Start<br>ORG 30H ;Директива размещения программы Start: Mov R1,#20h ;Загрузка указателя на ячейку-приёмни Mov R2,#10h ;Загрузка счетчика циклов копирования Mov DPTR,#100h ;Загрузка указателя на ячейку-источник LOOP: NOp Mov A,#00h ;Очистка аккумулятора MovC A,@A+DPTR ;Копирование байта кода в аккумулятор Mov @R1,A ;Копирование байта кода в ячейку-приёмник Inc R1 ;Перемещение указателя на следующую ячейку кода DJNZ R2,LOOP ;Проверка счетчика циклов SJmp $ End ;----------------------------------------------------------------- Эта программа копирует 10 кодов из ячеек памяти программ в ячейки внутреннего ОЗУ данных. Копирование выполняется через аккумулятор. В начале программы используется директива ассемблера ORG, которая размещает код программы, начиная с ячейки 30h. Копируемый код находится в памяти программ, начальный адрес – 100h. Область во внутреннем ОЗУ данных, в которую производится запись кода, начинается с адреса 20h. Для работы программы необходим счетчик и два указателя. В качестве счетчика циклов используется регистр R2. Его содержимое декрементируется и проверяется командой DJNZ, которая организует цикл. В качестве указателя на область памяти программ используется регистр DPTR, а в качестве указателя на область памяти данных - регистр R1. Выполняя программу по шагам, инициируя выполнение каждой команды клавишей F7. Наблюдаются изменения значений в регистрах и ячейках внутренней памяти микроконтроллера с помощью окон Main Registers и Data. Особенностью аккумуляторной архитектуры является то, что операции ввода-вывода осуществляются через аккумулятор, поэтому копирование требует лишней команды MOV @R1,A. Кроме того, приходится чистить аккумулятор перед его использованием в команде MOVC. Также при создании программы на языке Ассемблер в командах управления указывается не адрес перехода, а символическое имя метки команды, на которую осуществляется переход. Конкретный адрес формируется в процессе трансляции и редактирования связей. Формат получившейся команды можно увидеть в окне Code. Далее следует создать новый проект lab2_2, а в нем файл и сохранить файл с именем demo3.asm. В этот файл поместить следующий текст: Code ;-----------------------Программа demo3.asm------------------------------ AJmp Start<br>ORG 30h ;Директива размещения программы Start: Mov R1,#30h ;Загрузка указателя на ячейку-приемник Mov R2,#10h ;Загрузка счетчика байтов кода (циклов копирования) Mov DPTR,#100h ;Загрузка указателя на ячейку-источник LOOP: Call COPY DJNZ R2,LOOP ;Проверка счетчика циклов SJmp $<br>COPY: Push ACC MovC A,@A+DPTR ;Копирование байта кода в аккумулятор Mov @R1,A ;Копирование байта кода в ячейку-приемник Inc DPTR ;Перемещение указателя на следующую ячейку-кода Inc R1 ;Перемещение указателя на следующую ячейку-кода Pop ACC Ret End ;------------------------------------------------------------------------ В этой программе собственно копирование байта кода и наращивание указателей выполняется процедурой COPY. При входе в процедуру содержимое аккумулятора сохраняется в стеке, а в конце - восстанавливается. По этой причине не нужно очищать аккумулятор от использованного значения кода. Хотя в данной программе это не дает экономии, но методически правильнее и предохраняет от ошибок в сложных программах, поэтому использование процедур является стандартным приемом. Заметим, что адрес внутреннего ОЗУ, с которого теперь начинается область-приемник, равен 30h. © Иркутский государственный университет путей сообщения, отчёт студента Добавил: mauzer (30.10.2010) | Категория: Не из ВолгГТУ Просмотров: 3392 | Загрузок: 0 | Рейтинг: 0.0/0 | Теги: |
Комментарии (0) | |