Изучение системы команд в микроконтроллерах серии MCS51. Изучение способов адресации.

Автор работы: Пользователь скрыл имя, 12 Июня 2015 в 10:47, практическая работа

Краткое описание

Цель работы: Изучить систему команд микроконтроллеров серии MCS51, способы адресации операндов в командах и получить практические навыки в применении команд при разработке программного обеспечения.

Прикрепленные файлы: 1 файл

ПР№2.docx

— 81.83 Кб (Скачать документ)

Для наглядности изначально в регистр R0 загружено значение 33Н, в регистр R1 – 40Н, в аккумулятор – 11H.

  • примере 4.1 значение из аккумулятора A пересылается в ячейку памяти, адрес которой находится в регистре R0. В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 33H (т.к. в регистре R0 находится значение 33H).

 

  • примере 4.2 команда выполняется также как и в примере 4.1, но в регистре R0 находится значение 34H, т.к. после выполнения команды INC R0 значение в регистре R0 увеличилось на 1 (было 33H стало 34H). В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 34H.
  • примере 4.3 команда выполняется также как и в примере 4.2, но в регистре R0 находится значение 35H, т.к. после выполнения команды INC R0 значение в регистре R0 увеличилось на 1 (было 34H стало 35H). В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 35H.
  • примере 4.4 значение из аккумулятора A пересылается в ячейку памяти, адрес которой находится в регистре R1. В результате выполнения команды значение из аккумулятора (11H) будет переслано в ячейку памяти с адресом 40H (т.к. в регистре R1 находится значение 40H).

 

Во всех примерах (примеры 4.1, 4.2, 4.3, 4.4) в машинном коде данная команда представлена одним байтом. В двоичном виде машинные коды примеров 4.1, 4.2, 4.3, 4.4 будут иметь вид:

1111 0110

для примера 4.1

1111 0110

для примера 4.2

1111 0110

для примера 4.3

1111 0111

для примера 4.4


Старшие семь бит являются кодом команды, а младший бит – адресом (номером регистра, который используется в качестве указателя на ячейку памяти данных).

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

 

Этот способ адресации позволяет получить более короткий код программы при работе с

 

массивами, организовав цикл.

       

Пример №5

00

NOP

     

0000

DPTR,#01A0H

;Запись в DPTR знач. 1A0H

 

0001

9001A0

MOV

 

0004

7405

MOV

A,#05H

;Запись в A значения 05H

 

0006

93

MOVC

A,@A+DPTR

;Пример 5.1

 

0007

7464

MOV

A,#64H

;Запись в A значения 64H

 

4

         

 

0009

83

MOVC

A,@A+PC

;Пример 5.2

000D

00

NOP

   

Для наглядности примера 5.1 изначально в регистр DPTR загружено значение 01A0Н, в аккумулятор – 05H.

  • примере 5.1 значение из ячейки памяти программ, адрес которой определяется как сумма значений находящихся в регистре DPTR и аккумуляторе A пересылается в аккумулятор. В результате выполнения команды значение из ячейки памяти программ с адресом 01A5H (т.к. 01A0H + 05H = 01A5H) будет переслано в аккумулятор.

Для наглядности примера 5.2 изначально в аккумулятор загружено значение 64Н.

  • примере 5.2 значение из ячейки памяти программ, адрес которой определяется как сумма значений находящихся в счетчике команд PC и аккумуляторе A пересылается в аккумулятор. В результате выполнения команды значение из ячейки памяти программ с адресом 006DH (т.к. 0009H + 64H = 006DH) будет переслано в аккумулятор.

Примеры 5.1 и 5.2 демонстрируют косвенно-регистровую адресацию по сумме базового и индексного регистров. В качестве базового регистра может выступать регистр DPTR или счетчик команд PC, а в качестве индексного регистра – аккумулятор A.

Косвенно-регистровая адресация по сумме базового и индексного регистров позволяет осуществлять выбор данных (констант) из таблиц, размещенных в памяти программ.

 

Пример №6.

 

Данный пример демонстрирует синтаксис, обеспечивающий различные способы адресации.

0000

00

NOP

R0,#5CH

;Пример 6.1

 

0001

785C

MOV

 

0003

A85C

MOV

R0,5CH

;Пример 6.2

 

0005

A65C

MOV

@R0,5CH

;Пример 6.3

 

0007

765C

MOV

@R0,#5CH

;Пример 6.4

 

000D

00

NOP

     

Пример 6.1 – значение 5CH пересылается в регистр R0.

Пример 6.2 – значение из ячейки памяти данных с адресом 5CH пересылается в регистр R0. Пример 6.3 – значение из ячейки памяти данных с адресом 5CH пересылается в ячейку

 

памяти данных, адрес которой находится в регистре R0.

Пример 6.4 – значение 5CH пересылается в ячейку памяти данных, адрес которой находится в регистре R0.

 

ПРИМЕЧАНИЕ: Для полного изучения команд пересылок и способов адресации операндов необходимо самостоятельно рассмотреть выполнение команд:

MOV <байт-назначения>,<байт-источника>

MOV <бит назначения>,<бит источника>

 

MOV DPTR,#datal6

MOVC A,@A+(<R16>)

MOVX <байт приемника>,<байт источника>

 

Выполнение работы.

 

  1. Изучить команды, в выше приведенных примерах.
  2. Разработать алгоритм программы в соответствии с заданием.
  3. Создать проект и разработать программное обеспечение в соответствии с алгоритмом.

 

  1. Произвести отладку и проверку работы программного обеспечения.
  2. Продемонстрировать работу программы преподавателю.
  3. Подготовить и оформить отчет.

 

Содержание отчета:

 

  • тема работы;

 

 

