Главная Не из ВолгГТУ » Файлы » Методички » Не из ВолгГТУ [ Добавить материал ]

Л/Р: Микроконтроллеры МС8-51: команды управления

Целью работы являлось практическое освоение интегрированной среды программирования, изучение команд управления и директив Ассемблера.

В данной работе предлагается выполнить следующее задание:
  1. Изучить набор команд управления микроконтроллеров MCS-51.
  2. Запустить    на    инструментальном    компьютере    интегрированную    систему программирования    "ProView32" (../PV32.ехе).

С помощью редактора текста создать демонстрационную программу:

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) | Категория: Не из ВолгГТУ
Просмотров: 3276 | Загрузок: 0 | Рейтинг: 0.0/0 |
Теги: микроконтроллеры
Комментарии (0)

Имя *:
Email *:
Код *: