Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гл3_06.unlocked.docx
Скачиваний:
27
Добавлен:
09.02.2015
Размер:
635.45 Кб
Скачать

Е. Системакоманд мк

Система команд МК содержит 111 команд, содержащих один, два или три байта и выполняемых за один, два или четыре (умножение, деление) машинных цикла. При часто- те тактового генератора, равной 12 МГц, одноцикловые команда выполняются за 1 мкс, двуцикловые — за 2 мкс и т.д.

Из 111 типов команд 64 выполняются за 1 мкс (12 тактов), 45 команд — за ; мкс (24

такта) и две команды — умножение и деление (MUL, DIV) выполняются за 4 мкс (48 тактов).

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

Хотя МК и восьмиразрядный, в нем реализована побитовая, потетрадная (4 бита), побайтовая (8 бит) и 16-разрядная обработка данных.

Двухбайтовые данные используются только регистром-указателем (DPTR) и счет- чиком команд (PC). Следует отметить, что регистр-указатель данных может быть исполь- зован как двухбайтовый регистр DPTR или как два однобайтовых регистра специального назначения DPH и DPL. Счетчик команд всегда используется, как двухбайтовый регистр.

Синтаксис большинства команд ассемблерного языка МК состоит из мнемониче- ского обозначения функции, вслед за которым идут операнды, указывающие методы адре- сации и типы данных. Различные типы данных или режимы адресации определяются ус- тановленными операндами, а не изменениями мнемонических обозначений. Например, аббревиатура "MOV" (переместить) используется восемнадцатью различными командами для обработки трех типов данных (битов, байтов, адресов) в различных адресных про- странствах. Всего в ассемблереМК насчитывается42 различныхмнемоники, которыепри комбинации с различными способами адресации и составляют 111 команд.

Кратко рассмотрим влияние команд на флаги PSW. Все команды, обновляющие со- держимое аккумулятора влияют на бит паритета Р, устанавливающийся в единицу, если число единиц в аккумуляторе четно.

Флаги переноса С, переполнения OV и дополнительного переноса АС устанавли- ваются в в командах, приведенных в таблице 3.18.

Таблица 3.18. Команды, влияющие на установку флагов PSW

Команда

Флаги

C

OV

AC

Сложение аккумулятора с … ADD A, …

X

X

X

Сложение аккумулятора с переносом и… ADDС A, ..

X

X

X

Вычитание из аккумулятора заема и … SUBB A, ..

X

X

X

Умножение аккумулятора на регистр В MUL AB

0

X

Деление аккумулятора на регистр В DIV AB

0

X

Десятичная коррекция аккумулятора DA A

Х

Сдвиг аккумулятора вправо через C RRC

Х

Сдвиг аккумулятора влево через C RLC

Х

Установить бит переноса SETB С

1

Очистить бит переноса CLR С

0

Логическое И бита и переноса ANL С, bit

Х

Логическое И инверсии бита и переноса ANL С, /bit

Х

Логическое ИЛИ бита и переноса ORL C, bit

X

Логическое ИЛИ инверсии бита и переноса ORL C, /bit

X

Пересылка бита в перенос MOV C, bit

X

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

X

Примечания:

  1. X - флаг равен 0 или 1.

  2. Операции над регистром области SFR с адресом байта 208 или с адресами битов 209— 215 (т.е. над PSW или битами PSW) также влияют на установку флагов.

Все команды удобно поделить на пять групп:

  1. арифметические команды;

  2. логические команды с байтовыми переменными;

  3. команды пересылки данных;

  4. команды работы с битами (команды битового процессора);

  5. команды ветвления программ и передачи управления.

Арифметические команды. В наборе команд МК есть операции сложения, сложе- ния с учетом флага переноса, вычитания с заемом, инкрементирования, декрементирова- ния, сравнения, десятичной коррекции, умножения и деления. Список арифметических команд приведен в таблице 3.19. В столбце «КОП» приведен код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» при- ведено число машинных циклов на выполнение команды и число байт, занимаемых ко- мандой в памяти программ.

В АЛУ производятся действия над целыми числами без знака. В двуоперандных операциях: сложение (ADD), сложение с переносом (ADDC) и вычитание с заемом (SUBB) аккумулятор является первым операндом и принимает результат операции. Вто- рым операндом может быть рабочий регистр выбранного банка рабочих регистров, ре- гистр внутренней памяти данных с косвенно-регистровой и прямой адресацией или байт непосредственных данных. Указанные операции влияют на флаги: переполнения, перено- са, промежуточного переноса и флаг четности в слове состояния процессора (PSW).

Использование разряда переноса в операциях сложения (ADDC) и вычитания

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

Выполнение операций сложения и вычитания с учетом знака может быть осущест- влено с помощью программного управления флагом переполнения (0V) регистра PSW. Флаг промежуточного переноса (АС) обеспечивает выполнение арифметических операций в двоично-десятичном коде.

Операции инкрементирования и декрементирования на флаги не влияют.

Таблица 3.19. Группа команд арифметических операций

Название команды

Мнемокод

КОП

Ц

Б

Операция

Сложение аккумулятора с ре- гистром (n=0-7)

ADD A, Rn

00101rrr

1

2

(A)(A)+(Rn)

Сложение аккумулятора с пря- мо адресуемым байтом

ADD A, ad

00100101

1

2

(A)(A)+(ad)

Сложение аккумулятора с бай- том из РПД

ADD A, @R1

00100111

1

1

(A)(A)+((Ri))

Сложение аккумулятора с кон- стантой.

ADD A, #d

00100100

1

2

(A)(A)+#d

Сложение аккумулятора с ре- гистром и переносом

ADDC A, Rn

00111rrr

1

1

(А)(А)+(Rn)+(С)

Сложение аккумулятора с пря- мо адресуемым байтом и пере- носом

ADD A, ad

00110101

1

2

(A)(A)+(Rn)+(C)

Сложение аккумулятора с бай- том из РПД и переносом

ADDC A, @Ri

00110100

00100111

1

1

(A)(A)+((Ri))+(C)

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

ADDC A, #d

00110100

1

2

(A)(A)+#d+(C)

Десятичная коррекция аккуму- лятора

DA A

11010100

1

1

Вычитание из аккумулятора ре- гистра и заема

SUBB A, Rn

10011rrr

1

1

(A)(A)-(C)-(Rn)

Вычитание из аккумулятора прямо адресуемого байта и заема

SUBB A, Ad

10010101

1

1

(A)(A)-(C)-((ad))

Вычитание из аккумулятора байта РПД и заема

SUBB A, @Ri

10010111

1

1

(A)(A)-(C)-(Ri)

Вычитание из аккумулятора константы и заема

SUBB A, #d

10010100

1

2

(A)(A)-(C)-#d

Инкремент аккумулятора

INC A

00000100

1

1

(A)(A)+1

Инкремент регистра

INC Rn

00001rrr

1

1

(Rn)(Rn)+1

Инкремент прямо адресуемого байта

INC ad

00000101

1

2

(ad)(ad)+1

Инкремент байта а РПД

INC @Ri

0000011i

1

1

((Ri))((Ri))+1

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

INC DPTR

10100011

2

1

(DPTR)(DPTR)+1

Декремент аккумулятора

DEC A

00010100

1

1

(А)(А)-1

Декремент регистра

DEC Rn

00011rrr

1

1

(Rn)(Rn)-1

Декремент прямо адресуемого байта

DEC ad

00010101

1

2

(ad)(ad)-1

Декремент байта в РПД

DEC @Ri

0001011i

1

1

((Ri))((Ri))-1

Умножение аккумулятора на регистр В

MUL AB

10100100

4

1

(B)(A)(A)х(B)

Деление аккумулятора на ре- гистр В

DIV AB

10000100

4

1

(B).(A)(A)/(B)

При операции умножения содержимое аккумулятора А умножается на содержимое регистра В и результат размещается следующим образом: младший байт в регистре В, старший — в регистре А.

В случае выполнения операции деления целое от деления помещается в аккумуля- тор А, остаток от деления — в регистр В.

Логические команды с байтовыми переменными. Система команд МК позволяет реализовать логические операции: "И", "ИЛИ", "ИСКЛЮЧАЮЩЕЕ ИЛИ" на регистре- аккумуляторе (А) и байте-источнике. Вторым операндом (байтом-источником) при этом может быть рабочий регистр в выбранном банке рабочих регистров; регистр внутреннего ОЗУ, адресуемый с помощьюкосвенно-регистровой адресации; прямоадресуемые ячейки внутреннего ОЗУ и регистры специального назначения; непосредственная величина. Спи- сок логических команд приведен в таблице 3.20.

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

Таблица 3.20. Группа команд логических операций

