Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPS.doc
Скачиваний:
27
Добавлен:
17.04.2019
Размер:
1.08 Mб
Скачать

2.2 Режимы работы мп

1. Чтение кодов из памяти. Так как МП КР1821ВМ85 относится к ВС фон-Неймановского типа, то временные диаграммы чтения команд и операндов для него одинаковы (рисунок 2.2.1).

Рисунок 2.2.1 Временные диаграммы режима чтения

В начале каждого цикла чтения на совмещенных выводах AD0-AD7 выставляется младший байт адреса ячейки памяти, к которой выполняется обращение. При этом формируется сигнал ALE=1. По заднему фронту сигнала ALE необходимо защелкнуть младший байт адреса в регистр адреса РгА. Старший байт адреса удерживается весь цикл чтения. На входах AD0-AD7 с выхода памяти устанавливаются данные, которые читаются при RD=0. В зависимости от фазы выполнения прочитанные коды воспринимаются либо как команда, либо как данные. Чтение данных из ОЗУ выполняется по команде LDA<Adr16>.

Таким образом, по ШД в разные моменты времени передаются – младший байт адреса, байты команды и данные. Совме­щение ШД и младшего байта ША позволило разработчикам при использовании такого же как и у МП КР580ВМ80А 40-выводного корпуса «сэкономить» во­семь выводов и использовать их для расширения функ­циональных возможностей МП.

2. Запись данных в ОЗУ. Используется команда STA<Adr16>, если запись выполняется в ячейки ОЗУ, входящие в АП. Отличается от режима чтения данных лишь одним сигналом. Вместо сигнала RD (Read) используется сигнал записи WR (Write), а данные на ШД формирует не внешнее устройство, а МП. При обращении к ячейкам памяти, входящим в адресное пространство МП сигнал IO/M =0.

3. Обращение к УВВ. При обращении к УВВ, адреса которых не входят в адресное пространство МП, используются команды IN <N8> для ввода и OUT <N8> для вывода данных. 8-ми разрядный номер внешнего устройства <N8>, указанный в команде, формируется в виде младшего байта ША и дублируется старшим байтом ША. При обращении к УВВ сигнал IO/M =1.

4. Захват шин МП. Используется для отключения ШД и ША микропроцессора при реализации прямого доступа в память (ПДП) от внешних устройств.

При HOLD = 1 мик­ро­процессор заканчивает выполнение текущей команды, записывает адрес следующей команды в стек и пере­во­дит шины данных и адреса в высокоимпедансное, т. е. в выклю­чен­ное состояние. После этого формируется сигнал разрешения захвата шин HLDA = 1. После выполнения этого режима сигнал HOLD = 0 и МП переходит к выполнению команды, адрес которой находится в стеке.

5. Прерывание. Используется для асинхронной обработки сигналов от периферийных устройств. МП КР1821ВМ85 имеет 5 входов сигналов запроса на прерывание, имеющих различный приоритет. Вход TRAP имеет высший приоритет. Далее приоритеты расположены по убыванию в следующем порядке: RST7.5, RST6.5, RST5.5, INTR.

Запрос на прерывание подается логической "1". При поступлении запроса на прерывание в мик­ро­процессоре выполняются следующие операции:

- заканчивается выполнение текущей команды;

- записывается адрес следующей команды в стек;

- в программный счетчик PC загружается адрес подпрограммы обработки прерывания;

- в конце подпрограммы обработки прерывания должна стоять команда RET- возврат по адресу в стеке, по которой продолжает выполняться прерванная программа.

Первые четыре запроса на пре­рывание используют фикси­рован­ные адреса:

TRAP  – 0024h;

RST 7.5  – 003Ch;

RST 6.5  – 0034h;

RST 5.5  – 002Ch.

Для запроса INTR необходимо использовать отдельный контроллер прерываний К580ВН59, в котором адрес (или вектор) подпрограммы обработки прерывания программируется отдельно.

При поступлении запроса с низшим приоритетом в момент текущей обработки прерывания новый запрос игнорируется. Если поступает запрос с высшим приоритетом по сравнению с приоритетом текущей обработки прерывания, то завершается выполнение текущей команды, записывается адрес следующей команды в стек и затем загружается в программный счетчик PC начальный адрес подпрограммы обработки нового прерывания.

Управление запросами на прерывания RST7.5, RST6.5, RST5.5 в МП осуществляется с помощью команд SIM и RIM, а для INTR командами DI – запрет прерываний и EI – разрешение прерываний. Прерывание TRAP действует всегда.

