КОМАНДЫ, МОДИФИЦИРУЮЩИЕ ФЛАГИ PSW
Команда | Флаги | Команда | Флаги | Команда | Флаги |
ADD | C, OV, AC | CPL | C = NOT C | ORL C,/bit | C |
ADDC | C, OV, AC | DA | C | RLC | C |
ANL C,bit | C | DIV | C = 0, OV | RRC | C |
ANL C,/bit | C | MOV C,bit | C | SETB C | C = 1 |
CJNE | C | MUL | C = 0, OV | SUBB | C, OV, AC |
CLR C | C = 0 | ORL C,bit | C |
Способы адресации
2.8.1. Адресацией(addressing) – называется способ задания в команде адреса операнда.
В МК семейства MCS-51 используются следующие способы адресации:
1) прямая адресация,
2) косвенная адресация,
3) регистровая адресация,
4) неявная адресация,
5) непосредственная адресация,
6) индексная адресация.
2.8.2. При прямой адресации (direct addressing) в команде указывается
8-битный адрес операнда. Этот способ используется только для адресации ячеек внутренней памяти данных и регистров специальных функций.
Например: INC 7FH
PUSH ACC
2.8.3. При косвенной адресации (indirect addressing) в команде указывается регистр, в котором содержится адрес операнда. Этот способ может быть использован для адресации ячеек как внутренней, так и внешней памяти данных.
Для задания 8-битного адреса операнда может быть использован регистр R0 или R1 активного регистрового банка или регистр-указатель стека SP (Stack Pointer), а для задания 16-битного адреса – регистр-указатель данных DPTR (Data Pointer Register).
Для обозначения косвенной адресации используется символ “@”.
Например: INC @R0
2.8.4. При регистровой адресации (register addressing) операнд находится в одном из регистров активного регистрового банка. В мнемокоде команды указывается имя регистра (R0 … R7). Номер активного банка определяется разрядами RS1 и RS0 слова состояния программы.
Например: INC R7
2.8.5. При неявной адресации (register-specific addressing) операнд находится в регистре-аккумуляторе (А), регистре-указателе данных (DPTR) или вспомогательном регистре (В). В этом случае машинный код команды не содержит адресного байта. Информацию об адресе операнда несет сам код операции. Команды операций с регистром-аккумулятором выделены в отдельную группу.
Например: CLR A
2.8.6. При непосредственной адресации (immediate addressing) значение операнда-константы указывается в коде команды вслед за кодом операции, а в мнемокоде перед значением операнда записывается символ “#”. Система счисления, в которой представлено значение операнда в мнемокоде команды, определяется буквой, стоящей после числа. Для обозначения двоичного числа используется буква B, восьмеричного – Q, десятичного – D, шестнадцатеричного – H. Число без буквенного суффикса считается десятичным.
Например: MOV A,#127
2.8.7. Индексная адресация (indexed addressing) используется только для доступа к константам, записанным в программной памяти. При этом способе адресации адрес операнда определяется как сумма содержимого 16-битного базового регистра (DPTR или PC) и содержимого аккумулятора, в который предварительно заносится смещение относительно базового адреса.
Например: MOVC A,@A+DPTR
MOVC A,@A+PC
Синхронизация процессора
2.9.1. Все МК 80С51 имеют встроенный генератор, который может быть использован в качестве тактового генератора для синхронизации процессора и других функциональных узлов. Для запуска встроенного тактового генератора, требуется подключить кварцевый резонатор и два конденсатора с емкостью 30 пФ ко входам XTAL1 и XTAL2 МК, как показано на рис. 2.8. Для всех типов микросхем подсемейства 80С51 (кроме 87С51) максимальная частота кварцевого резонатора равна 12 или 16 Мгц, для микросхем типа 87С51 – 12, 16, 20 или 24 Мгц.
Рис. 2.8. Схема запуска внутреннего тактового генератора
2.9.2. Для синхронизации микроконтроллера может быть использован внешний тактовый генератор, выход которого соединяется со входом XTAL1 (рис. 2.9).
Рис. 2.9. Подключение внешнего тактового генератора к МК 80С51
2.9.2. Тактовый генератор вырабатывает сигналы синхронизации, с помощью которых формируется машинный цикл МК. Машинный цикл состоит из шести состояний (S1 ¸ S6), а каждое состояние – из двух фаз (P1 и P2). Продолжительность одной фазы равна периоду тактового генератора (рис.2.10). Таким образом, машинный цикл имеет постоянную длительность, равную двенадцати периодам тактового генератора.
2.9.3. Дважды в течение каждого машинного цикла МК вырабатывает сигнал ALE. При использовании внешней программной памяти также дважды в течение каждого машинного вырабатывается сигнал PSEN’ (см. рис. 2.10, А). Исключением является второй цикл команды MOVX, в течение которого сигналы ALE и PSEN’ вырабатываются только один раз, но вырабатывается сигнал RD’ или WR’ (см.
рис. 2.10, В).
2.9.4. Чтение кода операции (первого байта команды) выполняется в фазе S1P1 первого машинного цикла команды по адресу, который находится в программном счетчике (см. подраздел 2.13). При выборке из внешней программной памяти вывод младшего байта программного счетчика (PCL OUT) осуществляется через порт P0, вывод старшего байта программного счетчика (PCH OUT) – через порт Р2 (см.
рис. 2.10, А). Ввод байта из внешней программной памяти (INST IN) осуществляется через порт P0. После выборки из программной памяти программный счетчик инкрементируется (содержимое счетчика увеличивается на 1). Далее выборка из программной памяти производится в фазе S4P1. Если выполняемая команда является однобайтовой, например INC A, то второй байт игнорируется процессором и программный счетчик не инкрементируется. В том случае, когда однобайтовая команда выполняется в течение двух машинных циклов, например INC DPTR, игнорируются также два байта, считанные из программной памяти в фазах S1P1 и S4P1 второго машинного цикла.
2.9.5. При обращении к внешней памяти данных по команде MOVX (см.
рис. 2.10, В) младший байт адреса ячейки памяти “защелкивается” во внешнем регистре-защелке в конце фазы S5P1 первого машинного цикла (ADDR OUT). Старший байт адреса ячейки памяти выводится через порт P2 из регистра-указателя данных или регистра-защелки порта Р2 (DPH OUT OR P2 OUT). Ввод данных в микроконтроллер (DATA IN) осуществляется в фазе S3P1 второго машинного цикла команды MOVX.
Рис. 2.10. Временные диаграммы работы МК 80С51 при выполнении команд из внешней программной памяти: