Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Пример выполнения контрольной работы
Алгоритм работы устройства управления объектом приведен на рис.3.
Изучение предложенного алгоритма позволяет представить микропроцессорное устройство управления (МУУ) следующими функциями.
МУУ считывает из памяти параметр PAROU (блок 1), Увеличивает значение переменной PAROU на единицу (блок 2) и сравнивает его с допуском DOP, значение которого задано (блок 3). Если PAROU < DOP, то алгоритмом функционирования предусмотрен возврат к блоку 2. Если PAROU > DOP, то значение параметра PAROU уменьшается на 25 (блок 4) и результат выдается в порт PRT1 на объект управления (блок 5). После чего МУУ переходит к считыванию очередного значения параметра PAROU (блок 1).
Рисунок 3. Алгоритм работы устройства управления
Процесс управления заканчивается при достижении ситуации, когда PAROU = DOP.
При разработке структурной схемы МУУ в качестве основы используют структурную схему, показанную на рис.1.
Далее студенту следует описать назначение каждого блока структурной схемы и на основании принципов функционирования МУУ и системы команд составить машинный алгоритм работы устройства управления.
Машинный алгоритм показан на рис.4.
Блоком 1 алгоритма осуществляется загрузка пары регистров HL адресом ячейки памяти, в которой хранится параметр PAROU. Блок 2 пересылает содержимое ячейки памяти (параметр PAROU), адрес которой указан в паре регистров HL в регистр аккумулятор. Блок 3 осуществляет инкремент содержимого регистра аккумулятора. Далее в регистровую пару HL заносится адрес ячейки памяти, в которой хранится параметр DOP (блок 4).
Рисунок 4. Машинный алгоритм функционирования МУУ
Блок 5 осуществляет сравнение содержимого регистра аккумулятора A и содержимого ячейки памяти M, адресуемой парой регистров HL. В ячейке памяти хранится параметр DOP, а в регистре аккумуляторе – параметр PAROU. В результате сравнения содержимого аккумулятора с содержимым ячейки памяти устанавливаются флаги C и Z. Если (A) < (M), то флаг переноса C = 1 и осуществляется переход к блоку 3. Если (A) = (M), то разность (A) – (M) = 0 и устанавливается флаг Z =1 и осуществляется переход к блоку СТОП. Если не выполняется ни одно из рассмотренных условий, осуществляется переход к блоку 6. В результате выполнения операции сравнения содержимое регистра аккумулятора, где хранится параметр PAROU, не изменяется.
Блок 6 осуществляет операцию уменьшения содержимого регистра аккумулятора, т.е. уменьшение значения PAROU на десятичную константу 25 (десятичное число 25 в шестнадцатеричной системе счисления 19H) и результат заносится в аккумулятор. Далее блоком 7 содержимое аккумулятора передается в выходной порт PRT1, и управление передается на блок 1 алгоритма.
В соответствии с рассмотренным алгоритмом составим программу для МУУ (табл.1).
Таблица 1. Программа функционирования МУУ
Машинные коды
| Ассемблер
| Адрес
| Код
| Метка
| Команда
| Комментарий
|
|
| BEGIN
| LXI H, 0148H
| ; загрузить в пару регистров HL адрес ячейки памяти, в которой хранится параметр PAROU
|
|
|
|
|
|
|
|
|
| 7E
|
| MOV A, M
| ; переслать содержимое ячейки памяти, адрес которой находится в паре регистров HL в регистр аккумулятор
|
| 3C
| LET1
| INR A
| ; увеличение PAROU на 1
|
|
|
| LXI 0149H
| ; загрузка в пару регистров HL адреса ячейки памяти, в которой хранится значение допуска DOP
|
|
|
|
|
|
|
|
|
| BE
|
| CMP M
| ; сравнение содержимого регистра аккумулятора с содержимым ячейки памяти, адрес которой указан в паре регистров HL
| 013A
| CA
|
| JZ STOP
| ; переход по адресу STOP при равенстве сравниваемых величин
| 013B
|
|
|
| 013C
|
|
|
| 013D
| DA
|
| JC LET1
| ; переход по адресу LET1 при отрицательном результате сравнения
| 013E
|
|
|
| 013F
|
|
|
|
| D6
|
| SUI 19H
| ; уменьшение параметра PAROU на 25
|
| 19H
|
|
|
| D3
|
| OUT PORT1
| ; вывод параметра PAROU в порт PRT1
|
| F0
|
|
|
| C3
|
| JMP BEGIN
| ; передача управления команде по адресу BEGIN
|
|
|
|
|
|
|
|
|
|
| STOP
| HLT
| ; останов
|
|
| PAROU
| EQU 59H
| ; параметр PAROU
|
|
| DOP
| EQU 54H
| ; параметр DOP
| Таким образом, программа функционирования МУУ размещается в 25 ячейках памяти. Ячейка памяти с адресом 0148H используется для хранения параметра PAROU, равного 59H, ячейка с адресом 0149H – для хранения допуска DOP, равного 54H. Адресное пространство памяти, занимаемое программой, определяется адресами 0131H ÷ 0149H. Порту PRT1 присвоен адрес F0H.
ПРИЛОЖЕНИЕ 1
ВАРИАНТЫ ЗАДАНИЯ АЛГОРИТМОВ ФУНКЦИОНИРОВАНИЯ
Вариант 0
Вариант 1
Вариант 2
Вариант 3
Вариант 4
Вариант 5
Вариант 6
Вариант 7
Вариант 8
Вариант 9
ПРИЛОЖЕНИЕ 2
СИСТЕМА КОМАНД МИКРОПРОЦЕССОРА К580 ВМ80А
Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| Команды передачи данных
| MOV R1, R2
| 5/1
| 01DDDSSS
| Передача между регистрами. (R1) (R2). Содержимое регистра R2 передается в регистр R1. Содержимое регистра R2 не меняется.
| MOV R, M
| 7/1
| 01DDD110
| Передача из памяти. (R) (M). Содержимое ячейки памяти, адрес которой находится в паре регистров HL, передается в регистр R.
| MOV M, R
| 7/1
| 01110SSS
| Передача в память. (M) (R). Содержимое регистра R передается в ячейку памяти, адрес которой находится в паре регистров HL.
| MVI R, data
| 7/2
| 00DDD110
| Непосредственная передача в регистр. (R) (байт2). Содержимое байта 2 команды передается в регистр R.
| MVI M, data
| 10/2
|
| Непосредственная передача в память. (M) (байт2). Содержимое байта 2 команды передается в ячейку памяти, адрес которой указан в паре регистров HL.
|
| Загрузка
| LXI RP, data
| 10/3
| 00RP0001
| Непосредственная загрузка пары регистров. (RH) (байт3); (RL) (байт2). Байт 3 команды передается в старший регистр (RH) регистровой пары RP, а байт 2 в младший регистр (RL) этой же пары.
| LDA addr
| 13/3
|
| Прямая загрузка аккумулятора. (A) ((байт3)(байт2)). Содержимое ячейки памяти, адрес которой определен байтами 2 и 3 команды, передается в аккумулятор.
| LHLD addr
| 16/3
|
| Прямая загрузка пары регистров. L ((байт3)(байт2)); H ((байт3)(байт2)+1). Содержимое ячейки памяти, адрес которой определяется байтами 2 и 3 команды передается в регистр L. Содержимое следующей ячейки памяти передается в регистр H.
| LDAX RP
| 7/1
| 00RP1010
| Косвенная загрузка аккумулятора. (A) (M). Содержимое ячейки памяти, адрес которой определяется парой регистров RP, передается в аккумулятор. Могут использоваться только пары RP=B (регистры B и C) или RP=D (регистры D и E).
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| XCHG
| 4/1
|
| Обмен. (H) «(D); (L) «(E). Содержимое регистров H и L обмениваются с содержимым регистров D и E.
| STA addr
| 13/3
|
| Прямое размещение содержимого аккумулятора. ((байт3)(байт2)) (A). Содержимое аккумулятора передается в ячейку памяти, адрес которой указан байтами 2 и 3 команды.
| SHLD addr
| 16/3
|
| Прямое размещение содержимого регистров. ((байт3)(байт2)) (L); ((байт3)(байт2)+1) (H). Содержимое регистра L передается в ячейку памяти, адрес которой определяется байтами 2 и 3 команды, одержимое регистра H передается в следующую ячейку памяти.
| STAX RP
| 7/1
| 00RP0010
| Косвенная загрузка аккумулятора. (M) (A). Содержимое аккумулятора передается в ячейку памяти, адрес которой содержится в паре регистров RP. Могут использоваться только пары RP=B (регистры B и C) или RP=D (регистры D и E).
| Арифметические команды
| ADD R
| 4/1
| 10000SSS
| Сложение содержимого регистра. (A) (A)+(R). Содержимое регистра R складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| ADD M
| 7/2
|
| Сложение содержимого ячейки памяти. (A) (A)+((H)(L)). Содержимое ячейки памяти, адрес которой указан в паре регистров HL, складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| ADI data
| 7/2
|
| Непосредственное сложение. (A) (A)+(байт2). Содержимое байта 2 команды складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| ADC R
| 4/1
| 10001SSS
| Сложение содержимого регистра и переноса. (A) (A)+(R)+(C). Содержимое регистра R и флага переноса C (бит переполнения) складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| ADC M
| 7/2
|
| Сложение содержимого ячейки памяти и переноса. (A) (A)+((H)(L))+(C). Содержимое ячейки памяти, адрес которой указан в паре регистров HL, и флага переноса C складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| ACI data
| 7/2
|
| Непосредственное сложение с учетом переноса. (A) (A)+(байт2)+(C). Содержимое байта 2 команды и флага переноса C складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| DAD RP
| 10/3
| 00RP1101
| Сложение содержимого пары регистров с содержимым пары регистров HL. (H)(L) (H)(L)+(RH)(RL). Содержимое пары регистров RP складывается с содержимым пары регистров HL. Устанавливается флаг C. C=1, если есть перенос при сложении с удвоенной точностью, C=0, если нет переноса.
| DAA
| 4/1
|
| Десятичная коррекция аккумулятора: 1. Если (A3…A0) > 9 или AC = 1, то (A)+6; 2. Если (A7…A4) > 9 или C = 1, то (A7…A4)+6
| SUB R
| 4/1
| 10010SSS
| Вычитание содержимого регистра (A) (A)-(R). Содержимое регистра R вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| SUB M
| 7/2
|
| Вычитание содержимого ячейки памяти. (A) (A)-(M). Содержимое ячейки памяти, адрес которой указан в паре регистров HL, вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| SUI data
| 7/2
|
| Непосредственное вычитание. (A) (A)-(байт2). Содержимое байта 2 команды вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| SBB R
| 4/1
| 10011SSS
| Вычитание содержимого регистра и переноса (A) (A)-(R)-(C). Содержимое регистра R и флага переноса C вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги; Z, S, C, P, AC
.
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| SBB M
| 7/2
|
| Вычитание содержимого ячейки памяти и переноса. (A) (A)-(M)-(C). Содержимое ячейки памяти, адрес которой указан в паре регистров HL, и флага переноса C вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC
| SBI data
| 7/2
|
| Непосредственное вычитание данных и переноса. (A) (A)-(байт2)-(C). Содержимое байта 2 команды и индикатора переноса C вычитается из содержимого аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, C, P, AC.
| INR R
| 5/1
| 00DDD100
| Инкремент содержимого регистра. (R) (R)+1. Содержимое регистра увеличивается на 1. Устанавливаются флаги – Z, S, P, AC.
| INR M
| 10/3
|
| Инкремент содержимого ячейки памяти. (M) ((H)(L))+1. Содержимое ячейки памяти, адрес которой указан в паре регистров HL, увеличивается на 1. Устанавливаются флаги – Z, S, P, AC
| INX RP
| 5/1
| 00RP0011
| Инкремент содержимого пары регистров. (RH)(RL) (RH)(RL)+1. Содержимое пары регистров RP увеличивается на 1
| DCR R
| 5/1
| 00DDD101
| Декремент содержимого регистра. (R) (R)-1. Содержимое регистра уменьшается на 1. Устанавливаются флаги – Z, S, P, AC.
| DCR M
| 10/3
|
| Декремент содержимого ячейки памяти (M) (M)-1. Содержимое ячейки памяти, адрес которой указан в паре регистров HL, уменьшается на 1. Устанавливаются флаги – Z, S, P, AC.
| DCX RP
| 5/1
| 00RP1011
| Декремент содержимого пары регистров (RH)(RL) (RH)(RL)-1. Содержимое пары регистров RP уменьшается на 1.
| Логические команды
| ANA R
| 4/1
| 10100SSS
| «И» с содержимым регистра. (A) (A)Ù (R). Содержимое регистра R и содержимое аккумулятора логически умножается. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P, AC. C=0
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| ANA M
| 7/2
|
| «И» с содержимым ячейки памяти. (A) (A)Ù (M). Содержимое ячейки памяти, адрес которой указан в паре регистров HL и содержимое аккумулятора логически умножается. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P, AC. C = 0
| ANI data
| 7/2
|
| «И» непосредственно с данными. (A) (A)Ù (байт2). Содержимое байта 2 команды и содержимое аккумулятора логически умножается. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P, AC. C = 0.
| XRA R
| 4/1
| 10101SSS
| «Исключающее ИЛИ» с содержимым регистра (A) (A)Å (R). Исключающее ИЛИ выполняется с содержимым регистра R и содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| XRA M
| 7/2
|
| «Исключающее ИЛИ» с содержимым ячейки памяти. (A) (A)Å (M). Исключающее ИЛИ выполняется с содержимым ячейки памяти, адрес которой указан в паре регистров HL и содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| XRI data
| 7/2
|
| «Исключающее ИЛИ» непосредственно с данными. (A) (A)Å (байт2). Исключающее ИЛИ выполняется с содержимым байта 2 команды и содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| ORA R
| 4/1
| 10110SS
| «ИЛИ» с содержимым регистра. (A) (A)Ú (R). Содержимое регистра R логически складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| ORA M
| 7/2
|
| «ИЛИ» с содержимым ячейки памяти. (A) (A)Ú (M). Содержимое ячейки памяти, адрес которой указан в паре регистров HL логически складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| ORI data
| 7/2
|
| «ИЛИ» непосредственно с данными. (A) (A)Ú (байт2). Содержимое байта 2 команды логически складывается с содержимым аккумулятора. Результат помещается в аккумулятор. Устанавливаются флаги – Z, S, P. AC=0, C=0.
| CMP R
| 4/1
| 10111SSS
| Сравнить содержимое регистра. (A)-(R). Содержимое регистра R вычитается из содержимого аккумулятора. Содержимое аккумулятора не изменяется. Флаги – Z=1, если (A)=(R), C=1, если (A)< (R).
| CMP M
| 7/2
|
| Сравнить содержимое ячейки памяти. (A)-(M). Содержимое ячейки памяти, адрес которой указан парой регистров HL, вычитается из содержимого аккумулятора. Содержимое аккумулятора не изменяется. Флаги – Z=1, если (A)=(M), C=1, если (A)< (M).
| CPI data
| 7/2
|
| Непосредственно сравнить данные. (A)-(байт2). Содержимое байта 2 команды вычитается из содержимого аккумулятора. Содержимое аккумулятора не изменяется. Флаги – Z=1, если (A)=(байт2), C=1, если (A)< (байт2).
| RLC
| 4/1
|
| Сдвиг влево. (A) (2A). Содержимое аккумулятора сдвигается на один разряд влево (A0 A7, C A7, An+1 An). Устанавливается флаг C.
| RRC
| 4/1
|
| Сдвиг вправо. (A) (A/2). Содержимое аккумулятора сдвигается на один разряд вправо (A7 A0, C A0, An An+1). Устанавливается флаг C.
| RAL
| 4/1
|
| Циклический сдвиг влево. Содержимое аккумулятора сдвигается влево вместе с C (C A7, A0 C An+1 An). Устанавливается флаг C.
| RAR
| 4/1
|
| Циклический сдвиг вправо Содержимое аккумулятора сдвигается вправо вместе с C (A7C, C A0, An An+1). Устанавливается флаг C.
| CMA
| 4/1
|
| Инвертировать содержимое аккумулятора. .Содержимое аккумулятора инвертируется.
| CMC
| 4/1
|
| Инвертировать флаг переноса. . Инвертируется флаг переноса.
| STC
| 4/1
|
| Установить перенос. (C) 1. Флаг переноса устанавливается в 1.
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| Команды ветвлений и переходов
| JMP addr
| 10/3
|
| Ветвление. (PC) (байт3)(байт2). Управление передается команде, адрес которой указан в байтах 3 и 2 текущей команды.
| Jcnd addr
| 10/3
| 11cnd010
| Условное ветвление. Если (cnd), то (PC) ((байт3)(байт2). Если условие выполняется, то управление передается команде, адрес которой указан в байтах 2 и 3 текущей команды, иначе – выполняется следующая команда программы.
| CALL addr
| 17/5
|
| Вызов подпрограммы. (M0) (PCH), (адрес (M0) содержится в (SP)-1); (M1) (PCL), (адрес (M1) содержится в (SP)-2); (SP) ((SP)-2); (PC) (байт3)байт2).
| Ccnd addr
| 17/5
| 11cnd100
| Условный вызов подпрограммы. Если условие выполняется, то действия те же, что и в команде CALL, иначе – выполняется следующая команда программы.
| RET
| 10/3
|
| Возврат из полпрограммы. (M0) (PCL) (адрес (M0) содержится в (SP)); (M1) (PCH) (адрес (M1) содержится в (SP)+1); (SP) (SP)+2.
| Rcnd
| 11/3
| 11cnd000
| Условный возврат из подпрограммы. Если условие выполняется, то действия те же, что и в RET, иначе – выполняется следующая команда программы
| RST N
| 11/3
| 11NNN111
| Рестарт. (M0) (PCH), (адрес (M0) содержится в (SP)-1); (M1) (PCL), (адрес (M1) содержится в (SP)-2); (SP) ((SP)-2); (PC) (NNN´ 8).
| PCHL
| 5/1
|
| Косвенный переход по адресу, указанному в паре регистров HL. (PCH) (H); (PCL) (L).
| Команды ввода/вывода, управления и работы со стеком
| IN port
| 10/3
|
| Ввести данные. (A) (port). Данные из порта, адрес которого указан в байте 2 команды записываются в аккумулятор.
| OUT port
| 10/3
|
| Вывести данные. (port) (A). Данные из аккумулятора записываются в порт, адрес которого указан в байте 2 команды.
| PUSH RP
| 11/3
| 11RP0101
| Загрузить в стек содержимое пары регистров. (M0) (RH), (адрес (M0) содержится в (SP)-1); (M1) (RL), (адрес (M1) содержится в (SP)-2)); (SP) ((SP)-2).
| Наименование
| Число тактов/циклов
| Двоичный код
| Название и описание
| PUSH PSW
| 11/3
|
| Загрузить в стек содержимое регистра флагов. (M0) (A); (адрес (M0) содержится в (SP)-1); (M1) PSW; (адрес (M1) содержится в (SP)-2)); (SP) ((SP)-2).
| POP RP
| 10/3
| 11RP0001
| Считать из стека содержимое пары регистров. (RL) (M0); (адрес (M0) содержится в (SP)); (RH) (M1); (адрес (M1) содержится в (SP)+1)); (SP) ((SP)+2).
| POP PSW
| 10/3
|
| Считать из стека содержимое регистра флагов. (PSW) (M0); (адрес (M0) содержится в (SP)); (A) (M1); (адрес (M1) содержится в (SP)+1)); (SP) ((SP)+2).
| XTHL
| 18/5
|
| Обмен содержимым верхушки стека и пары регистров HL. (L) «(M0); (адрес (M0) содержится в (SP)); (H) «(M1); (адрес (M1) содержится в (SP)+1));
| SPHL
| 5/1
|
| Пересылка содержимого регистров HL в указатель стека. (SP) (HL).
| EI
| 4/1
|
| Разрешение прерываний после выполнения следующей команды.
| DI
| 4/1
|
| Запрещение прерываний после выполнения следующей команды.
| HLT
| 7/1
|
| Останов. Процессор останавливается.
| NOP
| 4/1
|
| Нет операций. Не выполняется никаких операций.
| | | | | | | | | |
АДРЕСА РЕГИСТРОВ АДРЕСА ПАРЫ РЕГИСТРОВ
Адрес (R)
| Регистр
|
| Адрес (RP)
| Пара регистров
|
| A
B
C
D
E
H
L
|
|
| BC
DE
HL
SP
|
КОДЫ УСЛОВИЙ (cnd), используемых в командах условного перехода, вызова подпрограмм и возврата из них
Коды
| Мнемоника
| Условия
|
| NZ
Z
NC
C
P0
PE
P
M
| Не ноль (Z = 0)
Ноль (Z = 1)
Нет переноса (C = 0)
Есть перенос (C = 1)
Нечетный результат (P = 0)
Четный результат (P = 1)
Результат положительный (S = 0)
Результат отрицательный (S = 1)
|
|