Название команды

Мнемокод

КОП

Ц

Б

Операция

Логическое И аккумулятора и регистра

ANL A, Rn

O1O11rrr

1

1

(А)(А)(Rn)

Логическое И аккумулятора и пря- мо адресуемого байта

ANL A, ad

01010101

1

1

(А)(А)(ad)

Логическое И аккумулятора и РПД

ANL A, @Ri

O1O11rrr

1

2

(А)(А)((Ri))

Логическое И аккумулятора и константы.

ANL A, #d

01010111

1

2

(А)(А)#d

Логическое ИЛИ аккумулятора и прямо адресуемого байта

ORL A, ad

01000101

1

1

(A)(A)(ad)

Логическое ИЛИ аккумулятора и регистра

ORL A, Rn

O1001rrr

1

1

(A)(A)(Rn)

Логическое ИЛИ аккумулятора и РПД

ORL A, @Ri

01000111

1

1

(A)(A) ((R1))

Логическое ИЛИ аккумулятора и константы

ORL A, #d

01000100

1

2

(A)(A) #d

Логическое ИЛИ прямо адресуемо- го байта и аккумулятора

ORL ad, A

01000010

1

2

(ad)(ad) (A)

Логическое ИЛИ прямо адресуемо- го байта м константы

ORL ad, #d

01000010

2

3

(ad)(ad) #d

Логическое ИЛИ прямо адресуемо- го байта и аккумулятора

ORL ad, A

01000010

1

2

(ad) (ad) (A)

Исключающее ИЛИ аккумулятора и регистра

XRL A, Rn

01101rrr

1

1

(A) (A)¤(Rn)

Исключающее ИЛИ аккумулятора и прямо адресуемого байта

XRL A, ad

01100101

1

2

(A) (A)¤(ad)

Исключающее ИЛИ аккумулятора и байта РПД

XRL A, @Ri

01100111

1

1

(A) (A) ¤ ((R1))

Исключающее ИЛИ аккумулятора и константы

XRL A, #d

01100100

1

2

(A) (A)¤ #d

Исключающее ИЛИ прямо адре- суемого байта и аккумулятора

XRL ad, A

01100010

1

2

(ad) (ad) ¤ (A)

Исключающее ИЛИ прямо адре- суемого байта и константы

XRL ad, #d

01100011

2

3

(ad) (ad) ¤ #d

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

CLR A

11100100

1

1

(A)0

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

CPL A

11110100

1

1

(A) - (A)

Сдвиг аккумулятора влево через C

RLC A

00110011

1

2

Сдвиг аккумулятора вправо цикли- ческий

RR A

00000011

1

1

Сдвиг аккумулятора вправо через C

RRC A

00010011

1

1

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

SWAP A

11000100

1

1

Логические команды широко используются в программах при управлении отдельны- ми битами операндов. Без них просто не обойтись, когда команд битового процессора нет или их невозможно использовать. Например, ключи на объекте управления подключены к реги- стру, находящемуся в пространстве внешней памяти данных подобно рассмотренному нами ранее примеру (см.рис. 3.12) по адресу ADR_reg1. Тогда, чтобы установить в единицу, на- пример, третий бит этого регистра, не изменяя остальных, необходимо выполнить:

MOV DPTR, #ADR_reg1 ;загрузить в регистр указатель данных адрес регистра

MOVX A, @DPTR ;переслать содержимое регистра в аккумулятор ORL A, #00001000В ;логическое ИЛИ аккумулятора и константы MOVX @DPTR,A ;переслать содержимое аккумулятора в регистр.

Чтобы, наоборот, выключить третий бит, нужно сделать:

MOV DPTR, #ADR_reg1 ;загрузить в регистр указатель данных адрес регистра

MOVX A, @DPTR ;переслать содержимое регистра в аккумулятор ANL A, #11110111В ;логическое И аккумулятора и константы MOVX @DPTR,A ;переслать содержимое аккумулятора в регистр.

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

Команды пересылки данных. Список команд передачи данных приведен в таблице

3.21. Еще раз повторим, что в столбце «КОП» приведен код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» при- ведено число машинных циклов на выполнение команды и число байт, занимаемых ко- мандой в памяти программ.

Таблицы кодов, зашитые в РПЗУ программ, могут быть выбраны с помощью ко- манды передачи данных с использованием косвенной адресации. При этом адрес считы- ваемой ячейки рассчитывается как сумма содержимого аккумулятора и регистра указате- ля данных или, как сумма аккумулятора и счетчика команд:

MOVC А, @А+DPTR MOVC A,@A+PC.

Это бывает нужно при проверке целостности программного кода, которая обычно проводитсяприпервоначальном включенииобъекта. При этомкодпрограммы от ее нача- ла доконцасчитывается в аккумулятор и суммируется там. В концецикларезультатсрав- нивается с известной контрольной суммой и, если они совпадают, РПЗУ и память про- грамм не повреждены.

Байт константы также может быть передан в аккумулятор из ячейки памяти про- грамм, адресуемой суммой базового регистра (PC или DPTR) и индексного регистра (со- держимого А). Это обеспечивает, например, удобное средство реализации алгоритма пре- образования кода ASCII в семи сегментный код для вывода на индикацию.

Любая ячейка 256-байтового блока внешнего ОЗУ данных может быть выбрана с использованием косвенно-регистровой адресации через регистры указатели R0 или R1 (выбранного банка рабочих регистров). Ячейка внутри адресного пространства 64 Кбайт внешнего ОЗУ также может быть выбрана с использованием косвенно-регистровой адре- сации через регистр-указатель данных DPTR.

Команды передачи между прямо адресуемыми регистрами позволяют заносить ве- личину из порта в ячейку внутреннего ОЗУ без использования рабочих регистров или ак- кумулятора.

Содержимое аккумулятора может быть обменено с содержимым рабочих регистров (выбранного банка) и с содержимым адресуемых с помощью косвенно-регистровой адре- сации ячеек внутреннего ОЗУ, а также с содержимым прямо адресуемых ячеек внутренне- го ОЗУ и с содержимым регистров специального назначения.

Младший нибл (разряды 3—0) содержимого аккумулятора, может быть обменен с младшим ниблом содержимого ячеек внутреннего ОЗУ, выбираемых с помощью косвен- но-регистровой адресации.

Таблица 3.21. Группа команд передачи данных

Название команды

Мнемокод

КОП

Ц

Б

Операция

Пересылка в аккумулятор из ре- гистра (n=0-7)

MOV A, Rn

11101rr

1

1

(A)(Rn)

Пересылка в аккумулятор прямо адресуемого байта

MOV A, ad

11100101

1

2

(A)(ad)

Пересылка в аккумулятор байта из РПД (i=0,1)

MOV A, @R1

1110011i

1

1

(A)((R1))

Загрузка в аккумулятор констан- ты

MOV A, #d

0110100

1

2

(A)#d

Пересылка в регистр из аккуму- лятора

MOV Rn, A

1111irrr

1

1

(Rn)(A)

Пересылка в регистр прямо ад- ресуемого байта

MOV Rn, ad

1010rrr

2

2

(Rn)(ad)

Загрузка в регистр константы

MOV Rn, #d

01111rrr

2

1

(Rn)#d

Пересылка по прямому адресу аккумулятора

MOV ad, A

11110101

1

2

(ad)(A)

Пересылка по прямому адресу регистра

MOV ad, Rn

10001rrr

2

2

(ad)(Rn)

Пересыпка прямо адресуемого байта по прямому адресу

MOV add, ads

10000101

2

3

(add)(ads)

Пересылка байта из РПД по пря- мому адресу

MOV ad, @Pi

1000011i

2

2

(ad)((Ri))

Пересылка по прямому адресу константы

MOV ad, #d

01110101

2

3

(ad)#d

Пересылка в РПД из аккумуля- тора

MOV @Ri, A

1111011i

1

1

((Ri))(A)

Пересылка в РПД прямо адре- суемого байта

MOV @Ri, ad

0110011i

2

2

((Ri))(ad)

Пересылка в РПД константы

MOV @Ri, #d

0111011i

1

2

((Ri))#d

Загрузка указателя данных

MOV DPTR,#d16

10010011

2

1

(DPTR)#d16

Пересылка в аккумулятор байта из ПП

MOVC А,@А+DPTR

1001001i

2

1

(А)((А)+(DРТR))

Пересылка в аккумулятор байта из ПП

MOVC A,@A+PC

1000001i

2

1

(A)((A)+(PC))

Пересылка в аккумулятор байта из ВПД

MOVX А,@Ri

1110001i

2

1

(A)((Ri))

Пересылка в аккумулятор байта из расширенной ВПД

MOVX A,@DPTR