6. Обращение к стеку. Стек – это специально организованная память с последовательным доступом к ячейкам или память магазинного типа. Используют два способа организации стека:

- LIFO (Last In First Out) – когда первым из стека читается код, который был записан последним;

- FIFO (First In First Out) – когда первым из стека читается код, который был записан первым.

В МП КР1821ВМ85 используется стек типа LIFO.

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

Особенностью МП фирмы Intel является использование для стека части общей памяти данных, то есть ОЗУ. При этом, в начале программы должна быть выполнена команда определения вершины стека – LXI SP <Adr16>, в которой указывается максимальный адрес области ОЗУ, отведенный под стек. Запись кодов в стек выполняется по два байта с уменьшением адреса. Чтение кодов из стека выполняется также по два байта и с увеличением адреса. Так как обращение к стеку выполняется для двух байт, то в стек можно записывать и читать как данные, так и адреса.

На рисунке 2.2.2 представлена последовательность операций при обращении к стеку. Пусть вершина стека определяется адресом C8FFh, тогда: Запись в стек – команда PUSH <RG>:

- исходное состояние указателя стека SP уменьшается на единицу – SP-1 (C8FEh);

- старший байт кода записывается в ячейку памяти по адресу C8FEh;

- еще раз указатель стека уменьшается на единицу – SP-2 (C8FDh);

- младший байт кода записывается в ячейку памяти C8FDh;

- указатель стека остается в состоянии SP-2 (C8FDh).

Р исунок 2.2.2 Запись в стек двухбайтного кода 7EA5h

Чтение из стека - команда POP<RG>:

- по адресу SP (C8FDh) из памяти читается младший байт кода;

- состояние указателя стека увеличивается на единицу – SP+1 (C8FEh);

- по адресу C8FEh из памяти читается старший байт кода;

- состояние указателя стека увеличивается на единицу – SP+2, указатель стека возвращается в исходное состояние – адрес (C8FFh).

2.3 Структурная схема микроконтроллера

На рисунке 2.3.1 представлена структурная схема МК на базе МП КР1821ВМ85. Каждый цикл работы МК представляет собой последовательность следующих операций:

Рисунок 2.3.1 Структурная схема МК на базе КР1821ВМ85

- на ША выставляется адрес команды, причем старший байт адреса сразу выставляется на разрядах ША15-ША8, а младший байт – на ШД;

- по заднему фронту сигнала ALE младший байт фиксируется в регистре адреса РгА, после чего на ША формируется 16-ти разрядный адрес;

- дешифратор адреса ДША формирует сигналы выбора устройств (кристалла) ВК, по которому разрешается обращение к соответствующему устройству МК;

- в режиме записи данных во внешние устройства (ОЗУ, УВВ) на ШД микропроцессор выставляет данные и формирует сигнал WR, по которому данные записываются в соответствующее внешнее устройство;

- в режиме чтения по разрешающему сигналу с ДША и соответствующему адресу на ША внешнее устройство выставляет код, который по сигналу RD читается микропроцессором;

- одновременно с выполнением текущей команды в МП формируется адрес следующей команды, который загружается в программный счетчик PC.

2.4  Система команд

Система команд КР1821ВМ85 почти полностью соответствует системе команд КР580ВМ80. Команды этого микропроцессора, ставшего классическим, приведены во многих книгах и справочниках. Наиболее удачное описание можно найти в [12].

Команды МП КР1821ВМ85 имеют переменную длину, кратную байту. Формат команды занимает от одного до трех байт. Так как память в микропроцессорах интеловского направления организована побайтно, то чтение команды выполняется последовательно и может занимать соответственно от одного до трех циклов обращения к памяти.

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

- команды пересылок данных;

- команды преобразования данных;

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

В системе команд предусмотрены операции с парой регистров:

PSW

A

B

C

D

E

H

L

(ст.байт)

(мл.байт)

SP

PC

Рисунок 2.4.1 Объединение РОНов в пары регистров

Наряду с 8-разрядными регистрами существуют два 16-разрядных регистра: указатель стека SP и программный счетчик PC.

При выполнении операций в МП формируются признаки (флаги), которые записываются в PSW (Processor Status Word) – слово состояния процессора или регистр флагов F.

D7

D6

D5

D4

D3

D2

D1

D0

s

z

0

h

0

p

1

c

Рисунок 2.4.2 Формат регистра признаков PSW

