ПРИМЕР: MOVC A,@A+DPTR; MOVC A,@A+PC; JMP @A+DPTR.
5 Программная модель битового процессора
Пригодность архитектуры каждого компьютера для конкретного класса задач определяется тем, насколько его система команд соответствует задачам, которые должны быть выполнены. Поэтому для дискретного управления в реальном масштабе времени наличие в системе команд операций непосредственно над битами приводит к созданию более производительных систем и программ обработки входной и выходной двоичной информации. С этой целью в ОМЭВМ семейства MCS-51 введены специальные средства, называемые битовым процессором, которые поддерживают прямые логические операции с отдельными битами и операции их тестирования и позволяют использовать однобитовые переменные в логических операциях.
В связи с этим в систему команд ОМЭВМ семейства MCS-51 введены специальные инструкции для выполнения операций с битовыми переменными. Имеется 17 таких команд, которые перечислены в табл. 3.
Таблица 3 - Команды битового процессора
Мнемоническое обозначение
|
Описание команды
|
Число байтов
|
Число циклов
|
|
SETB C
|
Установка флага переноса
|
1
|
1
|
|
SETB bit
|
Установка бита
|
2
|
1
|
|
CLRC
|
Сброс флага переноса
|
1
|
1
|
|
CLR bit
|
Сброс бита
|
2
|
1
|
|
CPL C
|
Инверсия флага переноса
|
1
|
1
|
|
CPL bit
|
Инверсия бита
|
2
|
1
|
|
MOV C, bit
|
Пересылка бита во флаг переноса
|
2
|
1
|
|
MOV bit,C
|
Пересылка флага переноса в бит
|
2
|
2
|
|
ANL C, bit
|
"Логическое И" бита и флага переноса
|
2
|
2
|
|
ANL. C, /bit
|
"Логическое И" инверсии бита и флага переноса
|
2
|
2
|
|
ORL C, bit
|
"Логическое ИЛИ" бита и флага переноса
|
2
|
2
|
|
ORL C,/bit
|
"Логическое ИЛИ" инверсии бита и флага переноса
|
2
|
2
|
|
JC rel8
|
Переход, если флаг переноса установлен
|
2
|
2
|
|
JNC rel8
|
Переход, если флаг переноса сброшен
|
2
|
2
|
|
JB bit,rel8
|
Переход, если бит установлен
|
3
|
2
|
|
JNB bit,rel8
|
Переход, если бит сброшен
|
3
|
2
|
|
JBC bit,rel8
|
Переход, если бит установлен, и сброс этого бита
|
3
|
2
|
|
|
ОБОЗНАЧЕНИЯ:
С - флаг переноса;
bit - 128 программно-доступных битов, любой I/O вывод, бит управления или состояния;
/bit - 128 программно-доступных битов, любой I/O вывод, бит управления или состояния, взятые с инверсией;
rel8- байт относительного смещения (условный переход осуществляется в диапазоне от -128 до +127 байтов относительно адреса первого байта следующей команды).
Эти команды в зависимости от выполняемой функции могут быть одно-, двух- или трехбайтные. Те из них, которые оперируют с флагом переноса, имеют однобайтный код или код, за которым следует байт смещения, использующийся для вычисления адреса условного перехода (рис. 4.а). В более обобщенных командах битовых операций после кода добавляется байт адреса прямоадресуемого бита, образуя двух- или трехбайтные команды (рис. 4.б). На рис. 4 для справки приведены коды этих команд.
С помощью указанных команд можно обращаться непосредственно к 128 битам внутреннего ОЗУ и к 83 битам одиннадцати восьмиразрядных регистров ОМЭВМ.
Код команды:
|
|
|
Код команды:
|
|
SETB С
|
|
|
11010011В (D3H)
|
|
CLR С
|
|
|
11000011В (С3Н)
|
|
CPL С
|
|
|
10110011В(В3Н)
|
|
Код команды
|
Смещение
|
|
|
|
JC
|
<ге18>
|
|
01000000В (40Н)
|
|
JNC
|
<ге18>
|
|
01010000В (50Н)
|
|
а) Команды проверки и управления флагом переноса
|
|
Код команды
|
Адрес бита
|
|
Код команды:
|
|
SETB
|
<bit>
|
|
11010010B (D2H)
|
|
CLR
|
<bit>
|
|
11000010В (С2Н)
|
|
CPL
|
<bit>
|
|
10110010В (В2Н)
|
|
MOV С,
|
<bit>
|
|
10100010В (А2Н)
|
|
MOV
|
<bit>, С
|
|
10010010В (92Н)
|
|
ANL С,
|
<bit>
|
|
10000010В (82Н)
|
|
ANL С,
|
</bit>
|
|
10110000В (В0Н)
|
|
ORL С,
|
<bit>
|
|
01110010В(72Н)
|
|
ORL С,
|
</bit>
|
|
10100000В (А0Н)
|
|
Код команды
|
Адрес бита 1
|
Смещение
|
|
|
JB
|
<bit>,
|
<ге18>
|
00100000В (20Н)
|
|
JNB
|
<bit>,
|
00010000В (10H)
|
00110000В (30Н)
|
|
JBC
|
<bit>,
|
<ге18>
|
00010000В (10H)
|
|
б) Команды проверки и операций с битами
|
|
|
Рисунок 4 - Форматы команд операций над битами
В зависимости от значения байта адреса прямо адресуемый бит выбирается из двух групп битов. Значения адреса от 0 (00Н) до 127 (7FH) определяют биты в 16-байтном блоке внутреннего ОЗУ между адресами 20Н и 2FH (см. рис.5а). Они пронумерованы последовательно от младшего бита младшего байта к старшему биту старшего байта. Адреса битов от 128 (80Н) до 255 (0FFH) соответствуют битам регистров специальных функций. Адреса этих битов вычисляются иначе, чем адреса ячеек ОЗУ: пять старших битов адреса совпадают с собственными адресами регистров, а три младших бита адреса идентифицируют позицию бита в пределах регистра (см. рис.5б).
Хотя MCS-51 имеет 20 регистров специальных функций, побитовый доступ обеспечен только для 11 (PSW, АСС, В, P0, P1, P2, P3, TCON, SCON, IE, IP). У 6 из них (PSW, Р3, TCON, SCON, IE, IP) разряды имеют собственные символические имена (рис.6).
Команды общего назначения, адресующиеся непосредственно к битам, могут обращаться к ним (в том числе и к биту переноса), используя соответствующую мнемонику: CY, AC, F0 и т.д.
К битам всех 11 регистров также можно обратиться, используя соответствующее позиционное обозначение: PSW.1, АСС.2, В.З, Р0.4 и т.д.
Регистр АСС (аккумулятор) и регистр В относятся к байтовой арифметике, но их отдельные биты могут использоваться в программе в качестве произвольных 16 флагов. В сумме со 128 ячейками ОЗУ это дает 144 битовые ячейки общего назначения для хранения переменных или программных флагов.
Рисунок 5 - Адреса прямо адресуемых битов
Все 32 вывода портов Р0-РЗ могут индивидуально адресоваться как вход, выход или вход/выход в любой комбинации. Любой вывод может служить программно реализуемым стробом, тестовым входом или последовательным каналом ввода/вывода.
Для обработки битов регистров ОЗУ, не имеющих побитового доступа, могут быть использованы логические операции с байтами.
Регистр слова состояния программы PSW содержит биты флагов и состояния процессора, включая флаг переноса. Операции обработки байтов, воздействуя на регистр PSW, могут таким образом влиять и на бит переноса.
Рисунок 6 - Формат регистров специальных функций, имеющих символические имена прямо адресуемых битов
В языке ассемблера MCS-51, как показано в табл.3, адрес бита указывается одним из трех способов: числом или выражением, соответствующим прямому адресу бита; названием или адресом регистра, содержащего данный бит, и позицией бита в регистре (0-7), разделенными точкой; для определенных битов (рис.6) - указанием символического имени. Биты также могут обозначаться произвольными именами директивой ассемблера "BIT". Например, 5-й бит регистра PSW может быть очищен любой из четырех команд:
USR_FLG
|
BIT PSW.5
|
; Описание символа пользователя
|
|
|
CLR 0D5H
|
; Абсолютная адресация
|
|
|
CLR PSW.5
|
; Использование точечного оператора
|
|
|
CLR F0
|
; Использование собственного имени бита
|
|
|
CLR USR_FLG
|
; Символ пользователя.
|
|
|
6. Применение битового процессора
Программная реализация последовательного порта. ОМЭВМ семейства MCS-51 могут программно принимать и передавать последовательные данные с использованием системы команд битового процессора. Поскольку любой вывод порта может служить последовательным входом или выходом, одновременно можно организовать несколько последовательных линий связи.
На рис. 7 показаны алгоритмы приема и передачи байтов данных. Программа будет обращаться к этому алгоритму 8 раз, синхронизируясь старт-битом, тактовым сигналом, программной задержкой или прерыванием от таймера. Данные принимаются путем опроса входного вывода, присвоения биту переноса состояния этого вывода, сдвига бита переноса в буфер данных и сохранения полученного значения в ОЗУ. Передача происходит путем сдвига содержимого буфера передаваемого байта через перенос и выдачи состояния флага переноса на выходной вывод.
Рисунок 7 - Алгоритмы последовательного порта ввода/вывода
На рис. 8 приведены программы, реализующие показанные на рис. 7 алгоритмы приема и передачи для трех различных микропроцессоров: 8085, 8048 и 8051. Программная реализация последовательного порта на MCS-51 наиболее эффективна. Представленные оценочные характеристики подтверждают эффективность реализации последовательного порта на базе MCS-51.
Решение уравнений комбинаторной логики. На рис. 9 показана реализация на ТТЛ-элементах функции шести переменных от U до Z, которая является решением уравнения
Q = (U (V+W))+(X Y)+Z.
Уравнения такого рода решаются с помощью карт Карно или аппарата алгебры булевой логики. Для сравнения выполним эту функцию тремя способами, ограничиваясь тремя подмножествами системы команд MCS-51.
Предположим, что U и V являются входными выводами некоторого порта, W и Х - биты состояния двух периферийных контроллеров, a Y и Z - программные флаги, ранее установленные в программе. Окончательный результат должен выдаваться на выходной вывод порта.
Страницы: 1, 2, 3, 4
|