11100000

2

1

(A)((DPTR))

Пересылка в ВПД из аккумуля- тора

MOVX @Ri, A

1111001i

2

1

((Ri))(A)

Пересылка в расширенную ВПД из аккумулятора

MOVX @DPTR,A

11110000

2

1

((DPTR))(A)

Загрузка в стек

PUSH ad

11000000

2

2

(SP)(SP)+1,

((SP))(ad)

Извлечение из стека

POP ad

11010000

2

2

(ad)((SP)),

(SP)(SP)-1

Обмен аккумулятора с регистром

XCH A, Rn

11001rrr

1

1

(A)(Rn)

Обмен аккумулятора с прямо ад- ресуемым байтом

XCH A, ad

11000101

1

2

(A)(ad)

Обмен аккумулятора с байтом из РПД

XCH A, @Ri

1100011i

1

1

(A)((Ri))

Обмен младшей тетрады акку- мулятора с младшей тетрадой байта из РПД

XCHO A, @Ri

1101011i

1

1

(A0–A3)(Ri)0-3

Команды битового процессора. Битовый процессор является частью архитектуры МК семейства МК51 и его можно рассматривать как независимый процессор побитовой обработки. Битовый процессор выполняет свой набор команд, имеет свое побитово адре- суемое ОЗУ и свой ввод-вывод.

Список команд операций с битами приведен в таблице 3.22. В столбце «КОП» при- веден код операции. Символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение ко- манды и число байт, занимаемых командой в памяти программ.

Команды, оперирующие с битами, обеспечивают прямую адресацию 128 битов (0—

  1. в шестнадцати ячейках внутреннего ОЗУ (ячейки с адресами 20Н—2FH) и прямую побитовую адресацию регистров специального назначения, адреса которых кратны вось- ми: Р0(80Н), TC0N(88H), P1(90H), SC0N(98H), P2(A0H), IE(A8H), РЗ(В0Н) IP(B8H), PSW(D0H), A(E0H), B(F0H). Побитно адресуемые регистры SFR при начальном обзоре в таблице 3.2 были выделены звездочкой.

Каждый из отдельно адресуемых битов может быть установлен в "1", сброшен в "0", инвертирован, проверен. Могут бытьреализованыпереходы: еслибит установлен; ес- ли бит не установлен; переход, если бит установлен, со сбросом этого бита; бит может быть перезаписан в (из) разряда переноса. Между любым прямоадресуемым битом и фла- гомпереноса могутбытьпроизведены логические операции"И", "ИЛИ", гдерезультатза- носится в разряд флага переноса. Команды побитовой обработки обеспечивают реализа- цию сложных функций комбинаторно; логики и оптимизацию программ пользователя.

Таблица 3.22. Группа команд операций с битами

Название команды

Мнемокод

КОП

Ц

Б

Операция

Сброс переноса

CLR С

11000011

1

1

(С)0

Сброс бита

CLR bit

11000010

1

2

(b)0

Установка переноса

SETB С

11010011

1

1

(С)1

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

SETB bit

11010010

1

2

(b)1

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

CPL bit

10110010

1

2

(b)(-b)

Инверсия переноса

CPL С

10110011

1

1

(С)(-С)

Логическое И бита и переноса.

ANL С, bit

10000010

2

2

(С)(С)(b)

Логическое ИЛИ бита и переноса

ORL С, bit

01110010

2

2

(C)(C)(b)

Логическое И инверсии бита и переноса

ANL С, /bit

10110000

2

2

(C)(C)(-b)

Логическое ИЛИ инверсии бита и переноса

ORL C, /bit

10100000

2

2

(C)(C)(-b)

Пересылка бита в перенос

MOV C, bit

10100010

1

2

(C)(b)

Пересылка переноса в бит

MOV bit, С

10010010

2

2

(b)(c)

Команды ветвления и передачи управления приведены в таблице 3.23. Как и ра- нее, в столбце «КОП» приведен код операции, символами rrr в коде закодирован номер регистра, участвующего в операции. В столбцах «Ц» и «Б» приведено число машинных циклов на выполнение команды и число байт, занимаемых командой в памяти программ.

Команды 16-разрядных переходов и вызовов подпрограмм LJMP ad16 позволяют осущест- влять переход в любую точку адресного пространства памяти программ объемом 64 Кбайт.

Команды 11-разрядных переходов и вызовов подпрограмм AJMP ad11 обеспечивают переходы внутри программного модуля емкостью 2 Кбайт. Эти команды, в отличие от 16- и разрядных переходов, короче и занимают не три, а два байта, что позволяет экономнее использовать память программ.

Таблица 3.23. ГРУППА КОМАНД ПЕРЕДАЧИ УПРАВЛЕНИЯ

Haзвание команды

Мнемокод

КОП

Ц

Б

Операция

Длинный переход и полном объёме

LJMP ad16

00000010

2

3

(PC)ad16

Абсолютный переход внутри страницы в 2 Кб

AJMP ad11

А10А9А8- 00001

2

2

(РС)(РС)+2, (PC)(PC)+rel

Короткий относительный пе- реход внутри страницы 256 Б.

SJMP rel

10000000

2

2

(РС)(РС)+2, (PC)(PC)+rel

Косвенный относительный переход

JМР@А+DPTR

01110011

2

1

(РС)(А)+(DPTR)

Переход, если аккумулятор равен нулю

JZ rel

01100000

2

2

(РС)(РС)+2,при (А)=0:

(PC) (PC)+rel

Переход, если аккумулятор не равен нулю

JNZ rel

01110000

2

2

(РС)(РС)+2, при (А)0:

(PC)(PC)+rel

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

JC rel

01000000

2

2

(РС)(РС)+2, при (С)=1:

(РС)(РС)+rel

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

JNC rel

01010000

2

2

(PC)(PC)+2, пpи (С)=0:

(PC)(PC)+rel

Переход, если бит равен еди- нице

JB bit, rel

01010000

2

3

(PC)(PC)+3, пpи (b)=1:

(PC)(PC)+rel

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

JNB bit, rel

01100000

2

3

(PC)(PC)+3, пpи (b)=0:

(PC)(PC)+rel

Переход, если бит установлен, с последующим сбросом бита.

JВС bit, rel

00010000

2

3

(РС)(РС)+3,при(b)=1: (b)0, (PC)(PC)+rel.

Декремент регистра и пере- ход, если не нуль

DJNZ Rn, rel

11011rrr

2

2

(PC)(PC)+2, (Rn)(Rn) - 1,

пpи (Rn)0: (PC)(PC)+rel

Декремент прямо адресуемого байта и переход, если не нуль

DJNZ ad, rel

11010101

2

3

(PC)(PC)+2, (ad)(ad)-1,при (ad)0: (PC)(PC)+rel

Сравнение аккумулятора с прямо адресуемым байтом и переход, если не равно

CJNE A, ad,

rel

10110101

2

3

(PC)(РС)+3, при (A)(ad):

РС)(РС)+rel

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