Состояние разрядов PSW следующее:

- s (sign) – знак результата, s=1, если результат отрицательный;

- z (zero) – если результат нулевой, то z=1;

- h (half carry)-полуперенос, когда возникает перенос из разряда D3 в разряд D4, то h=1;

- p (parity) - если результат четный;

- с (carry) – если сформировался перенос.

Для сохранения признаков в стеке используется команда PUSH PSW.

2.4.1 Способы адресации операндов

Команды обработки данных должны отвечать на следующие вопросы:

- где, по какому адресу или адресам взять операнды?;

- что сделать с операндами?;

- куда поместить результат?

Если полностью отвечать на эти вопросы и учесть, что шина адреса данного МП имеет два байта, то получится длина команды равная 7-ми байтам (2 операнда – это 4 байта, код операции – 1 байт, результат – 2 байта). Для уменьшения длины команд до трех байт в данном МП используется адрес по умолчанию – аккумулятор (А). Кроме того, используются короткие команды длиной в один байт, когда источником операнда является РОН.

При огромном многообразии способов адресации операндов выделим 4 основных способа.

1. Регистровая адресация – в команде в качестве источников операндов указаны регистры общего назначения.

Достоинство – однобайтная команда, и, как следствие, малое время выполнения команды, а недостаток – ограниченное количество РОНов.

Пример регистровой адресации – MOV B,L.; переслать байт из регистра (L) в регистр (B).

2. Непосредственная адресация – в команде указывается сам операнд в виде константы. Команды двухбайтные.

Пример непосредственной адресации - MVI H,35h; записать в регистр (H) число 35h.

3. Прямая адресация – в команде указывается адрес ячейки памяти, в которой находится операнд.

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

Пример прямой адресации LDA F8E4h; переслать в аккумулятор байт из ячейки памяти с адресом F8E4h.

4. Косвенная адресация - в команде указываются регистры, в которых хранится адрес ячейки памяти, в которой находится операнд.

Команды с косвенной адресацией однобайтные. Для реализации косвенной адресации в структуре микропроцессора необходимо иметь регистры с разрядностью ША и возможностью использования их в качестве источника адреса. Такими регистрами в МП КР1821ВМ85 является пара регистров общего назначения (HL). Команды с этими регистрами в случае косвенной адресации имеют обозначение (M).

MOV M,E ; - переслать из регистра (E) данные в ячейку памяти с адресом, хранящимся в паре регистров (HL);

MOV D,M ; - переслать данные из ячейки памяти с адресом, хранящимся в паре регистров (HL), в регистр (D).

2.4.2 Команды пересылок данных

В командах пересылок данных фактически выполняется копирование данных, то есть в источнике сохраняется пересылаемый код.

1. Пересылки данных (регистровая адресация):

MOV r1,r2 ; пересылка данных из регистра r1 в r2,

где r  {A,B,C,D,E,H,L}, то есть любой РОН;

MOV M,r ; пересылка данных из регистра в память по адресу,

хранящемуся в паре регистров (H,L);

MOV r,M ; пересылка данных в регистр из памяти по адресу,

хранящемуся в паре регистров (H,L).

2. Запись константы в регистр или в пару регистров (непосредственная адресация):

MVI r,D8 ; 8-разрядные данные записываются в регистр D8(r);

LXI r,D16 ; 16-разрядные данные записываются в пару регистров D16(r1,r2), причем в команде указывается только один регистр со старшим байтом (рисунок 2.4.1).

3. Пересылка байта в память и из памяти (прямая адресация):

LDA A16 ; из ячейки памяти с указанным в команде 16-разрядным адресом байт переписывается в аккумулятор (A), M[A16](A);

STA A16 ; (A)M[A16];

4. Запись-чтение из стека (регистровая адресация):

PUSH r ; (r1,r2) stack, то есть данные из пары регистров, из которых в команде указывается только старший байт, пересылается в стек;

POP r ; stack (r1,r2).

5. Ввод-вывод данных. Команды используются для обращения к УВВ. Различают 2 способа обращения к внешним устройствам:

a). обращение к УВВ, не входящим в адресное пространство МП, при этом используются команды

IN N8 ; P[N8] (A), ввод байта в аккумулятор из УВВ, где N8 – 8-разрядный номер внешнего устройства;

OUT N8 ; (A) P[N8], вывод байта.

Для этого способа ввода-вывода данных при выполнении команд номер N8 устанавливается на младшем байте ША и дублируется на старшем байте ША.