5

 

  • цель работы;

 

  • задание;

 

  • алгоритм программы (программного обеспечения) в виде блок-схемы или графа;

 

  • исходный текст программного обеспечения;

 

  • выводы о выполненной работе.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

 

ПРИЛОЖЕНИЕ А

 

Мнемонические обозначения команд микроконтроллеров серии MCS-51 и их функциональное назначение

Команда

Операнды

Функция команды

     

ACALL

<addr 11>

абсолютный вызов

   

подпрограммы

ADD

А,<байт-источник>

сложение

ADDC

A,<байт-источник>

сложение с переносом

AJMP

<addr11>

абсолютный переход

ANL

<байт-назначения>,<байт-источник>.

логическое "И"

ANL

С,<бит источника>

логическое "И" для переменных-

   

битов

CJNE

<байт-назначения>,<байт-источник>,<смещение>

сравнение и переход, если не

   

равно

CLR

A

сброс аккумулятора

CLR

<bit>

сброс бита

CPL

А

инверсия аккумулятора

CPL

<bit>

инверсия бита

DA

А

десятичная коррекция

   

аккумулятора для сложения

DEC

<байт>

декремент

DIV

АВ

деление

DJNZ

<байт>, < смещение >

декремент и переход, если не

   

равно нулю

INC

<байт>

Инкремент

INC

DPTR

инкремент указателя данных

JB

<bit>,<rel8>

переход, если бит установлен

JBC

<bit>,<rel8>

переход, если бит установлен и

   

сброс этого бита

JC

<rel8>

переход, если перенос

   

установлен"

JMP

@A+DPTR

косвенный переход

JNB

<bit>,<rel8>

переход, если бит не установлен

JNC

<rel8>

переход, если перенос не

   

установлен

JNZ

<ге18>

переход, если содержимое

   

аккумулятора не равно нулю

JZ

<ге18>

переход, если содержимое

   

аккумулятора равно нулю

LCALL

<addrl6>

длинный вызов

LJMP

<addrl6>

длинный переход

MOV

<байт-назначения>,<байт-источника>

переслать переменную-байт

MOV

<бит назначения>,<бит источника>

переслать бит данных

MOV

DPTR,#datal6

загрузить указатель данных 16-

   

битовой константой

MOVC

A,@A+(<R16>)

переслать байт из памяти

   

программ

MOVX

<байт приемника>,<байт источника>

переслать во внешнюю память

   

(из внешней памяти) данных


 

7

 

Команда

Операнды

Функция команды

     

MUL

АВ

умножение

NOP

 

нет операции

ORL

<байт назначения>,<байт источника>

логическое "ИЛИ

ORL

С,<бит источника>

логическое "ИЛИ" для

   

переменных-битов

POP

<direct>

чтение из стека

PUSH

<direct>

запись в стек

RET

 

возврат из подпрограммы

RETI

 

возврат из прерывания

RL

A

сдвиг содержимого аккумулятора

   

влево

RLC

А

сдвиг содержимого аккумулятора

   

влево через флаг переноса

RR

А

сдвиг содержимого аккумулятора

   

вправо

RRC

A

сдвиг содержимого аккумулятора

   

вправо через флаг переноса

SETB

<бит>

установить бит

SJMP

<rel8>

короткий переход

SUBB

А,<байт источника>

вычитание с заемом

SWAP

A

обмен тетрадами внутри

   

аккумулятора

XCH

А,<байт>

обмен содержимого

   

аккумулятора с переменной-

   

байтом

ХCНD

А,@Ri

обмен тетрадой

XRL

Байт назначения>,<байт источника>

логическое "ИСКЛЮЧАЮЩЕЕ

   

ИЛИ" для переменных-байтов


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

 

ПРИЛОЖЕНИЕ В

 

Варианты заданий для индивидуального выполнения. Вариант задания №1.

 

  1. Сформировать массив констант (37Н, 25H, 100, 50, 77H, 5EH, DFH, 7CH) в памяти программ с адреса 00Е0Н.
  2. Создать программу, которая последовательно выполнит следующие действия:

 

  • занесение в аккумулятор значения 55H;

 

  • занесение в регистр R7 значения 40H;

 

  • осуществит пересылку значения из аккумулятора в ячейку памяти данных с адресом 30H (используя прямую адресацию);

 

  • осуществит пересылку значения из аккумулятора в ячейки памяти данных с адресом от 35H до 38H (используя косвенно-регистровую адресацию);

 

  • осуществит пересылку значения из ячейки памяти данных с адресом 30H в регистр R0 (используя прямую адресацию);

 

  • осуществит пересылку значения из аккумулятора в ячейку памяти данных по адресу, находящемуся в регистре R0;
  • осуществит пересылку из ячейки памяти программ с адресом 00E2H в регистр B;

 

Вариант задания №2.

 

  1. Сформировать массив констант (78Н, 22, 100, 50H, 200, 62H, 8FH, DCH) в памяти программ с адреса 00F0Н.
  2. Создать программу, которая последовательно выполнит следующие действия:

 

  • занесение в регистр B значения 50;

 

  • занесение в регистр R3 значения 40H;

 

  • осуществит пересылку значения из регистра B в ячейку памяти данных с адресом 3AH (используя прямую адресацию);
  • осуществит пересылку из ячейки памяти программ с адресом 00F4H в регистр B;

 

  • осуществит пересылку значения из регистра R3 в регистр R1.

 

  • осуществит пересылку значения из регистра B в аккумулятор.

 

  • осуществит пересылку значения из аккумулятора в ячейки памяти данных с адресом от 20H до 23H (используя косвенно-регистровую адресацию);
  • осуществит пересылку значения из ячейки памяти данных с адресом 3AH в регистр R0 (используя прямую адресацию);

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