CJNE A, #d,

rel

10110100

2

3

(PC)(PC)+3,пpи (A)#d:

(PC)(PC)+rel

Сравнение регистра с констан- той и проход, если не равно

СJNE Rn, #d,

rel

A10A9A8- 10010

2

2

(PC)(PC)+3, npи (Rn)d: (PC)(PC)+rel

Сравнение байта РПД с констан- той и переход, если не равно

CJNE @Ri,

#d, rel

1011011i

2

3

(PC)(PC)+3, при((Ri))#d:

(PC)(PC)+rel

Длинный вызов подпрограммы

LCALL ad16

00010010

2

3

(РC)(РС)+З, (SP)+(SP)+l,

((SP))(PC0-7), (SP)(SP)+1, ((SP))(PC8-15),

((SP))=(PC0/15)

Абсолютный вызов подпро- граммы в пределах страницы в 2 Кб

ACALL ad11

00010010

2

2

(PC)ad11, (SP)(SP)+1, ((SP))(PC0-7), (SP)(SP)+1, ((SP))(PC8-11)

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

RET

00100010

2

1

(PC8-15)((SP)), (SP)(SP)-1, (PC8-15)((SP)),

(SP)-(SP)-1

Возврат из подпрограммы об- работки прерывания

RETI

00110010

2

1

(PC8-15)((SP)), (SP)(SP)-1,

(PC0-7)((SP)), (SP)(SP)-1

Холостая команда

NOP

00000000

1

1

(PC)(PC)+1

В системе команд имеются команды условных и безусловных переходов относи- тельно начального адреса следующей команды в пределах от (PC) - 128 до (РС)+127.