б). обращение к УВВ как к ячейкам памяти, при этом УВВ входят в адресное пространство МП:

LDA A16 ; P[A16](A),

STA A16 ; (A)P[A16].

2.4.3 Команды преобразования данных

Особенностью этих команд является использование по умолчанию аккумулятора (А) в качестве источника одного операнда и приемника результата. В комментариях к командам значком  будем отмечать признак переноса (рисунок 2.4.2).

1. Арифметические операции сложения:

- сложение с содержимым регистра

ADD r ; (A)+(r)(A);

- сложение с содержимым регистра и с учетом переноса

ADC r ; (A)+(r)+(A);

- сложение с константой D8

ADI D8 ; (A)+D8(A);

- сложение с константой D8 и с переносом

ACI D8 ; (A)+D8+(A).

2. Арифметические операции вычитания:

- вычитание содержимого регистра

SUB r ; (A)-(r) (A);

- вычитание содержимого регистра с учетом переноса

SBB r ; (A)-(r)- (A).

3. Инкремент:

- приращение на 1 содержимого регистра

INR r ; (r)+1 (r);

- приращение на 1 содержимого пары регистров

INX r ; (r1,r2)+1 (r1,r2).

4. Декремент:

- уменьшение на 1 содержимого регистра

DCR r ; (r)-1 (r);

- уменьшение на 1 содержимого пары регистров

DCX r ; (r1,r2)-1 (r1,r2).

5. Сравнение:

- сравнение содержимого (A) с константой - CPI D8 ;

- сравнение содержимого аккумулятора с содержимым регистра - CMP r .

При выполнении операций сравнения вычисляется разность (A)-(r) или (A)-D8, при этом содержимое регистров не изменяется, а изменяется состояние признаков, по которым может быть выполнен условный переход.

6. Логические операции “И” :

- с содержимым регистра ANA r ; (A) (r)(A);

- с константой ANI D8 ; (A) D8(A).

7. Логические операции “ИЛИ” :

- с содержимым регистра ORA r ; (A) (r)(A);

- с константой ORI D8 ; (A) D8(A).

8. Логические операции “Исключающее ИЛИ”:

- с содержимым регистра XRA r ; (A) (r)(A);

- с константой XRI D8 ; (A) D8(A).

9. Операции циклического сдвига (выполняются в аккумуляторе) :

- влево без учета признака переноса С - RLC ;

- вправо без учета переноса - RRC ;

- влево c учетом переноса RAL ;

- вправо с учетом переноса RAR ;

2.4.4 Команды передачи управления

1. Безусловный переход выполняется по указанному в команде 16-разрядному адресу - JMP <A16>; 3-х байтная команда.

2. Условные переходы. В общем виде мнемокод команды можно представить следующим образом:

J* <A16>; выполняется переход по указанному адресу, если признак (*) равен 1;

JN* <A16>; выполняется переход по указанному адресу, если признак (*) равен 0.

Основные команды условных переходов имеют следующий вид:

- JZ <A16> ; переход, если нулевой результат;

- JNZ <A16> ; переход, если не нулевой результат;

- JC <A16>; переход при =1, если есть перенос или заем в операции сравнения для (A)<(r);

- JNC <A16> ; переход при =0, если нет переноса или заема в операции сравнения, то есть (A) (r).

3. Вызов подпрограммы с начальным адресом, указанным в команде CALL <A16>.

Это 3-х байтная команда, по которой выполняется следующее:

  • адрес следующей команды записывается в стек;

  • в программный счетчик PC записывается начальный адрес подпрограммы, указанной в команде;

  • выполняется подпрограмма, в конце которой должна быть команда RET, по которой выполняется возврат по адресу в стеке.

4. Вызов подпрограммы по фиксированному адресу:

RST0 – RST7.

Это однобайтные команды, по которым выполняется следующее:

  • адрес следующей команды записывается в стек;

  • в программный счетчик PC записывается фиксированный начальный адрес подпрограммы – RST0 – 0000h, RST1 – 0008h, RST2 – 0010h .... RST7 – 0038h;

  • выполняется подпрограмма, в конце которой должна быть команда RET, по которой выполняется возврат по адресу в стеке.

5. Переход по адресу в стеке - RET. Используется для возврата из подпрограмм. По этой команде в программный счетчик PC загружается адрес следующей команды из стека.

2.4.5 Команды SIM и RIM

Рассмотрим дополнительно введенные в микропроцессор КР1821ВМ85 команды SIM и RIM.

