В зависимости от значения байта адреса прямо адресуемый бит выбирается из двух групп битов. Значения адреса от 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 – программные флаги, ранее установленные в программе. Окончательный результат должен выдаваться на выходной вывод порта.
Первые два способа решения основываются на алгоритме, показанном на рис. 10, который может быть выполнен практически любым микропроцессором. Выполнение программы идет с проверками и ветвлением, до тех пор пока не будет получен результат, который выдается на порт.
8085 | 8048 | 8051 |
IN SERPORT | MOV C,SERPIN | |
ANI MASK | CLRC | |
JZ L0 | JNT0 L0 | |
CMC | CPLC | |
L0: LXI HL,SERBUF | L0: MOV R0,#SERBUF | |
MOV A,M | MOV A,@R0 | MOV A,SERBUF |
RR | RRC A | RRCA |
MOV M,A | MOV @R0,A | MOV SERBUF,A |
8 команд | 7 команд | 4 команды |
14 байт | 9 байт | 7 байт |
56 состояний | 9 циклов | 4 цикла |
19 мкс | 22,5 мкс | 4 мкс |
а) подпрограмма ввода | ||
8085 | 8048 | 8051 |
LXI HL,SERBUF | MOV R0,#SERBUF | |
MOV A,M | MOVA,@RO | MOV A,SERBUF |
RR | RRCA | RRCA |
MOV M,A | MOV @R0,A | MOV SERBUF,A |
IN SERPORT | ||
JC H1 | JCHI | |
L0: ANI NOT MASK | ANL SERPRT,#NOT MASK | MOV SERPIN,C |
JMP CNT | JMPCNT | |
H1: ORI MASK | H1: ORL SERPRT,#MASK | |
CNT: OUT SERPORT | CNT: | |
10 команд | 8 команд | 4 команды |
20 байт | 13 байт | 7 байт |
72 состояния | 11 циклов | 5 циклов |
24 мкс | 27,5 мкс | 5 мкс |
б) подпрограмма вывода | ||
Рисунок 8 – | Подпрограммы последовательного ввода/вывода |
В первом варианте решения (пример 1) не используются команды битового процессора, хотя используется мнемоника MCS-51. Другие процессоры могут выполнить аналогичные действия, используя собственную мнемонику типа INPUT, OUTPUT, LOAD, STORE и т.д.
Благодаря возможностям проверки битов одна команда MCS51 может заменить последовательность "переслать/маскировать/условно перейти". Это позволяет сократить программу (пример 2). Для удобства каждой входной переменной присвоено символическое имя.
Рисунок 9 – Аппаратное решение логической функции | Рисунок 10 – Программное решение логической функции |
Более красивое решение (пример 3) получается с применением команд битового процессора, благодаря чему удается написать программу без команд условного перехода. При завершении программы полученный результат присваивается флагу переноса, который копируется на выходной вывод.
Таким образом ОМЭВМ семейства MCS-51 могут моделировать любую комбинационную схему с N-числом входов с помощью самое большее N+1 строк исходной программы: по одной строке на каждый вход и еще одна на сохранение результата. Возможное ограничение при моделировании большого числа входов и выходов определяется длиной программы и фиксированным числом выводов портов.
Пример 1. Использование команд с байтовыми операндами
BFUNC1 | вычисляет логическую функцию 6 переменных путем загрузки байта маскирования соответствующих битов в аккумуляторе и выполнения условных переходов. Байты и маски соответствуют адресам и битовым позициям. (Используется для процессоров, ориентированных на работу с байтами) | ||||
OUTBUF | DATA | 22H ; карта состояния выходов | |||
TESTV: | MOV | A,P2 | |||
ANL | A,#00000100B | ||||
JNZ | TESTU | ||||
MOV | A,TCON | ||||
ANL | A,#00100000B | ||||
JZ | TESTX | ||||
TESTU: | MOV | A,P1 | |||
ANL | A,#00000010B | ||||
JNZ | SETQ | ||||
TESTX: | MOV | A,TCON | |||
ANL | A,#00001000B | ||||
JNZ | TESTZ | ||||
MOV | A,20H | ||||
ANL | A,#00000001B | ||||
JZ | SETQ | ||||
TESTZ: | MOV | A,21H | |||
ANL | A,#00000010B | ||||
JZ | SETQ | ||||
CLRQZ: | MOV | A, OUTBUF | |||
ANL | A,#11110111B | ||||
JMP | OUTQ | ||||
SETQ: | MOV | A, OUTBUF | |||
ORL | A,#00001000B | ||||
OUTQ: | MOV | OUTBUF, A | |||
MOV | P3,A | ||||
Пример 2. Использование команд проверки битов | |||||
BFUNC2 | вычисляет логическую функцию 6 переменных путем прямого опроса каждого бита. Биты обозначены в соответствии с символами, использованными в алгоритме (Используется возможность проверки битов) | ||||
U | BIT | Pl.l | |||
V | BIT | P2.2 | |||
W | BIT | TF0 | |||
X | BIT | IE1 | |||
Y | BIT | 20H.0 | |||
Z | BIT | 21H.1 | |||
Q | BIT | P3.3 | |||
TEST_V: | JB | V,TEST_U | |||
JNB | W,TEST_X | ||||
TEST_U: | JB | U,SET_Q | |||
TEST_X: | JNB | X,TEST_Z | |||
JNB | Y,SET_Q | ||||
TEST_Z: | JNB | Z,SET_Q | |||
CLR_Q: | CLR | Q | |||
JMP | NXTTST | ||||
SET_Q: | SETB | Q | |||
NXTTST: | ... | ; продолжение программы | |||
Пример 3. Использование битового процессора | |||||
FUNC3 | Вычисляет логическую функцию 6 переменных с использованием возможностей битового процессора MCS-51. | ||||
MOV | C,V | ||||
ORL | C,W | ; Выход вентиля ИЛИ | |||
ANL | C,U | ; Выход верхнего вентиля И | |||
MOV | 0F,C | ; Сохранение промежуточного состояния | |||
MOV | C,X | ||||
ANL | C,/Y | ; Выход нижнего вентиля И | |||
ORL | C,0F | ; Использование ранее вычисленного значения | |||
ORL | C,/Z | ; Использование последней входной переменной | |||
MOV | C,/Z | ; Вывод результата |
В разделе 7 пособия рассмотрены практические примеры и их реализация на основе системы команд и программной модели ОМЭВМ семейства MCS-51. Все приведенные решения задач имеют программную совместимость с последующими модификациями 8-разрядных микроконтроллеров фирмы INTEL, включая MCS-251.
1. Исаченко В.П., Осипова В.А., Сукомел А.С. Компьютерная электроника. Учебник для вузов. 3-е изд. перераб. и доп. М.:Энергия. 2005.-488 с.
2. Михеев М.А., Михеева И.М. Основы радиоэлектроники. М.:Энергия. 2003.-368 с.
3. Краснощеков Е.А., Сукомел А.С. Задачник по электронике. М.:Энергия. 1999-280 с.
4. Козлова О.В., Новиков Ю.Л., Бочарова Т.Н. Стандарт предприятия. Оформление расчетно-пояснительной записки и графической части. СТП ВГТУ 004-2003.-42 с.
5. Теплотехнический справочник. Под общ. ред. В.Н. Юренева и П.Д. Лебедева. В –2х т. Изд. 2-е, перераб. М., "Энергия", 2006.-897 с.