Команды проверки отдельных разрядов позволяют осуществлять условныеперехо- ды по состоянию "0" или "1" прямоадресуемых битов. Команды проверки содержимого аккумулятора (на ноль / не ноль) позволяют осуществлять условные переходы по содер- жимому А.

Косвенно-регистровые переходы JМР @А+DPTR в системе команд МК обеспечивают ветвление относительно базового регистра (содержимого DPTR или PC) со смещением, находящимся в аккумулятореА. Это позволяет делать гибкий переход по вычисляемому в программе адресу.

Команды «Декремент регистра и переход, если не нуль» DJNZ Rn, rel и «Декремент прямо адресуемого байта и переход, если не нуль» DJNZ ad, rel удобны для организации циклов типа «Repeat until». Например:

MOV R1, #120 ; задаем конечное значение счетчика циклов

CYCL: …………….. ; метка начала и тело цикла

………………

DJNZ Rn, CYCL ; декремент регистра R1 и выполнение цикла, если не нуль.

Рассмотренная система команд семейства MCS-51, состоящая из арифметических и логических команд, команд пересылки данных, команд ветвления программ и передачи управления и команд битового процессора стала своего рода эталоном длямикроконтрол- леров. С ее использованием удается создавать компактные и эффективные программы, управляющие отдельными узлами и элементами технологического оборудования.

Наличие в составе МК двух таймеров позволяет организовать работу этих про- грамм в жестком реальном времени. В главе 4 и лабораторных работах по курсу мы еще коснемся вопросов программирования и отладки программного обеспечения микрокон- троллеров.

Вопросы к экзамену.

    1. Общая характеристика контроллеров семейства MCS-51. Назначение выводов.

    2. Организация памяти микроконтроллера. Резидентная оперативная память.

    3. Организация памяти микроконтроллера. Резидентная и внешняя память про- грамм.

    4. Организация памяти микроконтроллера. Внешняя память программ и память данных, организация внешней шины.

  1. Таймер/счетчик. Организация, регистры. Как запрограммировать часы реального вре- мени с годом, месяцем, днем, часом, минутой, секундой, десятью миллисекундами?

  2. Таймер/счетчик. Организация, регистры. Программирование произвольной задержки до суток с дискретой 256 мс.

  3. Таймер/счетчик. Организация, регистры. Определение длительности импульса. Предел измерения длительности и как его увеличить?

  4. Таймер/счетчик. Организация, регистры. Счет внешних импульсов (деталей на конвейере и т.п.).

  5. Таймер/счетчик. Организация, регистры. Режим 3, его назначение и примеры использо- вания.

  6. Таймер/счетчик. Организация, регистры. Поддержка приемопередатчика.

  7. Приемопередатчик, организация, регистры. Синхронная и асинхронная передача.

  8. Приемопередатчик, организация, регистры. Режим 1. Как настроить таймер?

  9. Приемопередатчик, организация, регистры. Организация проверки четности.

  10. Приемопередатчик, организация, регистры. Организация многопроцессорной работы.

  11. Организация прерываний в микроконтроллерах семейства MCS-51.

  12. Управление прерываниями в микроконтроллерах семейства MCS-51.

  13. Организация прерываний. Разрешить прерывания со следующим приоритетом: приемо- передатчик, внешнее прерывание INT0, таймер-счетчик 0, внешнее прерывание INT 1.

  14. Система команд микроконтроллеров семейства MCS-51. Методы адресации.

  15. Выводы ALE и ЕА МК семейства MCS-51. Примеры использования.

  16. Выводы Т0 и Т1 МК семейства MCS-51. Примеры использования.

  17. Выводы INT0 и INT1 МК семейства MCS-51. Примеры использования.

  18. Выводы WR, RD и PME МК семейства MCS-51. Примеры использования.

  19. Порты Р0, Р1 и Р2 семейства MCS-51. Примеры использования.

24. Выводы RxD и TxD МК семейства MCS-51. Примеры использования.

Вопросы к экзамену по лабораторной работе.

  1. Написание и отладка программного обеспечения специальных и специализированных мик- роконтроллеров.

  2. Назначение и состав диспетчера потоков. Переменные окружения синхропотока и управ- ление ими.

  3. Функции и настройка таймера счетчика микроконтроллера при использовании диспетче- ра потоков. Почему выбран первый режим?

  4. Механизм запуска потока и управление им.

  5. Устройство шагового двигателя и управление им. Аппаратное и программное обеспечение подключения.

  6. Аппаратное и программное подключение клавиатуры.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]