Команда SIM (Set interrupt mask – установить маску пре­ры­ваний) используется двояким образом:

–  для маскирования прерываний;

- для последовательного вывода бита через выход SOD.

Перед выполнением команды SIM в аккумулятор необходимо записать код, разряды которого интерпретируются следующим образом (табл.2.4.1):

Таблица 2.4.1

D7

D6

D5

D4

D3

D2

D1

D0

Вывод бита на выход SOD

Разрешение последовательного вывода

-

-

Разрешение маскирования

Разряд

маски

RST 7.5

Разряд

маски

RST 6.5

Разряд

маски

RST 5.5

- D7 – старший разряд аккумулятора выводится на выход SOD;

- если разряд D6 = 1, то последовательный вывод разрешен;

- запросы на прерывание по входам RST 7.5, RST 6.5, RST 5.5 могут быть с помощью команды SIM, отключены выборочно или маскированы;

- маскирование запросов выполняется при D3 = 1 путем установки соответствующего разряда D2-D0 в состояние лог."1";

- если разряды маскирования (D2-D1) = 0, то соответствующие входы запросов на прерывание действуют.

По команде DI запрещаются все запросы на прерывание, кро­ме запросов по входу TRAP.

Пример 4.1. Подпрограмма последовательного вывода байта.

Распределим РОНы. Пусть в (D) – исходный байт, в (C) – счетчик битов, тогда подпрограмма может иметь вид:

MVI C,08h ; исходное состояние счетчика числа шагов

M1: MOV A,D ; исходный байт из регистра (D) в (A)

ANI 80h ; выделение бита D7 для передачи на выход

ORI 40h ; установление разряда D6=1

SIM ; вывод бита на выход SOD

MOV A,D ; исходный байт копируется из регистра (D) в (A)

RLC ; сдвиг влево

MOV D,A ; сдвинутый байт копируется из (A) в регистр (D)

DCR C ; декремент счетчика

JNZ <M1> ; проверка на окончание цикла. Eсли (С)≠0, то выполняется переход по метке M1

RET ; возврат по адресу в стеке.

Таким образом выполняется побитный последовательный вы­вод байта начиная со старшего разряда.

Команда RIM (Read interrupt mask – читать маску прерываний).

Используется также двояким образом:

–  для проверки состояния разрядов маски прерываний;

- для последовательного ввода данных со входа SID.

При выполнении команды RIM аккумулятор загружается бай­том, разряды которого интерпретируется следую­щим образом (табл. 2.4.2):

Таблица 2.4.2

D7

D6

D5

D4

D3

D2

D1

D0

Бит со входа SID

Ожидание

RST 7.5

Ожидание

RST 6.5

Ожидание

RST 5.5

Разрешение маскирования

Разряд

маски

RST 7.5

Разряд

маски

RST 6.5

Разряд

маски

RST 5.5

- разряды D2-D0 индицируют состояние масок по соот­ветст­вующим входам запроса на прерывание. Если читается лог."0", то запросов нет;

- если D3 = 0, то это означает, что прерывания заблокированы либо автоматически (вследствие выполнения предыдущего запроса), либо общей командой DI, либо по команде SIM;

- разряды D6-D4 при лог."1" указывают, что получен соот­вет­ст­вующий запрос на прерывание, но прерывание по нему еще не вы­полнено. Это может произойти либо тогда, когда прерывания за­блокированы, либо когда установлен соответствующий бит маски в состояние лог."1";

- разряд D7 соответствует состоянию входа SID.

Пример 4.2. Подпрограмма последовательного ввода байта.

Распределим РОНы. Пусть в (D) – принимаемый байт, (C) – счетчик битов. Необходимо учесть, что при последовательной передаче байта первым приходит старший бит (см. предыдущий пример), тогда подпрограмма будет иметь следующий вид:

MVI C,08h ; исходное состояние счетчика числа шагов

MVI D,0 ; исходное состояние регистра (D)

M2: RIM ; чтение бита по входу SID в аккумулятор

ANI 80h ; выделение разряда D7 в аккумуляторе

ORA D ; объединение по ИЛИ разряда D7 и регистра (D)

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

ANI 7Fh ; очистка старшего разряда в аккумуляторе

MOV D,A ; сохранение в регистре (D)

DCR C ; декремент счетчика

JNZ <M2> ; проверка на окончание цикла. Eсли (С)≠0, то выполняется переход по метке M2

RET ; возврат по адресу в стеке.

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