- •Микропроцессорные контроллеры
- •8.3 Система команд
- •10.4 Организация памяти
- •1. Типы архитектур микроконтроллеров
- •1.1 Основные структуры вычислительных систем
- •1.2 Определение микропроцессора
- •1.3 Шинная организация соединений
- •1.4. Типы архитектур микроконтроллеров
- •2 Микроконтроллер на базе 8-разрядного
- •2.1 Описание микропроцессора кр1821вм85
- •2.2 Режимы работы мп
- •3 Микроконтроллер на базе 16-разрядного микропроцессора к1810вм86
- •3.1 Технические характеристики мп к1810вм86
- •3.2 Назначение сигналов
- •3.3 Программно-доступные регистры
- •3.5 Организация внешней памяти
- •3.6 Структурная схема мк на базе мп к1810вм86
- •3.7 Способы адресации
- •3.8 Система команд мп 1810вм86
- •3.8.1 Команды пересылок данных
- •2. Пересылки “регистр-память” -
- •3.8.2 Команды преобразование данных
- •10. Команды сдвигов –
- •3.8.3 Команды передачи управления
- •1. Безусловные переходы -
- •8 Микроконтроллер на базе омэвм к1816ве48
- •8.1 Технические характеристики к1816ве48
- •8.2 Способы адресации операндов
- •8.3 Система команд
- •Rlc a, rrc a ; циклические сдвиги влево и вправо через признак переноса.
- •8.4 Таймер
- •8.5 Структурная схема мк
- •9 Микроконтроллер на базе омэвм к1816ве51
- •9.1 Технические характеристики омэвм к1816ве51
- •9.2 Организация памяти
- •9.3 Регистры специальных функций
- •9.4 Способы адресации операндов
- •9.5 Система команд
- •Rlc a, rrc a ; циклические сдвиги влево и вправо через признак переноса.
- •9.6 Управление прерываниями
- •9.7. Последовательный ввод-вывод данных
- •9.8 Таймеры
- •11.1 Семейство pic-контроллеров
- •12 Современные тенденции в развитии
- •12.1 Сигнальные процессоры фирмы Texas Instruments
- •12.2 Сигнальные процессоры Analog Devices
- •12.3 Транспьютеры
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 ; возврат по адресу в стеке.