ДАННЫЕ И ПРОГРАММЫ
Содержание этой главы носит в основном справочный характер. В ней приведены лишь основные понятия и самые общие сведения о работе микро-ЭВМ, без которых неподготовленному читателю будет трудно проследить работу основных ее узлов, описанию которых посвящены последующие главы книги. Читатель, знакомый с основами построения ЭВМ и программирования, может сразу перейти к следующей главе.
Как уже говорилось в предыдущей главе, чтобы решить задачу на машине, нужно ее запрограммировать; т. е. составить определенную последовательность команд (программу), которая, вместе с данными должна быть введена в память машины. В процессе решения задачи центральный процессор обращается к памяти машины, выполняет команды, извлеченные из памяти, обрабатывает в соответствии с этими командами данные, извлеченные из той же памяти и полученные от внешних устройств, и в зависимости от результатов обработки переходит к выполнению одной или нескольких других команд. Последовательность команд, приводящая к решению задачи, называется программой решения задачи. Каждая машина характеризуется определенным набором операций (системой команд), или машинным языком, которые должны быть известны пользователю, решающему свою задачу на данной машине.
Чтобы машина могла воспринимать передаваемые ей команды и данные, они должны быть представлены в двоичной форме. С этой целью каждой команде ставится в соответствие двоичный код, а все числовые значения выражаются в двоичной системе счисления.
Под двоичной системой счисления подразумевается позиционная весомозначная система с основанием 2 и с цифрами 0,1. Термин "позиционная весомозначная" означает, что в зависимости от положения цифры в числе ей приписываются разные значения, или вес. В наиболее распространенных системах счисления этот вес равен степени основания, показатель которой ра-вен n — 1, где п — номер разряда, отсчитываемый справа налево. Системы счисления получают наименование в зависимости от основания.
Так, в десятичной системе счисления основанием является 10, в двоичной — 2, в восьмеричной — 8, в шестнадца-теричной — 16 и т. п. При этом количество используемых цифр для представления чисел равно основанию системы счисления. В двоичной системе используются всего две цифры: 0 и 1. В десятичной системе используются 10 цифр от 0 до 9, в восьмеричной — восемь цифр, т. е. первые восемь цифр десятичной системы (от 0 до 7). В шестнадцатеричной системе счисления используются все цифры десятичной системы, а в качестве недостающих шести цифр используются первые шесть букв латинского алфавита: А, В, С, D, Е, F. Примеры записи десятичных чисел от 0 до 16 и от 248 до 255 в двоичной, восьмеричной и шестнадцатеричной системах счислений приведены в табл. 3.1. Десятичное число 255 является наибольшим представимым в двоичной системе счисления при условии использования всего восьми разрядов для записи чисел. Для представления чисел, больших 255, необходимо в двоичной системе счисления использовать большее число разрядов.
Чтобы отличить число, записанное в той или иной системе счисления, от числа, записанного в другой системе счисления, в конце записи обычно ставят соответствующие используемому основанию цифры или буквы (иногда в виде индексов, например 3810). Для десятичной системы счисления часто используется буква D, для двоичной — В, для восьмеричной — Q, для шестнадцатеричной — Н. Например:
216 D = 11011000 В = 330 Q = D8 Н.
Как следует из табл. 3.1, наиболее громоздким из рассмотренных представлений, в особенности для больших чисел, является двоичное представление, а наиболее компактным — шестнадца-теричное представление, не совсем удобное для восприятия. Чтобы воспользоваться числовыми результатами в шестнадцатеричной системе счисления, необходимо перевести их в более привычную десятичную форму. Способы перевода чисел из одной системы счисления в другую неоднократно описывались в литературе и здесь рассматриваться не будут.
Таблица 3.1
Представление чисел |
|||||
Десятичное |
Двоичное |
Восьмеричное |
Шестнадцате-ричное |
||
0 |
00000000 |
000 |
00 |
||
1 |
00000001 |
001 |
01 |
||
2 |
00000010 |
002 |
02 |
||
3 |
00000011 |
003 |
03 |
||
4 |
00000100 |
004 |
04 |
||
5 |
00000101 |
005 |
05 |
||
6 |
00000110 |
006 |
06 |
||
7 |
00000111 |
007 |
07 |
||
8 |
00001000 |
010 |
08 |
||
9 |
00001001 |
011 |
09 |
||
10 |
00001010 |
012 |
ОА |
||
11 |
00001011 |
013 |
0В |
||
12 |
00001100 |
014 |
ОС |
||
13 |
00001101 |
015 |
OD |
||
14 |
00001110 |
016 |
ОЕ |
||
15 |
00001111 |
017 |
OF |
||
16 |
00010000 |
020 |
10 |
||
248 |
11111000 |
370 |
F8 |
||
249 |
11111001 |
371 |
F9 |
||
250 |
11111010 |
372 |
FA |
||
251 |
11111101 |
373 |
FB |
||
252 |
11111100 |
374 |
FC |
||
253 |
11111101 |
375 |
FD |
||
254 |
11111110 |
376 |
FE |
||
255 |
11111111 |
377 |
FF |
||
не совсем удобно ввиду непривычности использования буквенных обозначений числовых величин.
Весьма распространенным способом представления данных и команд является их восьмеричное представление. Оно довольно компактно и легко переводимо в двоичную форму. Для этого достаточно запомнить двоичные коды трех первых двоичных разрядов (см. табл. 3.1). Перевод двоичного числа в восьмеричное производится следующим образом. Двоичный код разбивается справа налево на триады, каждая триада считается самостоятельным двоичным кодом трехразрядного числа и заменяется соответствующей цифрой от 0 до 7. Перевод восьмеричного кода в двоичный производится аналогичным образом: каждая цифра от 0 до 7 заменяется соответствующим двоичным кодом.
Пусть, например, требуется записать восьмеричный код восьмиразрядного двоичного числа 10110101 В. Разбитый на триады двоичный код будет 10 НО 101 В. После замены каждой триады двоичным кодом получим 265 Q. Двоичное представление восьмеричного числа 312Q получается также просто: 11 001 010 В или 11001010 В.
Представление двоичных чисел в табл. 3.1 в виде восьмиразрядных кодов приведено не случайно. Наименьшей единицей информации, которая может быть представлена в ЭВМ, является двоичный разряд или бит. Бит может иметь два значения: О или 1, а соответствующий ему электрический сигнал — два уровня напряжения. Группа из восьми двоичных разрядов называется байтом. Более крупными единицами информации являются килобит (1024 = 210 бит, или двоичных разрядов), килобайт (1024 = 210 байт) и мегабайт (1048576 =220 байт). Иногда выделяют группу из четырех двоичных разрядов, называемую ниблом. Этим понятием пользуются при рассмотрении процессов выполнения арифметических операций в двоично-десятичных кодах.
Остановимся теперь на определении понятия машинной команды как элемента записи машинной программы.
Под командой подразумевается указание, записанное на машинном языке микро-ЭВМ и определяющее ее действия при выполнении отдельной операции или части вычислительного процесса. Команда может быть представлена в символической форме или в форме кодов (шестнадцатеричных, восьмеричных, двоичных). Таким образом, под программой подразумевается фиксированная последовательность команд, воспринимаемых машиной как единая целая группа указаний, позволяющая решить поставленную пользователем задачу.
В качестве формального языка для описания данных и программ их обработки на микро-ЭВМ используются не только машинный язык, но и специальные языки программирования, такие как, например, БЕЙСИК. Программа на таком языке, называемом иногда языком высокого уровня, не может непосредственно восприниматься микропроцессором. В совершенных ЭВМ специальная программа, называемая интерпретатором или компилятором, преобразует программу на языке высокого уровня в эквивалентную ей программу на языке машины.
Программа, написанная на языке Ассемблер, переводится пользователем в машинные восьмеричные коды с помощью таблицы кодов (табл. 4.1 — 4,3) и вводится вместе с данными также в восьмеричных кодах в ПМ-ЭВМ с клавиатуры и размешается в оперативном запоминающем устройстве, в котором выделяется специальная область, где пользователь может разместить свою программу.
Процесс размещения программы в памяти может быть легко представлен с помощью простой модели запоминающего устройства, имеющей вид обычного книжного стеллажа или открытой полки, разделенной на отдельные ячейки. Каждой ячейке присвоен номер, называемый адресом. В ячейку можно поместить данные ограниченного объема: один байт или восьмиразрядный двоичный код. Команда, занимающая три машинных слова (три байта), может быть размещена лишь в трех ячейках памяти. При этом первый байт размещается в ячейке по указанному адресу, а остальные два — в последующих ячейках памяти. Важно при этом правильно поместить начальную команду программы, которая должна находиться в той ячейке, с которой микропроцессор начинает свою работу.
Программа для ПМ-ЭВМ представляет собой последовательность указанных кодов, из которых левый код — адрес ячейки памяти, а правый — команда или данные.
Предположим, что соответствующие программе и исходным данным найденные коды введены в ПМ-ЭВМ, На чем основаны процессы преобразования всей этой информации в машине?
ДРУГИЕ ВОЗМОЖНОСТИ ПМ-ЭВМ
В этой главе мы рассмотрели расширение возможностей ПМ-ЭВМ в части клавиатуры и индикации, памяти, внешнего накопителя и ТВ-дисплея. Обслуживание всех этих устройств осуществлялось программным путем, без значительного усложнения схемы самой ПМ-ЭВМ и ее устройств ввода/вывода. Программное обслуживание внешних устройств со стороны центрального процессора требует больших затрат машинного времени за счет исполнения основной программы и снижает производительность вычислительной системы. Использование прерываний, прямого доступа к памяти (ПДП) и программируемых периферийных микросхем позволяет повысить производительность и гибкость вычислительной системы. Периферийные программируемые микросхемы являются специализированными периферийными процессорами, берущими на себя часть задач центрального процессора. При этом техническая сложность системы зачастую не возрастает или даже уменьшается.
Отечественной промышленностью выпускается широкая номенклатура периферийных программируемых микросхем, со-гласуемых с МП типа КР580ВМ80А.
Использование программируемых микросхем в конкретной МП-системе связано: 1) с заданием режимов ее работы в системе, адресацией и определением электрических связей с внутренними шинами МП-системы и периферийными устройствами; 2) с вводом фрагмента программы, задающей режимы работы микросхемы (программа инициализации); 3) с обращением к микросхеме в процессе исполнения рабочей программы.
Количественный рост МП-системы ведет и к ее архитектурному усложнению. Возникает необходимость каким-либо образом стандартизовать связи микро-ЭВМ. Известно много стандартов внутрисистемных шин МП-систем. Для МП серии КР580ИК80А наиболее известны шины MULTIBUS и 8=100, позволяющие объединять в систему периферийные, процессорные блоки и блоки памяти различных изготовителей.
Большая МП-система требует специального математического обеспечения (МО). Если при написании и отладке программ емкостью до 1 Кбайт можно с успехом обойтись программированием в кодах, то программы большего размера пишутся обычно на языках различных уровней, в том числе и на специализированных языках высокого уровня.
Для перевода таких программ на машинный язык необходимы программы-интерпретаторы, а для отладки — программы редактирования и отладки. Чтобы весь комплекс программ мог успешно функционировать, необходимо использовать какую-либо операционную систему (ОС). Все это доводит общую емкость МО до нескольких сотен килобайт и требует для хранения специальных накопителей. Поэтому не имеет смысла, как говорят, "с нуля" проектировать большую МП-систему. Гораздо разумнее использовать уже имеющийся опыт, взяв в качестве образца готовую промышленную систему.
Для любой системы, состоящей из заданного набора элементов, есть предел сложности, определяемый надежностью входящих в нее элементов, надежностью связей между элементами, допусками при проектировании, программным обеспечением, архитектурой системы, внешними условиями и теми функциями, которые система должна выполнять. Не ставьте перед собой сверхзадач и не переусложняйте систему, иначе она будет неработоспособной. Имейте мужество отказаться от дальнейшего наращивания уже имеющейся системы, когда ее надежность падает до неприемлемого уровня, чтобы заново перепроектировать систему на современном идеологическом и техническом уровне.
Рассмотрим коротко характеристики некоторых программируемых микросхем, находящих широкое применение в МП-системах.
Микросхема программируемого последовательного интерфейса типа КР580ВВ51А является универсальным синхронно-асинхронным приемопередатчиком (УСАПП), предназначенным для осуществления связи в последовательном формате между МП-системой и внешним абонентом. Микросхема используется как периферийное устройство, программируемое центральным процессором МП-системы почти для любого стандартного протокола последовательной передачи данных. Микросхема принимает данные от МП-no шине данных в параллельном формате и преобразует их в непрерывный поток последовательных данных для передачи абоненту. Микросхема может одновременно с этим принимать последовательные данные, преобразовывать их в параллельный формат и передавать микропроцессору.
Она сигнализирует микропроцессору о готовности к приему нового слова, предназначенного для передачи абоненту в последовательном формате, а также о готовности передать МП-принятое от абонента слово. МП-может в любой момент времени считать из микросхемы слово состояния, указывающее на возможные ошибки при приеме информации и содержащее признаки наличия управляющих сигналов.
Микросхема типа КР580ВИ53 представляет программируемый таймер/счетчик, предназначенный для работы в качестве периферийного устройства МП-системы. Микросхема состоит из трех независимых 16-битовых счетчиков с максимальной частотой счета 2 МГц. Каждый счетчик микросхемы может работать в одном из шести запрограммированных режимов. С помощью микросхемы таймера/счетчика решается одна из наиболее часто встречающихся в МП-системах задач — генерирование точных программно задаваемых временных задержек взамен организации холостых программных циклов. Пользователь подключает соответствующим образом микросхему, загружает один из счетчиков нужным числом, после чего в результате подачи команды счетчик отсчитывает заданную задержку и вырабатывает сигнал прерывания для МП-системы. Микросхема может выполнять функции не только генератора задержки, но и программируемого генератора заданной частоты, счетчика событий, датчика реального времени и др.
Микросхема типа КР580ВВ55А представляет собой программируемый периферийный интерфейс, предназначенный для приема в МП-систему и выдачи из нее информации в параллельном коде, функции микросхемы в системе задаются программно, поэтому, как правило, не требуется подключать какие-либо дополнительные логические схемы. Предназначенные для ввода и вывода внешней информации 24 ножки микросхемы могут быть индивидуально запрограммированы группами по 12 и использованы в трех различных режимах работы. В первом из них (Режим 0) в каждой группе из 12 ножек часть может быть запрограммирована на ввод, а часть — на вывод.
Во втором режиме ( Режим 1) группа программируется так, что 8 ножек служат для ввода или вывода, а 3 ножки из оставшихся 4 предназначены для сигналов квитирования (запрос — подтверждение) и прерывания. В третьем режиме (Режим 2) из 8 ножек организуется 8-разрядная двунаправленная шина, а 5 ножек (с за-емом из другой группы) предназначены для сигналов квитирования и прерывания.
Микросхема типа КР580ВТ57 представляет собой четырех-канальный программируемый контроллер прямого доступа к памяти (ПДП), предназначенный для организации высокоскоростного обмена данными между периферийными устройствами и памятью МП-системы, построенной на базе микропроцессора КР580ВМ80А. Функция микросхемы заключена в основном в
мы имеют информационную емкость 2К х 8 и программируются побайтно импульсами на ТТЛ-уровне. Микросхема приводится в исходное состояние (когда во всех разрядах стоят единицы) путем облучения ультрафиолетовым источником света, в качестве которого можно использовать с соответствующими предосторожностями обычную бытовую кварцевую лампу, а в качестве программатора — саму ПМ-ЭВМ.
ПРИЛОЖЕНИЯ
Система команд микропроцессора КР580ИК80А
ПРИЛОЖЕНИЕ1
Мнемокод команды |
Описание команды |
Длина команды байт |
, Изменяемые флаги |
Число тактов |
INRr |
Увеличение содержимого регистра г на еди- |
1 |
Z,S,P,AC |
5 |
|
ницу |
|
|
|
INRM |
Увеличение на единицу содержимого ячейки |
1 |
Z,S,P,AC |
10 |
|
памяти по адресу, указанному в регистрах Н |
|
|
|
|
и L |
|
|
|
DCRr |
Уменьшение содержимого регистра г на еди- |
1 |
Z,S,P, AC2 |
5 |
|
ницу |
|
|
|
DCRM |
Уменьшение на единицу содержимого ячейки |
1 |
Z, S,P, AC2 |
10 |
|
памяти по адресу, указанному в регистрах Н |
|
|
|
|
иЬ |
|
|
|
MOVrl,r2 |
Пересылка данных из регистра г 2 в регистр rl |
1 |
- |
5 |
MOV M, г |
Пересылка данных из регистра г в ячейку па- |
1 |
- |
7 |
|
мяти по адресу, указанному в регистрах Н и L |
|
|
|
MOV г, М |
Пересылка данных в регистр г из ячейки памя- |
1 |
- |
7 |
|
ти по адресу, указанному в регистрах Н и L |
|
|
|
ADDr |
Суммирование содержимого регистра г и со- |
1 |
Z,S,P,C,AC |
4 |
|
держимого аккумулятора |
|
|
|
ADDM |
Суммирование содержимого ячейки памяти |
1 |
Z,S,P,C, AC |
7 |
|
по адресу, указанному в регистрах Н и L, |
|
|
|
|
с содержимым аккумулятора |
|
|
|
ADCr |
Сложение с учетом переноса содержимого ре- |
1 |
Z,S,P, C, AC |
4 |
|
гистра г и содержимого аккумулятора |
|
|
|
ADCM |
Сложение с учетом переноса содержимого |
1 |
Z,S,P,C,AC |
7 |
|
ячейки памяти по адресу, указанному в ре- |
|
|
|
Продолжение прилож. 1
Мнемокод команды |
Длина Описание команды команды, Изменяемые флаги байт |
Число тактов |
|
ги страх Н и L, с содержимым аккумулятора |
|
SUB r |
Вычитание содержимого регистра г из содер- 1 Z,S,P, С , АС |
4 |
|
жимого аккумулятора |
|
SUBM |
Вычитание из содержимого аккумулятора 1 Z, S, Р, С , АС |
7 |
|
содержимого ячейки памяти по адресу, ука- |
|
|
занному в регистрах Н и L |
|
SBBr |
Вычитание с заемом содержимого регистра г 1 Z, S, Р, С , АС |
4 |
|
из содержимого аккумулятора |
|
SBBM |
Вычитание с заемом из содержимого аккуму- 1 Z,S,P,C , AC |
7 |
|
лятора содержимого ячейки памяти по адресу, |
|
|
указанному в регистрах Н и L |
|
ANA г |
Поразрядное И над содержимым регистра г 1 Z , S, Р, С = 0, АС = 0 |
4 |
|
и аккумулятора |
|
ANAM |
Поразрядное И над содержимым аккумуля- 1 Z , S, Р, С = 0, АС = 0 |
7 |
|
тора и ячейки памяти по адресу, указанному |
|
|
в регистрах Н и L |
|
XRAr |
Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ над со- 1 Z, S, Р, С = 0, АС = 0 |
4 |
|
держимым регистра г и аккумулятора |
|
XRAM |
Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ над со- 1 Z, S, Р, С = 0, АС = 0 |
7 |
|
держимым аккумулятора и ячейки памяти |
|
|
по адресу, указанному в регистрах Н и L |
|
ORAr |
Поразрядное ИЛИ над содержимым регист- 1 Z,S,P,C = 0, AC = 0 |
4 |
|
pa r и аккумулятора |
|
ORAM |
Поразрядное ИЛИ над содержимым аккуму- 1 Z, S, Р, С = 0, АС = 0 |
7 |
|
лятора и ячейки памяти по адресу, указанно- |
|
|
му в регистрах Н и L |
|
CMP г |
Сравнение содержимого регистра г и аккуму- 1 (Z, S, P, С, АС)3 |
4 |
|
лятора |
|
CMPM |
Сравнение содержимого аккумулятора и ячей- 1 (Z, S, P, С, АС)3 |
7 |
|
ки памяти по адресу, указанному в регист- |
|
|
рах Н и L |
|
INXrp |
Увеличение на единицу содержимого пары ре- 1 - |
5 |
|
гистров гр (В, D, Н, SP) |
|
DCXrp |
Уменьшение на единицу содержимого пары 1 - |
5 |
|
регистров гр (В, D, H, SP) |
|
DADrp |
Сложение содержимого пары регистров тр 1 С |
10 |
|
(В, D, H, SP) с содержимым пары регистров |
|
|
Н и L и хранение результата в Н и L |
|
POPrp |
Выдача данных из стека в пару регистров гр 1 (Z, S, P, С, АС)6 |
10 |
|
(В, D, H) или в аккумулятор и регистр при- |
|
|
знаков PSW |
|
PUSH rp |
Занесение в стек содержимого пары регист- 1 - |
11 |
|
ров гр (В, D, H) или содержимого аккумуля- |
|
|
тора и регистра признаков PSW |
|
STAXrp |
Запись содержимого аккумулятора в ячейку 1 - |
7 |
|
памяти, косвенно адресуемую парой регист- |
|
|
ров гр (В, D) |
|
LDAX rp |
Запись в аккумулятор содержимого ячейки 1 |
7 |
|
памяти, косвенно адресуемой парой регист- |
|
|
ров гр (В, D) |
|
RNZ |
Возврат из подпрограммы при отсутствии 1 - |
5/11 |
|
нуля (флаг нуля в состоянии 0) |
|
RZ |
Возврат из подпрограммы при наличии нуля 1 - |
5/11 |
|
(флаг нуля в состоянии 1) |
|
RNC |
Возврат из подпрограммы при отсутствии 1 - |
5/11 |
|
переноса (флаг переноса в состоянии 0) |
|
RC |
Возврат из подпрограммы при наличии пе- 1 - |
5/11 |
|
реноса (флаг переноса в состоянии 1) |
|
Продолжение прилож. 1
Мнемокод команды |
Описание команды |
Длина команды, Изменяемые флаги байт |
Число тактов |
|||
RPO |
Возврат из подпрограммы при отсутствии |
1 |
5/11 |
|||
|
четности (флаг четности в состоянии 0) |
|
|
|||
RPE |
Возврат из подпрограммы при наличии чет- |
1 |
|
|||
|
ности (флаг четности в состоянии 1) |
|
|
|||
RP |
Возврат из подпрограммы при положительном |
1 |
5/11 |
|||
|
результате (флаг знака в состоянии 0) |
|
|
|||
RM |
Возврат из подпрограммы при отрицательном |
1 |
5/11 |
|||
|
результате (флаг знака в состоянии 1) |
|
|
|||
RET |
Безусловный возврат из подпрограммы |
1 С4
|
5/11 |
|||
RLC |
Циклический сдвиг содержимого аккумуля- |
1 С4 |
|
|||
|
тора влево |
1 С4 |
|
|||
RRC |
Циклический сдвиг содержимого аккумуля- |
1 С |
|
|||
|
тора вправо |
|
|
|||
RAL |
Циклический сдвиг содержимого аккумуля- |
1 С4 |
|
|||
|
тора влево, включая флаг переноса |
1 С4 |
|
|||
RAR |
Циклический сдвиг содержимого аккумуля- |
1 С4 |
|
|||
|
тора вправо, включая флаг переноса |
|
|
|||
XCHG |
Обмен данными между парами регистров Н, |
1 |
4 |
|||
|
L HD.E |
|
|
|||
XTHL |
Обмен данными между двумя верхними ячей- |
1 |
18 |
|||
|
ками стека и парой регистров Н, L (сначала |
|
|
|||
|
самая верхняя обменивается с L , затем сле- |
|
|
|||
|
дующая с Н) |
|
|
|||
SPHL |
Передача в указатель стека содержимого ре- |
1 |
|
|||
|
гистров Н и L |
|
|
|||
PCHL |
Передача в счетчик команд содержимого пары 1 - |
5 |
||||
|
регистров Н и L с последующим выполнением |
|
||||
|
программы с адреса, равного новому содер- |
|
||||
|
жимому счетчика команд (по существу коман- |
|
||||
|
да перехода) |
|
||||
HLT |
Останов программы 1 - |
7 |
||||
NOP |
Отсутствие операции 1 - |
4 |
||||
DI |
Запрет на прерывание программы 1 - |
4 |
||||
EI |
Разрешение прервать программу 1 - |
4 |
||||
DAA |
Перевод двоичного представления содержимо- 1 — |
4 |
||||
|
го аккумулятора в двоично-десятичный код |
|
||||
СМА |
Поразрядное инвертирование содержимого 1 - |
4 |
||||
|
аккумулятора |
|
||||
STC |
Установка флага переноса С в единицу 1 С = 1 |
4 |
||||
CMC |
Инвертирование значения флага переноса 1 С=С |
4 |
||||
RSTA |
Повторный запуск программы с адреса 1 - |
11 |
||||
|
8А10 = (ОА08) |
|
||||
ADI<B2> |
Сложение содержимого байта В2 с содержи- 2 Z,S,P, С, АС |
7 |
||||
|
мым аккумулятора |
|
||||
ACI <В2> |
Сложение с учетом переноса содержимого 2 Z,S, P, С, АС |
7 |
||||
|
байта В2 с содержимым аккумулятора |
|
||||
SUI <В2> |
Вычитание содержимого байта В2 из содер- 2 Z, S, Р, С1 , АС2 |
7 |
||||
|
жимого аккумулятора |
|
||||
SBI <В2> |
Вычитание с заемом содержимого байта В2 2 Z, S, Р, С1 , АС2 |
7 |
||||
ANI <В2> |
из содержимого аккумулятора Поразрядное И над содержимым байта В2 и 2 Z , S, Р, С = 0, АС = 0 |
7 |
||||
|
содержимым аккумулятора |
|
||||
XRI <B2> |
Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ над со- 2 Z, S, Р, С = 0, АС =0 |
7 |
||||
|
держимым байта В2 и содержимым аккуму- |
|
||||
|
лятора |
|
||||
Продолжение прилож. 1
Мнемокод команды |
Описание команды |
Длина команды, байт |
Изменяемые флаги |
Число тактов |
ORI<B2> |
Поразрядное ИЛИ над содержимым байта В2 |
2 |
Z,S,P, C = 0, AС=0 |
7 |
|
и содержимым аккумулятора |
|
|
|
CPI <В2> |
Сравнение содержимого байта В2 с содержи- |
2 |
(Z, S, Р,С, АС)3 |
7 |
|
мым аккумулятора |
|
|
|
IN <B2> |
Ввод данных в аккумулятор из порта ввода, |
2 |
- |
10 |
|
определяемого адресом в байте В2 |
|
|
|
OUT<B2> |
Вывод данных из аккумулятора в порт вы- |
2 |
- |
10 |
|
вода, определяемый адресом в байте В2 |
|
|
|
MVI r <B2> |
Занесение содержимого байта В2 в регистр г |
2 |
- |
7 |
MVI M <B2> |
Запись содержимого байта В2 в ячейку памя- |
2 |
- |
7 |
JNZ<B2><B3> |
ти по адресу, указанному в регистрах Н и L Переход в программе к выполнению команды по адресу в В2, ВЗ при отсутствии нуля (флаг нуля в состоянии 0) |
3 |
- |
10 |
JZ<B2><B3> |
Переход в программе к выполнению команды по адресу в В2, ВЗ при наличии нуля (флаг нуля в состоянии 1) |
3 |
- |
10 |
JNC<B2><B3> JC<B2><B3> |
Переход в программе к выполнению команды по адресу в В2, ВЗ при отсутствии переноса (флаг переноса в состоянии 0) Переход в программе к выполнению команды по адресу в В2, ВЗ при наличии переноса (флаг переноса в состоянии 1) |
3 3 |
- |
10 10 |
JPO<B2><B3> |
Переход в программе к выполнению команды по адресу в В2, ВЗ при наличии нечетности (флаг четности в состоянии 0) |
3 |
- |
10 |
JPE<B2><B3> |
Переход в программе к выполнению команды |
3 |
— |
10 |
|
по адресу в В2, ВЗ при наличии четности (флаг четности в состоянии 1) |
|
|
|
JP<B2><B3> |
Переход в программе к выполнению команды по адресу в В2, ВЗ при положительном результате (флаг знака в состоянии 0) |
3 |
|
10 |
JM<B2><B3> |
Переход в программе к выполнению команды по адресу в В2, ВЗ при отрицательном результате (флаг знака в состоянии 1) |
3 |
|
10 |
JMP<B2><B3> |
Безусловный переход к команде по адресу в В2, ВЗ |
3 |
— |
10 . с |
CNZ<B2><B3> |
Вызов подпрограммы при отсутствии нуля (флаг нуля в состоянии 0) |
3 |
|
11/175 с |
CZ<B2><B3> |
Вызов подпрограммы при наличии нуля (флаг нуля в состоянии 1) |
• 3 |
~ |
11/175 с |
CNC<B2><B3> |
Вызов подпрограммы при отсутствии перенос, (флаг переноса в состоянии 0) |
i3 |
— |
И/175 |
CC<B2><B3> |
Вызов подпрограммы при наличии переноса (флаг переноса в состоянии 1) |
3 |
— |
И/175 |
CPO<B2><B3> |
Вызов подпрограммы при наличии нечетности (флаг четности в состоянии 0) |
3 |
— |
11/175 |
CPE<B2><B3> |
Вызов подпрограммы при наличии четности (флаг четности в состоянии 1) |
3 |
— |
И/175 |
CP<B2><B3> |
Вызов подпрограммы при наличии положительного результата (флаг знака в состоянии 0) |
3 |
|
И/175 |
CM<B2><B3> |
Вызов подпрограммы при наличии отрицательного результата (флаг знака в состоянии 1) |
3 |
|
И/175 |
Продолжение прилож. 1
Мнемокод команды |
Длина Описание команды команды, Изменяемые флаги байт |
Число тактов |
CALL<B2><B3> |
Вызов подпрограммы из памяти по адресу, 3 - |
17 |
|
указанному в байтах В2, ВЗ |
|
LXIrp<B2><B3> |
Занесение содержимого двух байтов В2, ВЗ 3 - |
10 |
|
в пару регистров гр (В, D, Н, SP) |
|
STA<B2><B3> |
Запись содержимого аккумулятора в ячейку 3 - |
13 |
|
памяти по адресу в В2, ВЗ |
|
LDA<B2><B3> |
Запись в аккумулятор содержимого ячейки 3 — |
13 |
|
памяти по адресу в В2, ВЗ |
|
SHLD<B2><B3> |
Занесение содержимого регистров Н и L в па- 3 - |
16 |
|
мять: содержимое L пересылается в ячейку |
|
|
по адресу в В 2, ВЗ; содержимое регистра Н - |
|
|
в ячейку, адрес которой на единицу больше |
|
LHLD<B2><B3> |
Загрузка в регистры Н и L содержимого ячеек 3 - |
16 |
|
памяти: в L пересылаются данные из ячейки па- |
|
|
мяти по адресу в В2, ВЗ; в Н — из ячейки, ад- |
|
|
рес которой на единицу больше |
|
1. Флаг устанавливается при наличии заема в старший разряд, в противном случае сбрасывается.
2. Флаг устанавливается при наличии заема из старших четырех разрядов в младшие, в противном случае сбрасывается.
3. Флаг нуля Z устанавливается, если содержимое регистра или байта данных совпадает с содержимым аккумулятора; флаги знака и переноса S и С устанавливаются, если содержимое регистра или байта данных больше содержимого аккумулятора; флаг вспомогательного переноса АС устанавливается, если содержимое младших четырех разрядов регистра или байта данных больше содержимого соответствующих разрядов аккумулятора; флаг четности Р устанавливается, если байт разности между содержимым аккумулятора и содержимым регистра или байта данных содержит четное число единиц.
4. Состояние флага равно значению выдвигаемого из аккумулятора двоичного разряда.
5. Большее значение ( за косой чертой) указывает на число тактов при выполнении условий, меньшее — при невыполнении.
6. По команде POP PSW флаги устанавливаются в соответствии со значением разрядов слова, хранящегося в стеке; при выдаче данных из стека в другие регистры флаги не меняются.
Приложение 2. СХЕМА ПМ-ЭВМ
Приложение 3. Таблица элементов, используемых в схеме ПМ-ЭВМ
Обозначение микросхемы |
Тип микросхемы |
Выводы микросхем |
Питание |
||
+ 5 В общее |
||
D1 |
КР580ИК80А |
Данные в тексте |
D2 |
КР580ГФ24 |
Данные в тексте |
D3-D7, D31 |
К155ЛН1 |
14 7 |
D8 |
К155ЛА1 |
14 7 |
D9, DIG, D23 |
К589АП16 |
16 8 |
Dll, D24 |
К155ИД4 |
14 7 |
D12, D13 |
КР541РУ2 |
18 9 |
D14, D15 |
КР556РТ4 |
16 8 |
D16-D22, D29 |
К155ТМ7 |
5 12 |
D25 |
К155ЛА2 |
14 7 |
D26 |
К155ЛЕ1 |
14 7 |
D27, D28 |
К155ЛАЗ |
14 7 |
D30 |
К155ТМ2 |
14 7 |
KB - 9 МГц
С1 - 0,15 мкФ
R1-R6 - 1 кОм
R7 — R30 — в зависимости от типа VI — V24
R31-R34- 5,1 кОм
V1-V24 - АЛ102А, АЛ102Г, АЛ112А-М
ФУНКЦИОНАЛЬНАЯ СХЕМА МИКРОПРОЦЕССОРА
При работе с ПМ-ЭВМ пользователю необходимо иметь информацию о числе и назначении всех регистров, специальных указателей, называемых флагами, и о системе команд МП. Число, назначение регистров, флагов и команд пользователь изменить не может. Он может изменять лишь содержимое регистров и использовать команды в любой нужной ему комбинации.
Как уже говорилось, под регистром подразумевается специальное запоминающее устройство, состоящее из элементов (триггеров) с двумя устойчивыми состояниями. Число элементов (восемь) соответствует одному байту. Большинство регистров микропроцессора 8-разрядные и лишь некоторые 16-разрядные. Все регистры разбиты на группы и отличаются различным функциональным назначением.
Основными блоками МП (рис. 4.4) являются: блок регистров общего назначения со схемой выборки регистров, регистр команд с дешифратором команд и формирователем машинных циклов, арифметическо-логическое устройство (АЛУ) с регистром А (аккумулятором), выполняющее арифметические и логические операции, регистр временного хранения данных W и Z (РВХД), флаговый регистр, устройство управления и синхронизации, буферы шины данных (БШД) и адреса (БША), буфер аккумулятора (БА), схема приращения и уменьшения (СПИУ).
Рис. 4.4. Схема ЦПЭ на базе микропроцессора КР580ИК80А:
СГ - сигналы генератора тактовых импульсов; СС — сигнапы синхронизации
Доступными программисту являются следующие регистры: шесть 8-разрядных регистров, адресуемых по одному или парами (регистры В, С, D, E, H, L); один 8-разрядный регистр А, называемый аккумулятором; один 16-разрядный регистр, называемый указателем стека; один 16-разрядный регистр, называемый счетчиком команд, или программным счетчиком.
В некоторых специальных случаях могут быть доступными данные следующих двух регистров: регистра команд (8-разрядного) ; флагового регистра (5-разрядного).
Программно недоступными пользователю являются регистры W и Z. Они используются для временного хранения данных при выполнении команд микропроцессором.
Регистры общего назначения. Эти регистры размерностью в один байт обозначаются В, С, D, E, H, L. Они используются для хранения данных и промежуточных результатов вычислений, выполняемых с помощью арифметическо-логиче-ского устройства. При обработке 16-разрядных слов возможно обращение к парам регистров (В, С); (D, E); (H, L).
Аккумулятор — специальный однобайтовый регистр, обозначаемый А. При выполнении арифметических и логических операций служит источником одного из операндов и местом запоминания результата выполнения операции. Аккумулятор является основным операционным звеном арифметическо-логического устройства. Он служит также местом хранения данных и результатов операций, выполняемых в АЛУ.
Регистр команд — однобайтовый регистр, в котором хранится код выполняемой команды. Этот регистр непосредственно пользователю недоступен. Это означает, что не существует команды, которая бы явным образом могла изменить его содержимое. После выполнения очередной команды в регистр команд автоматически записывается код следующей команды из ячейки оперативной памяти, адрес которой содержится в счетчике команд.
Счетчик команд — двухбайтовый (16-разрядный) регистр, обозначаемый PC, или программный счетчик. Этот регистр хранит адрес следующей команды, которая должна быть выполнена вслед за предыдущей. Счетчик команд автоматически получает приращение хранимого в нем адреса в зависимости от того, какую по длительности команду (в один, два или три байта) микропроцессор считывает из памяти, указывая всегда на 1-й байт следующей команды. На содержимое этого регистра пользователь может повлиять только с помощью команд, изменяющих последовательное выполнение программы (например, команд безусловного перехода), а также с помощью некоторых специальных команд.
Указатель стека-двухбайтовый (16-разрядный) регистр, обозначаемый SP. Этот регистр хранит адрес очередной ячейки стека. Стеком называется особым образом организованный участок оперативной памяти, выделяемый программистом для временного хранения содержимого внутренних регистров МП со специальным режимом доступа.
Эта область оперативной памяти необходима в том случае, когда нужно прекратить выполнение реализуемой последовательности команд и вернуться к ней позже, например для немедленного выполнения специальной подпрограммы или в результате прерывания программы. Данные от МП поступают в верхнюю часть стековой памяти, и при этом содержимое указателя стека уменьшается на единицу, чтобы всегда указывать на адрес последней заполненной ячейки стека (дно свободного пространства стека). Когда же данные выбираются (считываются) из стека, содержимое указателя стека увеличивается на единицу с каждым выбранным байтом. Эти операции со стеком называются стековыми. С их помощью легко организуются многоуровневые (вложенные) прерывания и программы обращения к подпрограммам из подпрограмм (к вложенным подпрограммам).
Флаговый регистр- регистр, содержащий 5 двоичных разрядов, называемых флагами, по числу хранимых в нем специальных признаков результатов некоторых операций. Иногда он называется регистром признаков или флаговым регистром битов условий. Значение флага указывает на результат выполнения какой-либо операции. Микропроцессор КР580ИК80А содержит флаговый регистр, состоящий из следующих флагов: флага нуля (Z - zero), флага переноса (С -carry), флага знака (S - sign), флага четности (Р -parity), флага дополнительного переноса (АС - auxiliary carry). Флаги всегда устанавливаются или сбрасываются автоматически после выполнения очередной команды, влияющей на флаги, в зависимости от результата операции. При этом флаг считается установленным, если флаговый разряд принимает значение 1, и сброшенным, если значение разряда 0. Состояния флагов используются в командах условного перехода. Результаты выполнения арифметических и логических операций над содержимым аккумулятора, регистров общего назначения или содержимым ячеек памяти оказывают влияние на флаги следующим образом.
Флаг нуля устанавливается в состояние 1, если после выполнения какой-либо команды получен нулевой результат, и сбрасывается в 0 в случае ненулевого результата.
Флаг переноса устанавливается в 1, если в результате операций сложения и сдвига появляется единица переноса из старшего разряда байта данных, а также если появляется заем из старшего разряда после выполнения операций вычитания или сравнения, в противном случае флаг сбрасывается в 0.
Флаг знака устанавливается в 1, если в результате выполнения операций появляется логическая единица в старшем разряде байта данных (указание на отрицательный результат), и сбрасывается в 0 в случае нулевого значения старшего разряда (указание на положительный результат).
Флаг четности устанавливается в 1, если после выполнения операций сумма единиц в байте данных, подсчитываемых с помощью операции сложения по модулю 2, четна (значение суммы по модулю 2 равно 0), и сбрасывается в 0 в противном случае (число единиц — нечетное).
Флаг дополнительного переноса устанавливается в 1, если в результате выполнения команды появляется сигнал переноса из третьего разряда в четвертый в байте данных результата. Если такого переноса нет, флаг дополнительного переноса сбрасывается в 0. Сигнал этого флага используется во многих схемах вычислений, однако он особенно необходим при сложении чисел в двоично-десятичной форме.
Перейдем теперь к рассмотрению того, как микропроцессор выполняет команды.
ГРУППА АРИФМЕТИЧЕСКИХ КОМАНД
Команды этой группы предназначены для выполнения арифметических операций над данными, хранимыми в регистрах и ячейках памяти. Эти команды в отличие от команд предыдущей группы, как правило, оказывают влияние на значения разрядов флагового регистра, поскольку при выполнении арифметических операций меняются знаки используемых чисел, возникают сигналы переноса, появляются нулевые результаты и т. п. Рассмотрим примеры размещения в байтах некоторых команд этой группы.
Команда ADD r. Эта команда выполняет сложение содержимого регистра-источника S с содержимым аккумулятора А. Результат сложения помещается в аккумулятор. Чтобы получить конкретную команду, необходимо в формате команды вместо символов S проставить код регистра-источника из табл. 4.4. Например, команда 10 000 001 производит сложение содержимого регистра С с содержимым аккумулятора А. Двоичный код этой команды 10 000 001 В; в восьмеричной системе это число представляется кодом 201Q. Это представление является восьмеричным кодом команды ADD С, выполняющей указанное выше сложение (см. список команд в приложении 1). Размещение команды ADD г в байте приведено на рис. 4.9,д.
Команда SUB r. Команда выполняет вычитание содержимого регистра-источника S из содержимого аккумулятора. Результат заносится в аккумулятор (рис. 4.9,6). Например, команда 10 010 ОН В выполняет вычитание содержимого регистра Е из содержимого регистра А и помещает результат в аккумулятор. Код этой команды SUB Е — 223 Q.
ГРУППА КОМАНД ПЕРЕХОДОВ
Эта группа команд предназначена для организации правильной последовательности выполнения программы. Сюда входят команды безусловного и условного переходов, команды вызова подпрограммы и возвращения к главной программе. Все команды этой группы на флаги влияния не оказывают. Команды безусловного перехода выполняют специальные операции над содержимым счетчика команд. Команды условного перехода обеспечивают необходимое ветвление программы путем анализа состояния одного из четырех флагов: нуля, знака, четности и переноса, коды которых указаны в табл. 4.4.
Команда JMP <В2> <ВЗ> — трехбайтовая команда передает управление команде по адресу, содержащемуся в третьем и втором байтах текущей команды. Это осуществляется путем записи содержимого третьего и второго байтов команды в счетчик команд (рис. 4.11,а). Как уже отмечалось в § 4.3, счетчик команд представляет собой 16-разрядный регистр, содержащий адрес, по которому можно обратиться для считывания очередного байта команды. Восьмеричный код этой команды - 303 Q.
Команды CALL и RET — команды безусловного перехода. Первая из них передает управление подпрограмме, прекращая выполнение основной программы; вторая передает управление главной программе, возвращаясь к ее выполнению (рис. 4.11,£, в). Первая команда — трехбайтовая. Восемь старших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на единицу меньше содержимого указателя стека. Восемь младших разрядов адреса следующей команды пересылаются в ячейку памяти, адрес которой на две единицы меньше содержимого указателя стека. Содержимое указателя стека уменьшается на две единицы. Управление передается команде, адрес которой размещается в третьем и втором байтах команды CALL
Рис. 4.11. Примеры размещения некоторых команд переходов в байтах
Команда RET — однобайтовая. Ее восьмеричный код — 311Q (код предыдущей команды CALL — 315Q). В процессе выполнения этой команды содержимое указателя стека получает приращение на две единицы.
Содержимое ячейки памяти по адресу, хранящемуся в указателе стека, пересылается в счетчик команд на место младших восьми разрядов. Содержимое ячейки памяти по адресу, на единицу большему, чем содержимое указателя стека, пересылается в счетчик команд на место старших восьми разрядов. Таким образом, возвращение к главной программе происходит всегда путем обращения к байту команды, непосредственно следующему за байтом, используемым командой CALL
4.6.5. ГРУППА КОМАНД УПРАВЛЕНИЯ И РАБОТЫ СО СТЕКОМ
Команды этой группы предназначены для управления работой микропроцессора, устройствами ввода/вывода и стеком. Команды этой группы не оказывают влияния на флаги. Рассмотрим в качестве примера работу некоторых команд из этой группы.
Команда XTHL — однобайтовая команда с восьмеричным номером 343Q. Является примером наиболее длинных по времени исполнения команд - занимает 18 машинных тактов.
В процессе выполнения команды содержимое регистра L меняется на содержимое ячейки памяти по адресу, содержащемуся в указателе стека, и наоборот. Содержимое регистра Н меняется на содержимое ячейки памяти по адресу, на единицу большему, чем содержимое указателя стека, и наоборот (рис. 4.12,я). На это уходит пять машинных циклов.
Команды IN <B2>, OUT <B2> . Эти команды предназначены для ввода данных от входного порта в аккумулятор и вывода данных из аккумулятора в выходной порт соответственно. Первая команда имеет восьмеричный код 333 Q, вторая — 323 Q. Обе команды — двухбайтовые. Второй байт обеих команд отведен под адрес соответствующего входного и выходного портов. В результате выполнения первой команды данные от входного порта по двунаправленной шине данных передаются в аккумулятор. В результате выполнения второй команды данные выводятся по той же шине данных из аккумулятора в выходной порт (рис. 4.12,6, в).
Рис. 4.12. Примеры размещения некоторых команд управления в байтах
На этом закончим рассмотрение примеров размещения в байтах команд описанных выше групп и перейдем к вопросу о том, как составляется программа решения на ПМ-ЭВМ задачи с использованием приведенного в приложении 1 списка команд.
ГРУППА ЛОГИЧЕСКИХ КОМАНД
Команды этой группы предназначены для выполнения логических, или булевых, операций над данными, .содержащимися в регистрах, ячейках памяти, а также над флагами условий. К этим операциям относятся операции: логического сложения (ИЛИ), логического умножения (И), суммирования по модулю 2, сравнения, сдвига, дополнения до 1 и до 2. Как и команды предыдущей группы, все логические команды оказывают влияние на флаги.
Команда ANA г выполняет параллельно поразрядное логическое И над содержимым регистра-источника и аккумулятора. Результат операции заносится в аккумулятор (рис. 4.10,а). Например, команда 10 100 100 В выполняет операцию логического умножения поразрядно над содержимым регистра Н и А и заносит результат в аккумулятор. Двоичный код 10 100 100 В соответствует восьмеричному коду 244Q команды ANA H.
Рис. 4.10. Примеры размещения некоторых логических команд в байтах
Команда ANI < В2 > является двухбайтовой и также выполняет поразрядную операцию логического И, но над содержимым второго байта команды и аккумулятора. Команда имеет восьмеричный код-3460 (рис. 4.10,6). Результат операции заносится в аккумулятор.
Команда ORAr аналогична команде ANA r, но в отличие от нее выполняет операцию поразрядного логического ИЛИ. Результат операции заносится в аккумулятор (рис. 4.10,в).
И ОБЛАСТИ ИХ ПРИМЕНЕНИЯ
Понятие микро-ЭВМ отнюдь не означает, что пользователь имеет дело с упрощенным вариантом обычной ЭВМ, обладающим весьма ограниченными возможностями В истории создания вычислительных машин десятилетие с 70-х по 80-е годы сыграло важную роль. Благодаря успехам микроэлектронной технологии появилась возможность конструировать вычислительные машины небольших габаритов, с малым потреблением электроэнергии и в достаточной мере "производительные". Вычислительные возможности современных микро-ЭВМ не уступают возможностям средних ЭВМ начала 70-х годов. Если понятие ЭВМ неразрывно связано с понятием вычислительного центра, крупного предприятия или сложной технической системы, то микро-ЭВМ - это массовое изделие, доступное не только небольшим производственным коллективам но и отдельным лицам вследствие невысокой стоимости, малой материалоемкости, низкого энергопотребления, высокой надежности. Микро-ЭВМ может быть использована для управления производством, а также отдельной, в ряде случаев сложной технической системы, как элемент оборудования рабочего места конструктора-исследователя или научного работника, в быту и во многих других сферах.
Переворот в технике конструирования ЭВМ произошел вследствие перехода к изготовлению основных узлов вычислительной машины (и в частности, ее главного узла - центрального процессорного элемента) в габаритах одной микросхемы или нескольких микросхем с площадью размещения активных элементов в каждой микросхеме порядка 100 мм2 и менее. При разработке такого процессора, получившего название "микропроцессор" (МП), было учтено требование максимального использования аппаратурных возможностей выполнения им вычислительных или логических функций.
В конструктивном отношении микропроцессоры могут быть однокристальными (выполненными в виде одной микросхемы), многокристальными (выполненными в виде нескольких разнотипных микросхем, каждая из которых представляет собой функционально законченную часть логической схемы процессора) и секционными многокристальными (выполненными в виде нескольких однотипных микросхем, представляющих собой отдельные секции, позволяющие построить процессор с числом разрядов, пропорциональным числу используемых секций).
Кроме МП, предназначенных для обработки дискретной информации, существуют аналоговые микропроцессоры (АМП), предназначенные для обработки аналоговой информации. В их структуру включены аналого-цифровые (аналого-дискретные) и цифро-аналоговые (дискретно-аналоговые) преобразователи, т. е. устройства, преобразующие аналоговый сигнал (например, непрерывно меняющееся входное напряжение) в цифровой (набор напряжений двух фиксированных уровней, представляющих двоичный код) и обратно. Обработка аналоговой информации, преобразованной в дискретную, производится в АМП, как и в обычном микропроцессоре. Кроме однокристальных микропроцессоров существуют однокристальные микро-ЭВМ (ОМ-ЭВМ), представляющие собой микросхему, объединяющую в своем составе все основные устройства, необходимые для ее функционирования.
При использовании ОМ-ЭВМ необходимо добавить источник питания, внешние устройства и в ряде случаев дополнительное внешнее запоминающее устройство. На базе МП или ОМ-ЭВМ может быть построена одноплатная микро-ЭВМ, представляющая собой законченный конструктивный элемент. Одноплатная микро-ЭВМ может входить в состав многоплатной микро-ЭВМ, включающей, кроме того, платы сопряжения с внешними устройствами, а также источник питания, пульт управления, аппаратуру индикации ("голая микро-ЭВМ"). Если "голую микро-ЭВМ" "одеть" внешними устройствами (алфавитно-цифровой клавиатурой, дисплеем, накопителем на гибком магнитном диске и т. п.), то получится вычислительный комплекс.
Одноплатная микро-ЭВМ, ОМ-ЭВМ и "голая микро-ЭВМ" могут быть использованы в составе управляющих систем или измерительных комплексов. Примерами ОМ-ЭВМ являются однокристальные восьмиразрядные микро-ЭВМ серии К 1816, однокристальные четырехразрядные микро-ЭВМ серий К 1820 и К 1814. К одноплатным машинам относится, например, микро-ЭВМ "Истра", а к многоплатным — микро-ЭВМ "Электроника 60", ЕС-1840, "Квант" и др.
По способу реализации системы команд микро-ЭВМ разделяются на два типа. В микро-ЭВМ первого типа система команд является постоянной (фиксированной), а в микро-ЭВМ второго типа - изменяемой (программируемой на уровне микрокоманд). Более простыми, дешевыми и распространенными являются машины первого типа.
К наиболее распространенным микро-ЭВМ, выпускаемым отечественной промышленностью, относятся персональные (ПЭВМ) и профессиональные персональные (ППЭВМ) машины семейства "Электроника", а также машины: ЕС 1840, "Искра 1030", "Нейрон И9.66", "Агат", "Корвет", СМ-1810 и др.
Семейство микро-ЭВМ "Электроника" - это ряд универсальных программно-совместимых машин различной производительности. Наиболее производительные машины этого ряда сравнимы по параметрам с развитыми мини-ЭВМ. Семейство микро-ЭВМ "Электроника" - это ряд машин, ориентированных на использование в управлении технологическими процессами, для сбора и обработки данных, для обработки сообщений и управляющей информации в системах связи и контрольно-измерительных системах. Отдельные модели ряда могут быть встроены в соответствующие подсистемы управления и контроля Модели "Электроника" - это микро-ЭВМ универсального применения, которые с успехом могут быть использованы в системах автоматизированного управления. Одним из важнейших достоинств этой серии является программная совместимость с отечественными мини-ЭВМ СМ-3, СМ-4, а также с зарубежными мини-машинами семейства PDP-11, что позволяет использовать разработанное ранее программное обеспечение. Машины "Электроника 85" и "Электроника БК-0010" относятся к классу персональных компьютеров.
Предназначенная в основном для тех же целей микро-ЭВМ СМ-1810 является машиной, программно-совместимой с микро-ЭВМ, построенными на базе микропроцессора 8080 фирмы Intel.
Кроме перечисленных микро-ЭВМ отечественной промышленностью выпускается большой ассортимент диалоговых вычислительных комплексов, например ДВК-1 - ДВК-3, с высокой производительностью, что позволяет использовать программное обеспечение этой машины, а также программное обеспечение мини-ЭВМ "Электроника 100/25".
Операцион ная система вычислительного комплекса ДВК допускает использование языков БЕЙСИК, ФОРТРАН, ПАСКАЛЬ, КОБОЛ, ПЛ/1, что предоставляет большие возможности для программирования.
Современные микро-ЭВМ обладают несравненно большими возможностями, чем многие вычислительные машины прошлых поколений. Дешевизна, надежность и доступность микро-ЭВМ позволяют использовать их для решения таких задач, для которых применение средств вычислительной техники ранее было неоправданным.
В сфере промышленного производства микро-ЭВМ могут использоваться в составе информационно-управляющих вычислительных систем (ИУВС), в системах технического управления объектами и технологическими процессами и в системах организационно-технического управления цехами, предприятиями, отраслями и т. п. В таких системах микро-ЭВМ используются для сбора и обработки данных, выполнения сложных экономических и технических расчетов, планирования, управления и контроля. В управлении сложными техническими системами микро-ЭВМ чаще всего используются в составе встроенных средств управления и контроля. Замена высокопроизводительной и дорогостоящей ЭВМ, используемой в качестве центрального управляющего органа, сетью микро-ЭВМ повышает надежность, эффективность и гибкость управления сложной технической системой, позволяет организовать управление в реальном времени и снижает стоимость общих затрат на управление.
Применение микро-ЭВМ в машиностроении позволяет перейти от существующих конструкций станков с числовым программным управлением к более совершенным высокопроизводительным робототехническим конвейерным системам и к организации на их основе гибких автоматизированных производств.
Расширению сферы использования ЭВМ (особенно в последние годы) способствовало появление нового класса микро-ЭВМ — персональных ЭВМ (ПЭВМ). Под ПЭВМ подразумевается микро-ЭВМ, предназначенная для индивидуального пользования (подобно пишущей машинке, телевизору, магнитофону), но со значительно более широкими функциональными возможностями, позволяющими использовать ее для решения самых разнообразных задач — от сложнейших профессиональных расчетов до самых мелких бытовых.
Обычно ПЭВМ так и классифицируются: профессиональные и бытовые. Профессиональные ПЭВМ используются профессионалами-конструкторами, технологами, инженерами, научными работниками, журналистами, редакторами и т. п. Они оказываются полезными при индивидуальной обработке технической, экономической, медицинской и другой информации, в преподавательской деятельности; позволяют обеспечить оперативный доступ к отраслевым, региональным информационным источникам через локальные сети ЭВМ. Бытовые ПЭВМ могут быть использованы в качестве домашнего информационного центра. С их помощью можно проводить развлекательные и познавательные игры, организовывать учебные курсы (например, по изучению иностранных языков или курсов по школьной программе), обеспечивать доступ к справочной информации: адресам, телефонам, рецептам и т. п. Микро-ЭВМ, выпускаемые промышленностью, являются слишком сложными, чтобы брать их за образец при попытке самостоятельного построения. Возникает вопрос, можно ли вообще самому построить хоть какой-нибудь простейший вариант вычислительной машины?
И ОБРАБОТКА ДАННЫХ
Системы сбора и обработки данных, как правило, являются частью иерархических систем управления или коммуникации и предназначены для приема данных, представленных в виде аналоговых или цифровых сигналов различных уровней и форматов, преобразования их в стандартную цифровую форму, обработки в соответствии с заданным алгоритмом и выдачи обработанных данных на индикационные устройства или в старшую иерархическую ступень системы.
В качестве примера системы сбора и обработки данных рассмотрим конструирование на базе ПМ-ЭВМ счетчика случайных событий. Введем в ПМ-ЭВМ программу
014 000 006 MVI В, OOO.Q
014001 000
014002016 MVIC, OOOQ
014 003 000
014 004 026 MVI D, OOOQ
014 005 000
014006315 Ml: CALL SKL
014 007 177
014 010000
014 Oil 170 MOV А, В
014012074 INR A
014 013 047 DAA
014014323 OUT, OOOQ
014 015 000
014 016 107 MOV В, А
014017171 MOV А, С
014020316 ACI, 0000
014021 000
014 022 047 DAA
014023323 OUT. 0010
014024 001
014025 117 MOVC, A
014026 172 MOV A, D
014027316 ACI, OOOQ
014030000
014031 047 DAA
014032323 OUT, 002Q
014 033 002
014034127 MOVD. A
014035303 JMP, Ml
014 036 006
014037014
После ввода программы нажмем кнопки СБРОС и П. В портах 002, 001, 000 индицируются соответственно 006Q - код первой команды программы и 014Q OOOQ — ее адрес в памяти. Теперь будем нажимать любую кнопку клавиатуры (кроме кнопки СБРОС) - в портах 002, 001, 000 индицируется количество нажатий кнопки, выраженное в двоично-десятичном коде, начиная с 000 001D и кончая 999 999D. Для обнуления счетчика достаточно нажать кнопки СБРОС и П. Таким образом, чисто программным путем нами реализована простейшая система сбора и обработки информации, регистрирующая нажатия кнопок, подсчитывающая эти нажатия и выдающая на индикацию в двоично-десятичной форме число, равное количеству нажатий.
ИНСТРУКЦИЯ ПО РАБОТЕ НА МИКРО-ЭВМ
1. После включения микро-ЭВМ на индикаторах портов 002Q и 001Q высветится адрес младшей ячейки ОЗУ 00001100В и 00000000 В соответственно, а на индикаторах порта OOOQ высветится содержимое этой ячейки.
2. Для того чтобы посмотреть содержимое произвольной ячейки ОЗУ, необходимо:
а) набрать с помощью кнопок 0 — 7 на индикаторах порта OOOQ старший байт адреса этой ячейки и нажатием на кнопку СБ переслать его на индикаторы порта 002Q;
б) набрать с помощью кнопок 0 — 1 на индикаторах порта OOOQ младший байт адреса этой ячейки и нажатием на кнопку МБ переслать его на индикаторы порта 001Q. После этого на индикаторах порта OOOQ высветится содержимое необходимой ячейки.
3. Для того чтобы записать в произвольную ячейку необходимый код команды или данные, нужно:
а) выполнить п. 2 Инструкции;
б) набрать с помощью кнопок 0 — 7 необходимый код на индикаторах порта OOOQ. Этот код также попадет в регистр С;
в) нажать кнопку И, что вызовет запись кода в ячейку памяти и одновременно индикацию адреса и содержимого следующей ячейки.
4. Для того чтобы запустить программу, нужно:
а) записать ее в память (см. пп. 1, 2, 3 Инструкции) ;
б) набрать с помощью кнопок 0 — 7 старший байт адреса команды, с которой должно начаться выполнение программы на индикаторах порта OOOQ, и нажатием на кнопку СБ переслать его на индикаторы порта 002Q;
в) набрать с помощью кнопок 0 — 7 младший байт адреса команды, с которой должно начаться выполнение программы на индикаторах порта OOOQ, и нажатием на кнопку МБ переслать его на индикаторы порта 001Q;
г) запустить программу нажатием на кнопку 77.
5. Для того чтобы прервать выполнение программы, необходимо нажать на кнопку СБРОС.
ЭТАПЫ СБОРКИ И ПРОВЕРКИ УЗЛОВ
Читатель ознакомился с принципами работы микропроцессорной системы на базе МП типа КР580ИК80А, системой команд микропроцессора и схемой ПМ-ЭВМ, построенной на базе данного микропроцессора. Теперь ему предстоит собрать микро-ЭВМ и, используя простейшие средства отладки, довести ее до рабочего состояния.
Для сборки необходима плата, на которой будут располагаться микросхемы и другие элементы ПМ-ЭВМ. Плата изготовляется из стеклотекстолита или гетинакса толщиной 1,5 — 2,0 мм размером примерно 210x240 мм. В зависимости от имеющихся возможностей монтаж платы может быть выполнен по-разному.
Если плата не из фольгированного материала, то предварительно делается разметка на миллиметровке размещения деталей, затем миллиметровка наклеивается на плату и сверлятся отверстия под все выводы деталей. При небольших размерах платы микросхемы можно расположить перпендикулярно длинной стороне платы в два ряда, сделав пропилы тонкой ножовкой для выводов. В этом случае отпадает необходимость сверлить отверстия под каждый вывод. После отмывания миллиметровки детали устанавливаются на плате с одной стороны так, что их выводы попадают в просверленные отверстия и слегка отгибаются, препятствуя выпадению деталей. Микросхемы, пока они не подпаяны, требуют осторожного обращения ввиду опасности повреждения разрядом статического электричества. Берите их не за выводы, а за корпус!
Выводы деталей в соответствии с принципиальной схемой соединяются проводами путем пайки припоем ПОС-60 с жидким канифольным флюсом маломощным низковольтным паяльником, корпус которого подсоединен к заземлению через резистор сопротивлением несколько сотен килоом. Для монтажа можно использовать, например, провод МГТФ-0,05, зачищенный с концов на 5 мм с помощью кусачек, в которых сделаны специальные выемки глубиной около 0,5 мм.
Если для монтажа используется макетная плата с металлизированными отверстиями для выводов деталей и контактными площадками для подпайки соединительных проводов, то после размещения микросхем и других деталей на плате они подпаиваются с обратной стороны к плате, а затем соединяются проводами аналогично предыдущему.
От качества пайки существенным образом зависит надежность работы будущей ПМ-ЭВМ. Использование специально разработанной печатной платы облегчает последующие монтаж, отладку и повышает надежность работы устройства. Для ПМ-ЭВМ может быть использована как односторонняя, так и двухсторонняя плата. Если плата односторонняя, придется часть монтажа выполнить навесными проводниками. В двухсторонней плате, если сквозные отверстия, предназначенные для соединения печатных проводников с разных сторон платы, не металлизированы, в них необходимо вставить кусочки провода и пропаять с обеих сторон. Если нужно произвести изменения в плате с печатным монтажом, лишние соединения ликвидируются, для чего дважды разрезается печатный проводник острым ножом на расстоянии 1-2 мм и середина удаляется. Новые соединения можно сделать навесными проводниками. Монтаж каждого из блоков: микропроцессорного, памяти и устройств ввода/вывода - можно выполнить на отдельных платах, что в какой-то мере облегчает отладку. В конструкции, выполненной авторами, ПМ-ЭВМ размещена на плате с двухсторонним печатным монтажом. На торцевой стороне платы имеются два разъема. Через один разъем подключаются клавиатура и источники питания, а через другой выведены внутренние шины МП системы, что позволяет подключать различные расширяющие блоки.
Отладку ПМ-ЭВМ можно производить поэтапно по мере сборки В первую очередь необходимо собрать блок процессора (микросхемы D1-D7, D9, D10, D27, D28, D30, D31), причем для микросхемы D1 (микропроцессор) крайне желательно поставить панельку. Проверьте правильность монтажа, выньте микропроцессор из панельки и подайте питание. Проверьте тестером наличие питающих напряжений на выводах микросхем. При наличии осциллографа проверьте работу тактового генератора - на выводах 10 к 11 микросхемы D2 должны наблюдаться тактовые импульсы Ф2 и Ф1. Выключите питание и вставьте микропроцессор в панельку, подключите резисторы по 300 510 Ом между общим проводом и линиями шины данных DB7 — DBO.
Тем самым имитируется считывание команды NOP (код OOOQ). Поставьте переключатель К18 в положение АВТОМАТ, подайте питание и проверьте с помощью осцилло-графа наличие импульсов на линиях шины адреса АВ11 — АВО и АВ15-АВ12. Длительность импульсов (длительность уровня логического нуля или логической единицы) на линии АВО должна составить четыре тактовых интервала (машинный цикл команды NOP), т. е. 4 мкс. Длительность импульсов на следующих линиях шины адреса последовательно удваивается. Если на какой-либо линии нет импульсов, проверьте последовательнс прохождение сигнала от вывода МП до соответствующей линии. Если сигнала нет и на выводе МП, то можно предположить либо замыкание данной сигнальной линии на какой-либо постоянный уровень, либо неисправность МП по данному выводу. Если импульсов нет ни на одной из линий шины адреса и на соответствующих выводах МП, то, скорее всего, неисправен МП. Но к тогда прежде чем забраковать МП, сначала проверьте напряжения и сигналы на всех его выводах. Желательно проверить МП. вставив его в панельку заведомо исправной МП-системы. Если сигнал исчезает по пути от МП к адресной шине, нетрудно локализовать неисправность, которая может быть вызвана следующими причинами: ошибками в логической схеме, ошибками в монтаже, случайными замыканиями или обрывами проводящих линий, неисправностью соответствующих микросхем. Прежде чем выпаивать неисправнук микросхему, убедитесь еще раз, что других причин неисправности нет, так как замена микросхемы, особенно в печатной плате, — процесс весьмг трудоемкий. Если микросхема заведомо неисправна, проще всего ее извлечь, перекусив кусачками ножки. Затем уже можно извлечь по отдельности остатки каждой ножки с помощью пинцета и паяльника и прочистить отверстия с помощью заостренной спички или высверлить тонким сверлом. Извлечь микросхему без повреждения значительно сложнее. Для этого необходимо иметь либо паяльник с многими жалами или широким жалом, либо паяльник с отсосом.
После проверки шины адреса проверьте с помощью осциллографа выдачу сигнала R (чтение) на выводе 11 микросхемы D27 и сигнала RW (обращение к памяти) на выводе 3 микросхемы D28. Если сигналов нет, проверьте наличие сигналов DBIN на выводах 10 к 13 микросхемы D27, MR на выводе 12 микросхемы D27, STSTB на ножках 4 и 13 микросхемы D29 и соответствующего машинному циклу чтения команды управляющего слова (его код 242Q) на шине данных DBO-DB7, т. е. на выводах 3, 6, 10, 13 микросхемы D9 и 2, 3, 6, 7 микросхемы D29 соответственно. Если какого-либо сигнала нет, проверьте по цепочке логических схем последовательно, придя к выводам шины данных, DBIN и SYNC микропроцессора на выводах 10, 9, 8, 7, 3, 4, 5, 6, 17, 19 соответственно. Проверьте функционирование кнопки СБРОС. При ее нажатии МП не выдает никаких сигналов, при отпускании вновь появляются описанные выше сигналы.
Поставьте переключатель К18 в положение ШАГ, нажмите и отпустите кнопку СБРОС. Проверьте тестером или логическим пробником состояние шины адреса, на которой должен быть адрес 000Q 000Q, наличие сигналов R, DBIN и RW, а также наличие кода 000Q на шине данных МП. Нажимайте кнопку К17. При каждом нажатии кнопки на шине адреса должен появляться адрес, на единицу больший предыдущего, а состояние остальных контролируемых линий не должно изменяться. Если этого не происходит, проверьте исправность схемы шагового режима (микросхемы D3I.3, D31.4, D30).
После проверки микропроцессорного блока снимите питающие напряжения, отключите резисторы, временно подпаянные к шине данных, и соберите блок памяти, состоящий из микросхем D8, D11-D15, пока не подпаивая микросхемы ОЗУ (D12, D13). Подключите питание, поставьте переключатель К18 в положение ШАГ, нажмите и отпустите кнопку СБРОС. Начинается исполнение программы монитора в шаговом режиме по машинным циклам. Проследите с помощью тестера, проверяя коды на шине данных, исполнение команд монитора, начиная с команды JMP по адресу 000Q 000Q и кончая командой IN по адресу 000Q 203Q.
Если команды исполняются в соответствии с программой и в соответствующих местах программы вырабаты ваются сигналы R, W. IN и OUT, то можно приступить к следующему этапу изготовления и отладки ПМ-ЭВМ; если же нет, тс необходимо проверять: цепь прохождения кода считываемой команды до выводов шины данных МП, правильность дешифрации адреса по сигналам выборки памяти на выводах 8 микросхем D12, D13 и выводах 14 микросхем D14, D15, правильность выдачи управляющего слова по сочетанию на выходах микросхемы D29, наличие сигнала WR на выходе МП при исполнении машинных циклов записи в память и вывода.
Проверив работу микропроцессорного блока совместно с ПЗУ в шаговом режиме, отключите питание и соберите остальную часть схемы ПМ-ЭВМ, впаяв в том числе и микросхемы ОЗУ. Подайте питание, поставьте переключатель К18 в положение АВТОМАТ, нажмите и отпустите кнопку СБРОС. Если схема собрана правильно и все вновь включенные элементы исправны, то на индикаторах портов 001 и 000 высветится адрес начальной ячейки оперативной памяти 014Q OOOQ, а индикаторы порта 002 высветят содержимое этой ячейки. Проверьте работу клавиатуры, ее цифровой и функциональной частей. Если работа соответствует описанию, приведенному в гл. 7, то дальнейшие проверки будут чисто программными, например проверка ОЗУ. Если клавиатура функционирует неправильно, в целях проверки содержимого ПЗУ выясните, не работает ли клавиша просмотра памяти И. Переведите ПМ-ЭВМ в шаговый режим, нажмите и отпустите кнопку СБРОС и при последовательном исполнении команд монитора проследите прохождение всех сигналов. На каждом шаге порт 002 будет отображать информацию на шине данных, в то время как порты 001 и 000 будут отображать информацию, выдаваемую по командам OUT в соответствующие порты. В шаговом режиме затруднительно проверить правильность функционирования программы-монитора в той части, где анализируются коды нажатых клавиш, так как имеющееся в ней обращение к подпрограмме временной задержки занимает сотни машинных циклов и мало у кого хватит терпения дойти до конца.Если неисправность не удалось обнаружить и устранить, то необходимо собрать несложное устройство — статический аппаратный эмулятор, описываемый в § 8.2. Можно и начать с его сборки, прежде чем приступать к сборке и отладке ПМ-ЭВМ, и тем сберечь немало времени. В заключение еще раз напомним, что в процессе отладки микросхемы следует вставлять и вынимать только при выключенном питании и после каждой переделки, включив питание, следует прежде всего проверить, подается ли оно на все микросхемы.
КАК МИКРОПРОЦЕССОР ВЫПОЛНЯЕТ КОМАНДУ?
В ПМ-ЭВМ используется микропроцессор КР580ИК80А, структурная схема которого приведена на рис. 4.4. Микропроцессор содержит 16-разрядную шину адреса и 8-разрядную шину данных, способную к передаче сообщений в двух возможных направлениях. Единовременно передаваемая порция информации соответствует одному байту (8 двоичных разрядов). В самом общем случае возможны следующие передачи сообщений: 1) пересылка байта данных от устройства ввода; 2) пересылка байта данных к устройству вывода; 3) считывание байта данных из памяти или запись в память; 4) генерирование в шину данных специального байта, называемого управляющим словом и предназначенного для установления правильного схемного соединения.
Работа МП (или центрального процессорного элемента ЦПЭ) по реализации каждой команды программы пользователя основана на принципе микропрограммного управления. Это означает, что каждая команда реализуется как некоторая последовательность микрокоманд или микроопераций, приводящая к требуемому результату. Считываемая из памяти микропроцессором команда, вернее, ее 8-разрядный двоичный код (код операции), поступает в регистр команд, где и хранится в течение времени выполнения команды. По результату дешифрирования кода команды происходит формирование последовательности микрокоманд (микропрограммы), процесс выполнения которой и определяет все последующие операции, необходимые для выполнения считанной команды.
Таким образом, выполнение каждой считанной ЦПЭ команды программы пользователя осуществляется в строго определенной последовательности, задаваемой кодом команды. При этом выполнение отдельных микроопераций синхронизируется во времени сигналами Ф1 и Ф2 тактового генератора. Одним из важнейших понятий всего процесса выполнения команд программы является понятие машинного цикла.
В микропроцессоре КР580ИК80А процесс выполнения каждой команды можно разбить на ряд основных операций. Время, отведенное на выполнение операции обращения к памяти или к устройству вывода, составляет машинный цикл.
Таким образом, процесс выполнения команды состоит из стольких машинных циклов, сколько обращений к памяти или к устройствам ввода/вывода требуется для ее исполнения. Машинный цикл в свою очередь состоит из нескольких машинных тактов.
Каждая команда в зависимости от ее вида может занимать от одного до пяти машинных циклов. Микропроцессор КР580ИК80А имеет 10 типов машинных циклов, перечисленных в табл. 6.2, а каждый машинный цикл может состоять из 3 — 5 машинных тактов. Под машинным тактом подразумевается интервал времени, соответствующий одному периоду тактовых импульсов, подаваемых от синхрогенератора.
Рис. 4.5. Временная диаграмма для команды, требующей четыре машинных цикла
Для организации машинных циклов требуется формирование строго синхронизированной во времени последовательности управляющих сигналов, обеспечивающих правильные пути прохождения данных в строго определенные моменты времени, и выполнение требуемых микроопераций. Как уже отмечалось, исходными данными для этого являются результаты дешифрирования операционного кода команды. Выполнение команды всегда начинается с цикла обращения к памяти, в результате которого производится считывание кода, интерпретируемого МП как код операции. Будем обозначать машинные циклы одной команды символами Cl, C2 и т. д., а машинные такты одного цикла — символами Tl, T2 и т. д. Таким образом, машинный цикл С1 — это всегда цикл выборки команды. Его длительность обычно — четыре или пять тактов. Последующие циклы С2 — С5 состоят обычно из трех тактов. Для простых операций, таких как арифметические, команды занимают четыре или пять тактов. Команды более сложных операций требуют для выполнения до 18 машинных тактов.
В качестве примера рассмотрим команду LDA (ЗАГРУЗИТЬ данные в аккумулятор), требующую для реализации четыре машинных цикла. На рис. 4.5 приведена временная диаграмма команды LDA. Эта команда переписывает в аккумулятор данные, содержащиеся в определенной ячейке памяти.
Первый машинный цикл C1, как и следовало ожидать, отведен под выборку команды из памяти. При этом код операции помещается, как уже говорилось, в регистр команд. Выполнение последовательности микрокоманд приводит к следующим действиям. В первом такте Tt содержимое счетчика команд выдается через буфер шины адреса в шину адреса. Второй такт выделен для представления времени для ответа памяти. В третьем такте появившиеся данные в шине данных пересылаются в регистр команд. В четвертом такте выборка команды завершена, операционный код команды передается дешифратору команд для формирования последовательности микроопераций. При этом получает приращение содержимое счетчика команд.
Второй машинный цикл соответствует чтению из памяти восьми младших разрядов адреса, которые в результате выполнения этого цикла должны быть помещены в регистр Z. В первом такте этого цикла содержимое счетчика команд передается через буфер шины адреса в адресную шину. Во втором такте микропроцессор ожидает ответ из памяти. В третьем такте содержимое шины данных передается в регистр Z и счетчик команд опять получает приращение.
Третий машинный цикл аналогичен второму, за исключением того, что из памяти выбираются и пересылаются в регистр W восемь старших разрядов адреса. Последовательность микроопераций та же.
В четвертом машинном цикле происходит окончательное выполнение команды: аккумулятор загружается данными из памяти по адресу, записанному в регистрах W и Z.
В первом такте четвертого машинного цикла содержимое регистров W и Z передается через буфер в шину адреса. Во втором такте предоставляется время для ответа памяти. Наконец, в третьем такте содержимое шины данных пересылается через буфер в аккумулятор. Выполнение команды полностью завершено за 13 машинных тактов.
Перейдем теперь к рассмотрению системы команд микропроцессора КР580ИК80А и особенностей их работы.
КАКУЮ МИКРО-ЭВМ МЫ БУДЕМ НАЗЫВАТЬ "ПРОСТЕЙШЕЙ"?
Даже простое перечисление основных узлов микро-ЭВМ говорит о том, что современный дискретный универсальный вычислитель — это довольно сложное устройство. Ниже опишем простейший вариант такого вычислителя, который будем именовать простейшей микро-ЭВМ и возможность построения которого конструктором-любителем из доступных деталей, выпускаемых промышленностью, была оговорена ранее.
Под простейшей микро-ЭВМ (далее ПМ-ЭВМ) будем подразумевать микро-ЭВМ на одной или нескольких платах, построенную на базе микропроцессора КР580ИК80А (КР580ВМ80А), с минимальным (определяемым ниже) объемом ОЗУ и ПЗУ и с простейшими устройствами ввода/вывода в виде клавиатуры (К), включающей 16 клавиш и 24 светоизлучающих диода (светодиода СД). На рис. 2.4 ПМ-ЭВМ обведена красной штриховой линией. На этом же рисунке указаны некоторые возможности функционального расширения ПМ-ЭВМ.
Микро-ЭВМ может быть оснащена алфавитно-цифровой клавиатурой (АЦК), семисегментными светоизлучающими индикаторами (ССИ), специальным цветным дисплеем (ЦД) или дисплеем на базе бытового телевизора (БТ), внешними запоминающими устройствами — кассетным магнитофоном (кассетным-накопителем на магнитной ленте КНМЛ или накопителем на гибких магнитных дисках НГМД), печатающим устройством — принтером (ПР) и некоторыми другими устройствами. Подключение перечисленных дополнительных внешних устройств потребует разработки специальных согласующих схем, не показанных на схеме ПМ-ЭВМ (см. гл. 10).
Описываемая простейшая микро-ЭВМ может быть использована для приобретений навыков программирования на языке Ассемблер в мнемонических кодах. Она может также оказаться полезной при отладке небольших программ, для макетирования простейших управляющих устройств и, как уже отмечалось, для несложных расчетов в качестве программируемого калькулятора. Такая несложная машина может найти применение в школе, профессиональном техническом училище, на факультетах переквалификации специалистов с высшим образованием.
Однако следует заметить, что изготовление этой простейшей вычислительной машины все же потребует известного напряжения ума и сил. Поэтому, если читателю необходимо лишь средство для выполнения простейших расчетов, овчинка выделки не стоит. В таком случае лучше закрыть эту книгу и приобрести один из калькуляторов, имеющихся в продаже. Если же вы хотите приобщиться к увлекательному миру микроэлектроники и построить себе электронного помощника, функции которого можно будет в дальнейшем расширять путем постепенного совершенствования вашей конструкции, приступайте к чтению следующей главы.
КАЛЬКУЛЯТОР
Первая идея, которая приходит в голову читателю, получившему в руки ПМ-ЭВМ, т. е. вычислительную машину, — использовать ее для вычислений. Лишь потом, приобретая некоторый опыт, он поймет, что вычисления — весьма малый клочок обширного поля возможных применений микро-ЭВМ.
Система команд микропроцессора КР580ИК80А, использованного в ПМ-ЭВМ, позволяет непосредственно выполнять логические операции и операции сложения и вычитания над двоичными и двоично-кодированными десятичными числами, имеющими формат один или два байта. Тем не менее, используя тот факт, что микро-ЭВМ — программируемое устройство, имеющее память, можно реализовать практически неограниченное множество различных операций (арифметических, логических, функциональных и т. д.) над исходными данными, представленными в произвольно заданном формате. Эти операции обычно оформлены в виде стандартных программ и составляют основу ядра программно-математического обеспечения микро-ЭВМ. Запрограммировав самостоятельно ряд вычислительных задач большей или меньшей сложности, читатель вскоре вынужден будет обратиться к уже имеющимся библиотекам стандартных программ и пакетам прикладных программ, поскольку он убедится, какой колоссальный объем интеллектуального коллективного труда уже вложен в них и что никто в одиночку не в состоянии пройти заново весь этот путь и разработать полностью математическое обеспечение ЭВМ.
Для начала введем в память ПМ-ЭВМ программу:
014000076 MVIA, 002Q
014001 002
014 002 306 ADI, 003Q
014003 003
014 004 323 OUT, OOOQ
014005 000
014 006 166 HLT
Программа выполняет сложение двоичного числа (в данном случае 002Q), помещенного в ячейку ОЗУ по адресу 014Qt)01Q, с числом (в данном случае 003Q), помещенным в ячейку ОЗУ по адресу 014Q 003Q, и выводит результат (в данном случае 005Q) в порт 000.
Для того чтобы эти действия были исполнены, достаточно после ввода программы нажать кнопку СБРОС, а затем кнопку П — на индикаторах порта 000 высветится двоичное число 00000101, эквивалентом которого является восьмеричное число 005 Q. Чтобы сложить другие числа в диапазоне от OOOQ до 377Q, их надо поместить по указанным выше адресам, не меняя остальной части программы, и снова нажать кнопки СБРОС и П. Для вычитания числа, помещенного по адресу 014Q 003Q, из числа, помещенного по адресу 014Q 001Q, достаточно поменять команду ADI (код операции 306Q) на команду SUI (код операции 326Q). Чтобы производить операции над десятичными числами, их надо представить в двоично-кодированном виде, так чтобы каждый байт изображал двухразрядное десятичное число от 0 до 99:
десятичное двоично-кодированное восьмеричное десятичное
00 0000 0000 000
01 0000 0001 001
02 0000 0010 002
97 10010111 227
98 1001 1000 230
99 1001 1001 231
В приведенной выше программе для сложения, например, чисел 25 и 47 после команды сложения необходимо поставить команду десятичной коррекции результата сложения DAA:
014000076 MVIA.25D
014001 045
014002306 ADI.47D
014 003 107
014 004 047 DAA
014005323 OUT, OOOQ
014 006 OOU
014 007 166 HLT
В результате порт 000 после исполнения программы индицирует число 0111 0010В = 162Q=72D.
Для того чтобы проследить исполнение операции десятичной коррекции, введем в ПМ-ЭВМ следующую программу:
014000257 XRA, A
014001 306 Ml: ADI,001Q
014 002 001
014 003 047 DAA
014 004 006 MVI B, 040Q
014005 040
014006315 M2: CALL DL
014007 277
014 010 000
014011005 OCR В
014012302 JNZ, M2
014013 006
014 014 014
014015323 OUT, 002Q
014016 002
014017303 JMP, Ml
014020 001
014021 014
Программа производит примерно каждые 0,5 с суммирование содержимого аккумулятора с единицей (инкремент), выполняет операцию десятичной коррекции и выводит результат в порт 002. Операция десятичной коррекции дает правильный результат только после операции сложения. Поэтому для выполнения вычитания одного двоично-кодированного десятичного числа из другого необходимо либо заменить вьиитание прибавлением к уменьшаемому вычитаемого, представленного в дополнительном коде, а затем уже производить десятичную коррекцию результата, либо применить эквивалентные этому искусственные приемы. Для примера введем в ПМ-ЭВМ программу вычитания содержимого ячейки 014Q 005Q (здесь 28) из содержимого ячейки 014Q 007Q (здесь 75) :
014000076 MVIA, 99D
014001 231
014002306 ADI, 01D
014 003 001
014004336 SBI, 28D
014005 050
014 006 306 ADI, 75D
014 007 165
014 010 047 DAA
014011323 OUT, OOOQ 014 012000
014013166 HLT
В данной программе вычитание числа 28D из числа 99D + ID эквивалентно формированию в аккумуляторе вычитаемого в дополнительном коде. Поэтому прибавление уменьшаемого (здесь 75 D) с последующей десятичной коррекцией дает правильный результат (47 D), индицируемый портом 000.
Использование команд сложения и вычитания с переносом (заемом) позволяет организовать сложение и вычитание целых чисел неограниченной разрядности. Введем, например, в ПМ-ЭВМ программу
014 000 021 LXID, ALPHA
014 001 000
014002015
014003041 LXIH, BETA
014 004 000
014 005 016
014 006 016 MVI С, 8Н
014007 010
014010257 XRAA
014011032 Ml: LDAX D
014012216 ADCM
014 013 000 NOP
014014022 STAXD
014015043 INXH
014016023 INXD
014017015 OCR С
014020302 JNZ, Ml
014021 Oil
014 022014
014 023 166 HLT
С помощью этой программы двоичное 64-разрядное число, содержащееся в последовательных ячейках ЗУ, начиная (младшие разряды) с ячейки с символическим адресом ALPHA (здесь 015Q OOOQ), складывается с 64-разрядным числом, содержащимся в последовательных ячейках ЗУ, начиная с ячейки с символическим адресом BETA (здесь 016Q OOOQ), и результат помещается в ячейки ЗУ, начиная с ячейки с адресом ALPHA. Заменив команду NOP по адресу 014Q 013Q командой десятичной коррекции, получим программу сложения двух 16-разрядных десятичных чисел, находящихся в ячейках памяти, начиная с ячеек соответственно ALPHA и BETA.
Для вычитания десятичных 16-разрядных чисел, когда уменьшаемое располагается в ЗУ, начиная с ячейки ALPHA, а вычитаемое - начиная с ячейки BETA, получим такую программу:
014 000 021 LXI D, ALPHA
010 001 000
000 102 015
000 003 041 LXIH, BETA
000 004 000
014005 016
014 006 016 MVIC, 8H
014 007 010
014 010 067 STC
014011076 Ml: MVI A, 99D
014 012231
014013316 АС1,0
014014 000
014015226 SUBM
014 016 353 XCHG
014017206 ADDM
014 020 047 DAA
014021167 MOVM,A
014 022 353 XCHG
014 023 023 INX D
014024043 INXH
014025015 DCRC
014026302 JNZ, Ml
014027011
014030014
014031166 HLT
Результат вычитания помещается в ячейки ЗУ, начиная с ALPHA. В процессе работы с помещенными выше программами мы смогли убедиться в больших неудобствах ввода десятичной информации с помощью восьмеричной клавиатуры, поскольку каждую пару десятичных цифр нужно предварительно перевести в восьмеричный код. Можно написать специальную программу ввода десятичных цифр, использовав тот факт, что при нажатии определенных клавиш вырабатываются не только коды чисел от 0 до 7, но и коды чисел от 8 до 15. Действительно, введя в ПМ-ЭВМ следующую программу:
014 000 315 Ml: CALL, SKL
014001 177
014 002 000
014 003 323 OUT, OOOQ
014 004 000
014005303 JMP, Ml
014 006 000
014007 014
нажимая разные кнопки и наблюдая индикацию порта 000, убедимся, что при обращении к клавиатуре с помощью команды CALL SKL в аккумулятор помещаются коды в соответствии с табл. 7.7. В частности, кнопке С Б соответствует код 0000 1000, т. е. код числа 08 D, а кнопке МБ — код 0000 1001, т. е. код числа 09D. Следовательно, незначительно изменив текст программы-монитора в части анализа введенного числа, можно вводить и размещать в памяти ПМ-ЭВМ информацию непосредственно в десятичном виде. Предоставим читателю возможность самому составить такую программу и разместить ее в ОЗУ или в дополнительных микросхемах ПЗУ.
Знакомясь с литературой и технической документацией, читатель вскоре обнаружит, что большая часть стандартных программ оперирует не с десятичными числами, а с двоичными. Переход от десятичной системы к двоичной и обратно осуществляется с помощью специальных программ при вводе и соответственно при выводе информации из ЭВМ.
Рассмотрим следующую программу, переводящую пятиразрядное целое десятичное число в диапазоне от 00000 до 65535, вводимое с клавиатуры ПМ-ЭВМ (для цифры 8 используется кнопка СБ, а для цифры 9 — кнопка МБ), в 16-разрядное двоичное число, содержащееся в регистровой паре Н:
014000041 LXI H, OOOQ OOOQ
014001 000
014 002 000
014003016 MVIC, 0050
014 004 005
014005315 Ml: CALL SKL
014006 177
014 007 000
014010376 CPI, 012Q
014 Oil 012
014012322 JNC, Ml
014013 005
014014 014
014015345 PUSHH
014016321 POPD
014 017051 DADH
014 020051 DADH
014 021031 DADD
014 022051 DADH
014 023 137 MOVE, A
014 024 026 MVI D, OOOQ
014 025 000
014 026031 DADD
014 027015 OCR С
014 030302 JNZ,M1
014 031 005
014 032014
014 033 174 MOV A, H
014 034323 OUT, 001Q
014 035 001
014036175 MOV A, L
014037323 OUT, OOOQ
014 040000
014041 166 HLT
Программа обращается к ПП опроса клавиатуры SKL и при нажатии любой кнопки анализирует введенный код. Если код соответствует цифрам от 0 до 9, содержащееся в регистровой паре Н число (команды с адреса 014Q 017Q по 014Q 022Q) умножается на 10 и к нему прибавляется вновь введенное число. Программа с помощью счетчика, организованного на регистре С, отсчитывает пять таких циклов, поэтому вводимое число обязательно должно быть пятиразрядным (например, 00512). Команды с адреса 014Q 033Q используются в демонстрационных целях для вывода преобразованного в двоичный код числа в порты 001 и 000. Если программа должна использоваться в качестве ПП, то по адресу 014Q 033Q должна быть записана команда RET.
Введите программу в ПМ-ЭВМ, нажмите кнопки СБРОС и П, затем введите десятичное число 10 000, последовательно нажимая кнопки 1, О, О, О, О. В портах 001 и 000 высветится число 0010 0111 0001 0000, являющееся двоичным эквивалентом десятичного числа 10 000. Проверьте правильность работы программы, вводя другие десятичные числа, например 00512, 01024, 02048, 04096, 08192, 16384, 32768, 65535: Какие двоичные числа должны индицироваться портами 001 и 000?
Рассмотрим теперь программу преобразования целого двоичного 16-разрядного числа, содержащегося в регистровой паре D, в двоично-кодированное десятичное число, каждый разряд которого помещается, начиная с младшего, в последовательные ячейки ОЗУ, начиная с ячейки, символический адрес которой ED (машинный адрес 015Q OOOQ):
014000041 LXI H, ED
014001 000
014002 015
014003016 MVIC,005Q
014 004 005
014005066 Ml: MVI M, OOOQ
014 006 000
014007043 INXH
014010015 OCR С
014011302 JNZ,M1
014012005
014013 014
014014053 DCXH
014015001 LXI В. 33003600
014 016 360
014017 330
014020315 CALLCF
014 021 060
014022014
014023001 LXI В, 374Q030Q
014024030
014025 374
014026315 CALLCF
014027 060
014 030014
014031001 LXI В, 377Q234Q
014 032 234
014 033 377
014034315 CALLCF
014 035 060
014036 014
014037001 LXI B, 377Q366Q
014040366
014 041 377
014042315 CALLCF
014 043 060
014 044 014
014 045 163 MOVM, E
014 046 166 HLT
014 047 021 LXI D (число)
014050377
014051 377
014052166 HLT
014060345 CF: PUSH H
014 061 353 XCHG
014062011 DAD В
014063322 JNC, M2
014 064 074
014065 014
014 066 353 XCHG
014067341 POPH
014 070 064 INK M
014071303 JMP, CF
014072060
014073 014
014 074 171 M2: MOV А С
014 075 057 CMA
014 076 137 MOVE, A
014077170 MOV А, В
014100057 CMA
014 101 127 MOVD, A
014 102023 INXD
014103031 DADD
014104353 XCHG
014105341 POPH
014 106 053 OCX H
014107311 RET
Программа построена на принципе последовательного исчерпывания: каждый десятичный разряд, начиная с десятков тысяч, определяется путем подсчета количества суммирований с преобразуемым числом двоичного числа, соответствующего дополнению до 10 000, затем до 1000, затем до 100, затем до 10, каждый раз до появления переноса. Вычисленные значения засылаются в ячейки соответственно ED + 4, ED + 3, ED + 2, ED + 1. В остатке остаются единицы, засылаемые в ячейку памяти ED.
Если программа должна использоваться в качестве ПП, то по адресу 014Q 046Q должна быть записана команда RET. В данном примере для загрузки регистровой пары D использована небольшая программа, начинающаяся с адреса 014Q 047Q.
Введите программу в ПМ-ЭВМ, нажмите кнопку СБРОС, наберите число 047 и нажмите кнопки МБ и П. Регистровая пара D загружена максимальным двоичным числом (во всех разрядах единицы). Теперь нажмите кнопки СБРОС и П, затем нажмите кнопку СБРОС, наберите число 015 и нажмите кнопку СБ. Порт 002 будет индицировать число 0000 0101, т. е. двоично-десятичный код числа 05. Нажмите кнопку И - порт 002 будет индицировать 0000 ООН, т. е. 03. Последовательным нажатием кнопки И получим соответственно 05, 05, 06. Это означает, что в ячейках ОЗУ хранится число 65 535, являющееся десятичным эквивалентом максимального 16-разрядного двоичного числа. Загружайте в ячейки 014Q 050Q и 014Q 051Q различные числа. Повторяя описанную выше процедуру, можно убедиться, что преобразование осуществляется правильно.
Чтобы реализовать на ПМ-ЭВМ программируемый калькулятор, выполняющий четыре арифметические действия, приведенные выше программы необходимо дополнить программами умножения и деления (более сложные программы, в том числе программы вычисления элементарных функций, можно найти в справочной литературе, здесь они не приводятся за недостатком места).
9.2. ПРОГРАММИРУЕМОЕ УПРАВЛЯЮЩЕЕ УСТРОЙСТВО
Устройства цифровой автоматики являются областью наиболее массового применения микропроцессоров. В качестве примера конструирования управляю-
щего устройства на базе ПМ-ЭВМ рассмотрим кодовый замок, предназначенный для использования в жилом помещении или в других целях. Поставим задачу так, чтобы использовать минимум добавочного оборудования. Введем в ПМ-ЭВМ такую программу:
014 000 006 MVI В, 006Q
014 001 006
014 002 041 LXI Н, (адр. кода)
014 003 040
014 004 014
014005315 Ml: CALL SKL
014006 177
014 007 000
014010276 СМРМ
014011 302 JNZ ,M3
014012026
014013 014
014014043 INXH
014015005 DCRB
014016302 JNZ, Ml
014017005
014020014
014021076 M2: MVI A, 001Q
014 022 001
014 023 323 OUT, OOOQ
014 024 000
014025166 HLT
014026074 M3: INRA
014027323 OUT, 001Q
014 030 001
014031315 CALLDL
014 032 277
014 033 000
014 034 303 JMP, M3
014 035 026
014036014
014040001 КОД: 123481
014041 002
014 042 003
014 043 004
014 044 010
014 045 001
Здесь с помощью команды MVI В организован счетчик количества цифр в наборе кодового замка. Командой CALL SKL непрерывно опрашивается клавиатура, при нажатии одной из кнопок полученный код сравнивается с кодом, хранящимся в ячейках памяти. Если коды не совпадают, происходит переход по метке МЗ к части программы, предназначенной для подачи сигнала тревоги (в порт 001 выводится инкрементируе-мое через каждый 0,01 с содержимое аккумулятора). Если коды совпадают, программа возвращается к опросу клавиатуры (метка Ml) и ожидает нового нажатия кнопки, при котором происходит сравнение полученного кода с содержимым следующей ячейки памяти, и т. д. до тех пор, пока количество нажатий не будет равно запрограммированному командой MVI В. Тогда в порт 000 будет выведено число 001Q, т. е. загорится светодиодный индикатор, соответствующий младшему разряду. Сигнал с младшего разряда порта 000 может быть использован для управления электромагнитом, отпирающим замок.
Введем программу в ПМ-ЭВМ, нажмем кнопки СБРОС и П, а затем поочередно кнопки 1, 2, 3, 4, СБ, 1, соответствующие кодовой комбинации замка (кнопка СБ соответствует цифре 8, а кнопка МБ - цифре 9).
При нажатии последней кнопки на индикаторах порта 000 появится число 001Q. Для возврата к исходному состоянию необходимо снова нажать кнопки СБРОС и П. Теперь при наборе кода сделайте ошибку - тотчас в порте 001 начинают мигать светодиодные индикаторы, а если между выходом порта 001 (вывод 16 микросхемы D18) и источником + 5 В через резистор 200 Ом подключить наушник или репродуктор, послышится тревожное гудение, прекратить которое можно, только нажав кнопку СБРОС.
Вводя разные числа в ячейку ОЗУ по адресу 014Q 001Q, можно изменять количество цифр в кодовой комбинации, а вводя различные числа в ячейки ОЗУ, начиная с 014Q 040Q -задавать различные кодовые комбинации. Таким образом, не используя никакого добавочного оборудования, мы промоделировали работу кодового замка. Для реализации кодового замка, как говорят, "в железе" необходимо вынести в наборное поле замка кнопки, параллельные кнопкам клавиатуры 0-7, СБ, МБ, СБРОС, П. Последние две кнопки необходимы, чтобы при неправильном наборе вернуться к исходному состоянию. Кроме того, нужно организовать управление механизмом замка, а для того чтобы после случайного прекращения питания замок правильно функционировал, программу вместе с кодовой комбинацией необходимо хранить в ПЗУ.
Мы видим, что при всей простоте реализации кодовый замок на базе ПМ-ЭВМ представляет законченную систему цифрового управления: он хранит программу и исходные данные (уставки), принимает входные управляющие воздействия (нажатия кнопок), вырабатывает выходные управляющие сигналы (сигнал тревоги или сигнал разрешения для механизма замка). Читатель может по своему усмотрению усложнить алгоритм работы замка с целью повышения безопасности или с целью упрощения коммуникаций.
КЛАВИАТУРА И ИНДИКАЦИЯ
Устройства ввода/вывода необходимы для связи микро-ЭВМ с внешним миром. Без такой связи ее работа была бы бессмысленной. Устройства ввода/вывода бывают самые различные по конструкции и особенностям работы. Отличительной особенностью всех этих устройств является их способность перекодировать информацию из той формы, в которой она представляется в микро-ЭВМ, в форму, необходимую для связи с какими-либо приборами (для устройства вывода), и осуществлять обратный процесс для устройства ввода. Схема индикации и клавиатура микро-ЭВМ подключаются к линиям DBO-DJB7 шины данных, линиям ABO — AB7 шины адреса и линиям IN и OUT шины управления (рис. 7.5, 7.6). Схема индикации выполнена на базе трех байтовых (8-разрядных) портов вывода (микросхемы D16-D21), а схема клавиатуры — на базе одного 4-разрядного порта ввода (микросхемы D23).
Каждый из портов вывода схемы индикации выполнен из двух микросхем К155ТМ7. Эта микросхема представляет собой четыре D-триггера с прямыми и инверсными выходами (см. гл. 4). Входы триггеров подключены к линиям шины данных. Каждый выход D-триггера микросхемы К155ТМ7 имеет нагрузочную способность, равную 10, т. е. к нему можно подсоединить 10 стандартных ТТЛ-входов, а это значит, что при низком уровне на выходе (напряжение меньше или равно 0,4 В) в него может втекать ток до 16 мА. Это позволяет подключать свето-Диоды для индикации состояний триггеров непосредственно к их выходам (рис. 7.7). Сопротивление включается последовательно с светодиодом для того, чтобы ограничить ток до 5-10 мА. Для индикации можно использовать любые диоды с рабочим током 5 — 15 мА, например АЛ102А, АЛ102Г, АЛ112А-М. Светодиоды подключены к инверсным выходам триггеров, поэтому они зажигаются, если в соответствующий триггер записывается 1, и гаснут, если записывается 0.
В схему индикации и клавиатуры входит микросхема К155ИД4 (D24). Эта микросхема представляет собой два дешифратора-мультиплексора (см. гл. 5), объединенные в один дешифратор трехразрядного двоичного кода в код "один из восьми".
Это достигается соединением входов 1 и 75, а также входов 2 и 14 микросхемы. На вход 13 подается первый разряд кода, на вход 3 - второй, а на объединенные входы 1и 15 -третий разряд двоичного кода, предназначенного для преобразования в код "один из восьми". Объединенные входы 2 и 14 служат для запрещения работы дешифратора. При этом на них должен быть подан высокий уровень. Такой режим работы микросхемы К155ТД4 представлен в табл. 7.2.
Рис. 7.5. Схема индикации
Рис. 7.5. Схема индикации (продолжение)
Микросхема К155ИД4 (D24) вместе с микросхемой К155ЛА2 (D25) составляет схему дешифрации адреса для выбора внешних устройств ввода и вывода. Эта схема функционирует следующим образом. Входы 13, 3 и 1/15 микросхемы D24 подсоединены к линиям ABO, AB1, АВ2 шины адреса, а входы микросхемы D25 — подсоединены к инвертированным линиям шины адреса АВЗ, АВ4, АВ5, АВ6, АВ7. Поэтому когда во время выполнения команд IN или OUT на линиях шины адреса появляется адрес внешнего устройства (см. гл. 6), на одном из выходов микросхемы U24 появляется низкий уровень. Соответствие выполняемой команды IN или OUT тем выходам D24, на которых появляется низкий уровень, приведено в табл. 7.3.
Рис. 7.6. Схема клавиатуры
Рис. 7.7. Схема подключения све-тодиода к выходу порта вывода
Таблица |
7.2 |
|
|
|
|
|
|
|
|
|
|||||||
Входы |
Выходы |
||||||||||||||||
2/14 |
1/15 |
3 |
13 |
9 |
10 |
11 |
12 |
7 |
6 |
5 |
4 |
||||||
Н |
X |
X |
X |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
||||||
Т |
L |
L |
L |
L |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
||||||
Т |
L |
L |
Н |
Н |
L |
Н |
Н |
Н |
Н |
Н |
Н |
||||||
т |
L |
Н |
L |
Н |
Н |
L |
Н |
Н |
№ |
Н |
Н |
||||||
I, |
L |
Н |
Н |
Н |
Н |
Н |
L |
Н |
Н |
Н |
Н |
||||||
т, |
Н |
L |
L |
Н |
Н |
Н |
Н |
L |
Н |
Н |
Н |
||||||
т, |
Н |
L |
Н |
Н |
Н |
Н |
Н |
Н |
L |
Н |
Н |
||||||
т, |
Н |
Н |
L |
Н |
Н |
Н |
Н |
Н |
Н |
L |
Н |
||||||
L |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
Н |
L |
||||||
Таблица |
7.3 |
|
|
|
|
|
|
|
|
|
|||||||
Команда |
Код на линиях шины адреса во время выполнения команды |
Вывод микросхемы D24 с низким уровнем |
|||||||||||||||
АВ7 |
АВ6 |
АВ5 |
АВ4 |
АВЗ АВ2 |
АВ1 |
АВО |
|
|
|||||||||
IN 000Q или 1 1 OUT 000 Q |
1 1 |
1 |
0 |
0 |
0 |
9 |
|||||||||||
IN 001 Q или 1 1 OUT 001Q |
1 1 |
1 |
0 |
0 |
1 |
10 |
|||||||||||
IN 002 Qили 1 1 OUT 002 Q |
1 1 |
1 |
0 |
1 |
0 |
11 |
|||||||||||
IN 003 Q или 1 1 OUT 003 Q |
1 1 |
1 |
0 |
1 |
1 |
12 |
|||||||||||
IN 004 Q или 1 1 OUT 004 Q |
1 1 |
1 |
1 |
0 |
0 |
7 |
|||||||||||
IN 005 Q или 1 1 OUT 005 Q |
1 1 |
1 |
1 |
0 |
1 |
6 |
|||||||||||
IN 00бQили 1 1 OUT 006 Q |
Г 1 |
1 |
1 |
1 |
0 |
5 |
|||||||||||
IN 007Qили 1 1 OUT 00 7 Q |
1 1 |
1 |
1 |
1 |
1 |
4 |
|||||||||||
Таблица 7.4 |
||
Команда |
Микросхемы, состав ляющие порт ввода или вывода |
Функция порта ввода или вывода |
OUT 000 Q |
D16, D17 |
Индикация одного байта |
OUT 001 Q |
D18, D19 |
То же |
OUT 002 Q |
D20, D21 |
То же |
OUT003Q |
D22 |
Вывод четырех битов для обслуживания клавиатуры |
IN 003 Q |
D23 |
Ввод четырех битов для обслуживания клавиатуры |
Остальные выходы дешифратора D24 можно использовать для подключения дополнительных устройств ввода/вывода. Всего при такой схеме дешифрации адреса внешнего устройства можно подключить восемь устройств ввода и восемь вывода. Для того чтобы еще увеличить число устройств ввода/вывода, схему дешифрации необходимо изменить и подвергать дешифрации большее число младших разрядов адреса.
При выпрлнении одной из команд OUT, перечисленных в табл. 7.4, во время ее третьего цикла на шинах данных, адреса и управления вырабатываются сигналы, изображенные на рис. 7.8.
При этом вырабатывается сигнал на соответствующем выходе дешифратора D24 (см. табл. 7.3). Сигнал с выхода дешифратора подается вместе с сигналом OUT на входы микросхемы К155ЛЕ1 (D26) и формирует на ее выходе положительный импульс. Этот импульс, поступая на управляющие входы 4, 13 D-триггеров одного из портов, своим фронтом (переход из 0 в 1) переписывает код с шины данных в триггеры, а своим срезом фиксирует его там. Таким образом, 8 бит кода, содержащегося в аккумуляторе перед выполнением команды OUT, высвечиваются на индикаторах порта 000Q, 001Q или 002Q.
Что касается порта с адресом 003 Q, то в него командой OUT 003 Q можно переписать только четыре младших бита аккумулятора, так как порт состоит только из четырех триггеров.
Рис. 7.8. Временная диаграмма работы порта вывода
Этот порт совместно с портом ввода (с тем же адресом 003Q), реализованным на микросхеме К589АШ6 (D23), предназначен для подключения к микро-ЭВМ клавиатуры (см. рис. 7.6). Кнопки клавиатуры включены между выходами микросхемы D22 и входами D23. Входы D23 через сопротивление 5 кОм соединены с напряжением питания. Это сделано для того, чтобы поддерживать на каждом входе D23 высокий уровень, если ни одна кнопка, связанная с этим входом, не нажата. Значения сопротивлений (5 кОм) выбраны с тем расчетом, чтобы не перегружать выходы D22, если какая-нибудь кнопка нажата.
Схема клавиатуры работает следующим образом. Специальная программа SKL (см. § 7.4) записывает в порт с адресом 003 Q такие коды, у которых в одном из четырех разрядов О, а в остальных разрядах 1, причем 0 появляется последовательно в разрядах О, 1, 2 и 3 и соответственно на выходах 16,15, 10 и 9 микросхемы D22. После того как код записан и на одном из выходов 16, 15, 10 или 9 установился низкий уровень, эта программа производит командой IN 003 Q ввод в аккумулятор кода, который в этот момент присутствует на входах 4, 7, 9 и 12 микросхемы D23. Ввод в аккумулятор происходит во время третьего цикла команды IN (рис. 7.9). Адрес внешнего устройства 003 Q вызывает появление низкого уровня на выходе 12 микросхемы D24. Этот низкий уровень, попадая на вход 1 микросхемы D23, разрешает ее работу, но ее выходы 3, 6, 10 и 13 остаются в состоянии высокого сопротивления. По сигналу IN эти выходы открываются и в четыре младших разряда аккумулятора микропроцессора переписываются состояния входов 4, 7, 9 и 12. Если ни одна из кнопок, соединенных с тем выходом D22, на котором присутствует низкий уровень, не нажата, то все четыре младших разряда аккумулятора равны 1, если одна из кнопок нажата, то соответствующий разряд будет равен 0.По тому коду, который был записан в порт с адресом 003 Q, и тому коду, который был считан из порта 003 Q, можно определить, какая из кнопок нажата. Как это делается, описано в следующем параграфе.
Рис. 7.9. Временная диаграмма работы порта ввода
014055303 JMP, M2
014 056 006
014057 014
014 060 077 TAB:
014 061 006
014062133
014063 117
014064 146
014 065 155
014 066 175
014 067 007
014070177
014071 157
014 072 000
014 073 000
014 074 060
Рис. 10.3. Схема гашения индикаторов
Программа, построенная на базе предыдущей, выводит на дисплей, образованный 16 семисегментными индикаторами, движущийся текст (в данном примере цифры от 0 до 9 и два пробела), хранимый в ОЗУ, начиная с ячейки 014Q 060Q. Конец текста помечается символом, не использованным для обозначения букв и цифр (в данном примере символ II, его код 060Q). Он хранится в ячейке 014Q 051Q и сравнивается с символом текста, выводимым на крайний левый индикатор дисплея. Как только опознан символ конца текста, программа возвращается к началу текста. Время цикла сканирования задается числом в ячейке 014Q 025Q, а время, на которое текст останавливается, — числом в ячейке 014Q 005Q.
Программа может быть использована для подготовки и редактирования текстов, выводимых на внешние устройства.
Во избежание перегорания индикаторов при непредусмотренном прекращении сканирования схему, изображенную на рис. 10.2, следует дополнить устройством гашения индикаторов, построенным на основе одновибратора (рис. 10.3). Устройство отключает индикацию через заданный цепочкой RC интервал времени после подачи импульса выборки порта 002. Таким образом, индикаторы непрерывно (для глаза наблюдателя) горят только при периодической выдаче информации в порт 002.
Рассмотренная схема индикации весьма универсальна и обладает гЪраздо более широкими возможностями для обеспечения диалогового режима работы ПМ-ЭВМ по сравнению с простой двоичной индикацией.
КОНСТРУКТИВНОЕ ОФОРМЛЕНИЕ ПМ-ЭВМ
Если пользователю микро-ЭВМ для работы с ней при программировании своих задач полезно все же иметь некоторое представление о содержимом того "черного ящика", с которым он имеет дело, то будущему конструктору, конечно уж, необходимо знать абсолютно все его "болты и гайки". В связи с этим в данной главе нам предстоит заглянуть внутрь каждого из блоков будущей ЭВМ и попытаться проанализировать его работу на функциональном уровне.
Как отмечалось в гл. 2, ПМ-ЭВМ состоит из центрального блока и устройств ввода/вывода. В качестве устройства ввода в ПМ-ЭВМ используется клавиатура, а устройства вывода -совокупность светодиодов. Центральный блок машины, как следует из рис. 2.4, состоит из центрального процессорного элемента, оперативного (ОЗУ) и постоянного (ПЗУ) запоминающих устройств и портов ввода и вывода. Работа всех перечисленных блоков синхронизируется сигналами от синхрогенератора, входящего в состав МБ.
Конструктивно ПМ-ЭВМ может быть оформлена в виде настольного прибора, на лицевой панели которого находятся клавиатура (К) и светодиоды (СД). Все компоненты центрального блока могут быть размещены на одной печатной плате (в описываемом варианте ПМ-ЭВМ — одноплатная машина), установленной внутри корпуса прибора.
Рис. 4.1. Внешний вид ПМ-ЭВМ (а) и шестнадцатеричной клавишной панели ввода информации (б)
Внешний вид ПМ-ЭВМ при таком конструктивном оформлении приведен на рис. 4.1,д. На рис. 4.1,6 указаны основные органы клавиатуры. В более простом варианте конструкции машины светодиоды также размещаются на плате, а клавиатура оформляется в виде отдельной выносной панели, соединенной с машиной с помощью жгута. Разъемное подсоединение К к машине может быть рекомендовано лишь при наличии хорошего разъема, обеспечивающего надежное соединение контактов. Если такого разъема нет, жгут лучше подсоединить наглухо путем пайки.
В этом случае вся машина "укладывается" в размеры средней толщины папки для бумаг.
Клавиатура содержит 16 кнопок, из которых кнопки К1- К8 служат для ввода данных, кнопки К9 — К11 — для управления вводом данных, а кнопка К12 — для управления запуском программы. Кнопки К13-К16 не задействованы. Кроме того, имеются еще две управляющие кнопки и один переключатель. Кнопка К17 предназначена для пошагового выполнения программы. При ее нажатии происходит выполнение одного машинного цикла (см. § 4.4). Переключатель К18 предназначен для выбора режима работы ПМ-ЭВМ. Он имеет два положения: "шаг" и "автомат". В положении "автомат" переключатель замкнут и происходит автоматическое выполнение программы. В положении "шаг" программу можно пропустить в пошаговом режиме путем многократного нажатия кнопки "машинный цикл" К17. Кнопка К19 ("сброс") предназначена для обнуления счетчика команд (см. § 4.3) .
Светодиоды компонуются в три группы по восемь штук в каждой. Они отображают состояния трех портов вывода. Схемы подключения светодиодов и клавиатуры описываются в § 7.3.
Прежде чем переходить к рассмотрению функциональной схемы ПМ-ЭВМ, поговорим о том, как организованы связи между блоками в вычислительной машине.
МИКРОПРОЦЕССОР КРКА
В предыдущих главах уже приводились некоторые данные о микропроцессоре КР580ИК80А. В этой главе будет продолжено описание этого микропроцессора в основном с точки зрения электронных или, как говорят, аппаратурных особенностей его устройства и работы. Микропроцессор КР580ИК80А представляет собой центральный процессорный элемент, выполненный по и-МОП технологии в виде одной микросхемы. Микросхема упакована в прямоугольный пластмассовый корпус с двухрядным расположением выводов. Серия КР580 является развитием серии К580 и содержит несколько больших интегральных схем, на базе которых можно эффективно реализовывать различные микропроцессорные системы. Микросхема КР580ИК80А содержит 5000 транзисторов и имеет 40 выводов.
Приведем некоторые типовые характеристики микропроцессора.
Диапазон рабочих температур, °С............... От -10 до+70
Максимальная тактовая частота, МГц............. 2,5
Напряжение источников питания, В:
U1.......-......................... +12±0,6
U2............................... +5 ±0,25
Uз................................ -5 ±0,25
Потребляемая мощность, мВт................. 1500
Быстродействие (количество операций типа регистр-регистр в секунду)......................... 625 000
Рис. 6.1. Микропроцессор КР580ИК80АКаждый выход микропроцессора обеспечивает I0вых не более 1,8 мА и I1вых не более 0,1 мА, т. е. может быть нагружен одним стандартным ТТЛ-входом серии К155. Напряжения питания необходимо подавать или одновременно, или в последовательности U1, U2, Uз и снимать в обратной последовательности. Микропроцессор КР580ИК80А относится к универсальным микропроцессорам, он имеет возможность работать в самых разнообразных режимах. Тот или иной режим может не использоваться в каждой конкретной конструкции микро-ЭВМ. Условное графическое изображение микропроцессора приводится на рис. 6.1, а функции выводов — в табл. 6.1.
Таблица 6.1
Обозначение вывода |
Функциональное назначение вывода |
|
АО-А15 DO-D7 |
Выходы, линии шины адреса Двунаправленные линии шины данных |
|
Сигналы управления шинами |
||
DBIN |
Выход, признак того, что шина данных находится в состоянии приема информации |
|
WR HOLD |
Выход, признак того, что шина данных находится в состоянии передачи информации Вход, переводит шины данных и адреса в состояние высокого сопротивления |
|
HLDA |
Выход, признак того, что шины данных и адреса находятся в состоянии высокого сопротивления |
|
READY |
Вход, переводит микропроцессор в состояние ожидания |
|
WAIT |
Выход, признак того, что микропроцессор находится в состоянии ожидания |
|
Обозначение вывода |
Функциональное назначение вывода |
|
SYNC |
Выход, признак того, что по шине данных передается управляющее слово микропроцессор |
|
INTERRUPT INTE |
Сигналы управления прерываниями Вход, запрос прерывания работы микропроцессора Выход, соответствует состоянию внутреннего триггера, управляющего прерыванием микропроцессора |
|
Ф1,Ф2 |
Сигналы синхронизации Входы для тактовых импульсов |
|
RESET |
Сигнал начального запуска Вход, вызывает запись в программный счетчик адреса нулевой ячейки памяти |
|
6.2. СИНХРОНИЗАЦИЯ
Как уже известно из § 4.3, каждая команда выполняется микропроцессором не мгновенно, а как последовательность машинных циклов. Микропроцессор КР580ИК80А имеет 10 типов машинных циклов (табл. 6.2), и все его команды состоят из комбинаций только этих циклов.
В состав команды может входить от одного до пяти циклов. Каждый машинный цикл также не является неделимой операцией, а состоит из машинных тактов. В состав машинного цикла микропроцессора КР580ИК80А может входить от трех до пяти машинных тактов. Машинный такт не является таким же законченным процессом, как машинный цикл, большинство сигналов микропроцессора вырабатываются в одном такте и снимаются в другом.
Поэтому для машинных тактов нельзя привести такую же классификацию, как для машинных циклов. Как и в гл. 4, в тексте и на рисунках будем обозначать такты одного цикла Tl, T2, ... и т. д., циклы одной команды С1,С2,... и т. д.
Для того чтобы сформировать интервал времени, соответствующий одному машинному такту, на входы микропроцессора Ф1 и Ф2 подаются тактовые импульсы (синхроимпульсы). Длительность машинного такта равняется одному периоду синхроимпульсов. Все внутренние операции микропроцессора и формирование внешних сигналов происходят в моменты времени, определяемые синхроимпульсами.
Рис. 6.2. Тактовые импульсы Таблица 6.2
|
Управляющее слово, состоящее из разрядов шины данных DO — D7 |
|||||||
Тип цикла |
DO |
Dl |
D2 |
D3 |
D4 |
D5 |
D6 |
D7 |
ВЫБОРКА КОМАНДЫ |
L |
H |
L |
L |
L |
H |
L |
H |
ЧТЕНИЕ ИЗ ПАМЯТИ |
L |
H |
L |
L |
L |
L |
L |
H |
ЗАПИСЬ В ПАМЯТЬ |
L |
L |
L |
L |
L |
L |
L |
L |
ЧТЕНИЕ ИЗ СТЕКА |
L |
H |
H |
L |
L |
L |
L |
H |
ЗАПИСЬ В СТЕК |
L |
L |
H |
L |
L |
L |
L |
L |
ВВОД С ВНЕШНЕГО УСТРОЙСТВА |
L |
H |
L |
L |
L |
L |
H |
L |
ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО |
L |
L |
L |
L |
H |
L |
L |
L |
ПРЕРЫВАНИЕ |
H |
H |
L |
L |
L |
H |
L |
L |
ОСТАНОВ |
L |
H |
L |
H |
L |
L |
L |
H |
ПРЕРЫВАНИЕ ВО ВРЕМЯ ОСТАНОВА |
H |
H |
L |
H |
L |
H |
L |
L |
Сигналы Ф1 и Ф2 могут иметь и более простую временную диаграмму (рис. 6.2,6). Если не пользоваться для их генерации микросхемой КР580ГФ24, то получить такую диаграмму проще, чем стандартную. Требования к уровням, фронтам и частоте остаются такими же, как и для стандартной временной диаграммы.
МИКРОСХЕМЫ, СОДЕРЖАЩИЕ ЭЛЕМЕНТЫ ПАМЯТИ
Микросхема К155ТМ2 (рис. 5.27, табл. 5.18). Эта микросхема содержит два D-трштера. Поясним работу D-триггеров микросхемы К155ТМ2, пользуясь табл. 5.18. Каждый D-триггер этой микросхемы имеет вход предустановки S и сброса R. Из таблицы видно, что при подаче низкого уровня на вход S на прямом выходе триггера Q появится высокий уровень, а на инверсном выходе Q - низкий Уровень. Низкий уровень на входе R устанавливает выходы триггера в противоположные состояния. Если низкий уровень присутствует хотя бы на одном из входов S или R, то сигналы на входах С и D никак не влияют на состояние триггера. Если сигнал низкого уровня подавать одновременно на входы S и R, то на обоих выходах (прямом и инверсном) установится высокий уровень; если эти сигналы одновременно снять, то триггер может установиться в любое состояние, поэтому такой ситуации необходимо избегать.
Рис. 5.27. Микросхема К155ТМ2
Таблица 5.18 | |||||
Входы | Выходы | ||||
S | R | С | D | Q | Q |
L | Н | X | X | Н | L |
Н | L | X | X | L | H |
L | L | X | X | Н | H |
Н | Н | L | X | Qs | Qs |
Н | Н | Н | X | Qs | Qs |
Н | Н | 1 | X | Qs | Qs |
Н | Н | t | Н | Н | L |
Н | Н | t | L | L | H |
Рис. 5.28. Временная диаграмма работы микросхемы К155ТМ2
Буквой Qs в табл. 5.18 обозначено состояние триггера, которое было до подачи указанных управляющих сигналов. Из табл. 5.18 видно, что низкий уровень, высокий уровень, а также переход от высокого к низкому уровню на входе С никак не влияют на состояние триггера. Только переход от низкого уровня к высокому устанавливает на выходе триггера тот уровень, который в данный момент присутствует на входе D, а на инверсном выходе устанавливает инверсный уровень. На рис. 5.28 приведена временная диаграмма, иллюстрирующая работу D-триггера микросхемы К155ТМ2.
Таблица 5.19
Входы | Выходы | ||
С | D | Q | 0 |
L | X | qs | Qs |
Н | Н | Н | L |
Н | L | L | Н |
Рис. 5.29. Микросхема К155ТМ7
Рис. 5.30. Временная диаграмма работы микросхемы К155ТМ7
Микросхема К155ТМ7 (рис. 5.29, табл. 5.19). Эта микросхема содержит четыре D-триггера.
Каждый триггер имеет вход D, выходы Q и Q и управляющий вход С, но управляющие входы всех триггеров не подключены к отдельным выводам микросхемы, а соединены попарно и подключены к выводам 4 и 13. Поэтому триггерами этой микросхемы нельзя управлять по отдельности. Из табл. 5.19 видно, что если на управляющем входе С низкий уровень, то уровень сигнала на выходе триггера Q остается неизменным, а если высокий уровень, то уровень сигнала на выходе триггера повторяет уровень на входе D. Временная диаграмма, поясняющая работу триггера, приведена на рис. 5.30. Триггер такого типа часто называют "защелкой", так как с его помощью можно в любой момент зафиксировать уровень какого-либо сигнала.
Микросхема КР541РУ2 (рис. 5.31). Эта микросхема является оперативным запоминающим устройством емкостью 4 Кбит с организацией 1024x4 бита. Это значит, что внутри микросхемы содержится 1024 запоминающие ячейки, каждая из которых состоит из четырех двоичных разрядов. Для адресации ячеек памяти внутри микросхемы имеется 10 адресных входов АО — А9. Каждой комбинации сигналов на этих входах соответствует одна ячейка. Для передачи информации в ячейки памяти при записи и из ячеек памяти при считывании имеются выводы QO — Q3. При записи информации эти выводы работают как входы, а при считывании — как выходы с открытым коллектором. Вход WE управляет режимом записи и считывания: при высоком уровне на этом входе микросхема работает в режиме считывания, при низком — в режиме записи. Вход CS управляет работой выводов QO — Q3. При высоком уровне на этом входе информация не может быть считана или записана. В режиме считывания низкий уровень на входе CS разрешает работу выводов QO — Q3 как выходов, а в режиме записи — как входов. Временные диаграммы работы микросхемы в режиме записи считывания приведены на рис. 5.32.
Микросхема КР556РТ4 (рис. 5.33). Эта микросхема явля ется постоянным запоминающим устройством емкостью 1 Кбит с организацией 256x4 бита, т. е. внутри микросхемы содержится 256 ячеек памяти, каждая из которых состоит из четырех разрядов. Информация, записанная в ПЗУ, не стирается при выключении напряжения питания. Для записи информации в ПЗУ используется специальное устройство, называемое программатором. Схема программатора для микросхемы К556РЕ4 (старое название микросхемы КР556РТ4) и режим записи информации не приводятся в этой книге.
Микросхема КР556РТ4 имеет восемь входов АО-А7 для адресации ячеек памяти, четыре выхода с открытым коллектором QO — Q3 для считывания содержимого ячейки и два управляющих входа CSO и CS1. Считывание информации может происходить только тогда, когда на обоих входах CSO и CS1 низкий уровень (рис. 5.34).
Рис. 5.31. Микросхема КР541РУ2
Рис. 5.33. Микросхема КР556РТ4
Рис. 5.32. Временная диаграмма работы микросхемы КР541РУ2
Рис. 5.34. Временная диаграмма работы микросхемы КР556РТ4 при считывании
МОЖНО ЛИ САМОМУ ПОСТРОИТЬ ЭВМ?
Еще 15 лет назад человека, задавшего такой вопрос, посчитали бы не совсем нормальным. Действительно, до появления микросхем большой и сверхбольшой степени интеграции это было абсолютно бессмысленной затеей. Благодаря достижениям в области микроэлектроники последних лет стало возможным массовое производство в виде микросхем сложнейших устройств, таких как центральный процессор вычислительной машины, оперативное и постоянное запоминающие устройства и т. д. Поскольку в большинстве случаев электрические параметры и функциональное назначение выходов и входов этих устройств (блоков) стандартизованы, их довольно легко соединять друг с другом. К тому же при разработке этих блоков, как правило, предусматривается стандартный вариант их применения, использование которого значительно упрощает проектирование устройств на их основе. Проектирование и построение микро-ЭВМ напоминает игру в детский конструктор, где все детали подходят друг к другу и можно воспользоваться руководством, в котором предложены некоторые типовые варианты узлов и изделий из его элементов. Для построения простейшей машины потребуется всего несколько узлов, создать которые не так уж трудно.
Итак, построение простейшей микро-ЭВМ оказывается сейчас возможным и не очень сложным делом. По крайней мере оно не сложнее постройки любительских конструкций в области радио, телевидения или звукозаписи.
"А можно ли построить самому не простейшую, а более сложную микро-ЭВМ?" — спросит заинтересованный читатель.
Простейший вариант микро-ЭВМ допускает возможность усложнения и усовершенствования конструкции путем замены или установки дополнительных микросхем или новых дополнительных плат с микросхемами. Можно повысить быстродействие микро-ЭВМ, увеличить объем памяти или заставить ее выполнять новые, не предусмотренные первоначальной конструкцией функции. К существенному расширению возможностей простейшей микро-ЭВМ приведет, например, включение в ее состав перепрограммируемой памяти, т. е. постоянной памяти, сохраняющей информацию при выключении питания и программируемой пользователем, с возможностью стирания информации и повторного программирования. Поскольку более сложная микро-ЭВМ, как мы увидим из дальнейшего изложения (см. § 2.3), отличается от простейшей, кроме всего прочего, развитой периферией, можно заняться совершенствованием ее внешних устройств. Однако внешние устройства самому построить довольно сложно. Вряд ли, например, кто-нибудь захочет взяться за конструирование хорошего печатающего устройства. Изготовление подобного устройства под силу лишь промышленности. Вот подсоединить к простейшей микро-ЭВМ имеющиеся внешние устройства можно, в том числе некоторые бытовые приборы, такие как домашний телевизор или кассетный магнитофон. О том, как это сделать, вы узнаете в гл. 10.
НАКОПИТЕЛЬ НА БАЗЕ БЫТОВОГО МАГНИТОФОНА
Сохранение программ на простом бытовом магнитофоне не только эффективно, но и необходимо для записи более длинных программ без использования дорогих цифровых магнитофонов, а также взамен записи на перфоленту. Дешевые бытовые магнитофоны имеют ограниченную полосу пропускания, высокий уровень шумов и непостоянную скорость протяжки. В отличие от принятой в цифровых магнитофонах схемы, где записываемый сигнал с помощью специального устройства модулируется разными частотами для логического 0 и логической 1, в описываемом здесь методе записи требования, предъявляемые к каналу передачи данных, минимальны. Вместо передачи уровней, соответствующих логическому 0 и логической 1, данные передаются в виде пачек импульсов заданной частоты (тона) с разным количеством импульсов в пачке. Основная частота должна лежать в пределах полосы пропускания магнитофона. Каждый бит передаваемой информации представляется в виде импульсной пачки, за которой следует пауза. Первая треть периода передачи бита всегда занята импульсами, во второй трети либо импульсы продолжаются, либо наступает пауза, что означает соответственно логическую 1 или логический 0, последняя треть периода — всегда пауза (рис. 10.4). Таким образом, значение бита данных задается отношением длины импульсной пачки к длине паузы. (Известны и другие системы записи, например основанные на количестве импульсов в пачке.) Для изучения методов формирования таких импульсных пачек введем в ПМ-ЭВМ следующую учебную программу:
014000016 MVIC, 252Q
014001 252
014002006 Ml: MVIB, 011Q
014003 Oil
014004257 М2: XRA A
014 005 323 OUT, OOOQ
014 006 000
014007315 CALL IMP
014010060
014011 014
014012171 MOV А, С
014013037 RAR
014014117 MOV С, А
014015322 JNC, МЗ
014 016 026
014017014
014 020 257 XRA A
014 021 323 OUT, OOOQ
014 022 000
014 023 303 JMP, M4
014 024 032
014025 014
014026076 МЗ: MVI A, 377Q
014027377
014 030 323 OUT, OOOQ
014031 000
014032315 М4: CALL, IMP
014 033 060
014 034 014
014035257 . XRA A
014 036 057 СМА
014 037 323 OUT, OOOQ
014 040 000
014041315 CALL, IMP
014 042 060
014043 014
014044171 MOV А, С
014 045 323 OUT, 002Q
014 046 002
014 047 005 DCR В
014050302 JNZ,M2
014 051 004
014052014
014 053 166 HLT
014 060 026 IMP: MVI D, 010Q
014061 010
014062257 XRA A
014063323 M5: OUT, 001Q
014 064 001
014 065 036 MVI E, 040Q
014 066 040
014067315 M6: CALL DL
014 070 277
014071 000
014072035 DCRE
014073302 JNZ.M6
014 074 067
014075 014
014076074 INK A
014 077 025 OCR D
014100302 JNZ,M5
014 101 063
014 102 014
014103311 RET
Рис. 10.4. Диаграмма передачи одного двоичного разряда
Программа, начиная с младшего разряда, преобразует байт информации, хранящийся в регистре С, в последовательность посылок, наблюдаемую в портах 000 и 001. Индикаторы порта 000 погашены в тех частях периода передачи каждого бита, когда должна выдаваться импульсная пачка, и горят, когда она не должна выдаваться, т. е. логическому 0 соответствует последовательность: не горит — горит — горит, а логической 1 — не горит — не горит — горит. Импульсы с заданной частотой следования появляются в младшем разряде порта 001, а в целом индикаторы порта 001 подсчитывают эти импульсы. Частота следования импульсов — примерно 2 Гц. Порт 002 позволяет наблюдать преобразуемое число, каждый разряд которого последовательно анализируется программой путем сдвига в разряд переноса. В ячейке 014Q 003Q хранится параметр, заносимый в регистр В, задающий количество преобразуемых разрядов числа. Здесь этот параметр равен девяти, так как кроме восьми информационных пачек для обозначения конца передачи числа передается импульсная пачка, соответствующая нулю. Подпрограмма формирования импульсной пачки имеет метку IMP. Количество импульсов в пачке равно половине числа, хранящегося в ячейке 014Q 061Q, которое обязательно должно быть четным. Длительность импульса в пачке определяется задержкой, задаваемой числом в ячейке 014Q 066Q. В учебной программе длительность импульса для наблюдаемости задана равной произведению этого числа на задержку, определяемую ПП DL. Для использования ГШ в качестве рабочей необходимо из ПП IMP изъять обращение к ПП DL, из основного текста изъять команду вывода в порт 002 (адреса с 014Q 044Q по 014Q 046Q), а вместо команды HLT ввести команду RET. Чтобы сформировать сигнал, который можно подавать непосредственно на вход записи магнитофона, используем схему, представленную на рис. 10.5. Эта схема позволяет регулировать уровень записи и ликвидирует постоянную составляющую сигнала.
Рис. 10.5. Схема формирователя сигнала для записи на магнитофон
Зададимся приемлемой для записи и воспроизведения на бытовом магнитофоне частотой импульсов в пачках, равной 2 кГц. Тогда легко подсчитать число, заносимое в регистр Е. Действительно, программный цикл от команды DCR Е до команды JNZ занимает 15 тактов. В ПМ-ЭВМ тактовая частота равна 1 МГц. Следовательно, чтобы получить задержку, равную половине периода повторения импульсов 1/(2000-2) = 250 мкс, необходимо задать 250/15 ~ 16 программных циклов. В регистр Е надо занести 020Q = 16. Если количество импульсов в пачке равно четырем (как задано в нашей программе), скорость передачи информации составит 2000/(4-3) ~ 167 бит/с.
Рис. 10.6. Формирование выходного сигнала с магнитофона
Для ввода информации с бытового магнитофона необходимо из полученного сигнала сформировать нормальные логические посылки на ТТЛ-уровнях, причем воспроизведению импульсной пачки должен соответствовать уровень логической 1, а паузе -уровень логического 0 (рис. 10.6). Количество импульсов в пачке не принимается во внимание. Такую схему легко реализовать на операционных усилителях или на обычных транзисторах. Формирователь может быть подключен к одному из входов порта 003, например выводу 4 микросхемы D23. В этом случае дальнейшие операции имеют чисто логический характер, легко реализуемый программным путем. Введем в ПМ-ЭВМ следующую демонстрационную программу, которую потом можно преобразовать в рабочую ПП ввода информации с бытового магнитофона:
014 000 006 MAG: MVI В, 010Q
014001 010
014 002 026 MVI D, OOOQ
014 003 000
014004315 Ml: CALL IMP
014005 120
014 006 014
014007332 JC.M1
014010004
014011 014
014012315 CALL IMP
014013 120
014014014
014015332 JC.M1
014 016 004
014017014
014020315 M2: CALL IMP
014021 120
014022014
014023322 JNC, M2
014 024 020
014025014
014026315 CALL IMP
014027 120
014030014
014031 322 JNC, M2
014032020
014033 014
014034025 M3: OCR D
014035315 CALL IMP
014 036 120
014037014
014040332 JC, M3
014041 034
014042014
014043315 CALL IMP
014 044 120
014045014
014046332 JC, M3
014 047 034
014 050 014
014051024 M4: INR D
014052315 CALL IMP
014053 120
014054 014
014055322 JNC.M4
014056 051
014057014
014060315 CALL IMP
014061 120
014 062014
014 063 322 JNC, M4
014064051
014065 014
014 066 172 MOV A, D
014067.027 RAL
014070171 MOV А, С
014071037 RAR
014072117 MOVC, A
014 073 026 MVI D, OOOQ
014 074 000
014075005 OCR В
014076302 JNZ,M3
014077034
014 100014
014 101 171 MOV А, С
014 102 323 OUT, OOOQ
014 103 000
014104257 XRAA
014 105 117 MOVC, A
014106303 JMP.MAG
014 107000
014 110014
014120036 IMP: MVIE, 377Q
014 121 377
014122035 M5: DCR E
014123302 JNZ, M5
014 124 122
014 125 014
014126333 IN,003Q
014 127 003
014130037 RAR
014 131 311 RET
Программа поразрядно формирует в регистре С число, после довательно вводимое через младший разряд порта 003 с помощью ПП IMP, которая производит опрос порта в заданном темпе. В основной части программы в регистре D подсчитываются опросы и формируется знаковый разряд числа в зависимости от соотношения длительности пачки и паузы: если пачка длиннее паузы — в знаковом разряде 1, если короче — в знаковом разряде 0. Биты знакового разряда последовательно заносятся в регистр С. Темп опроса задается числом по адресу 014Q 121Q, заносимым в регистр Е. В данном случае задержка равна 15-256 = 3840 мкс, а частота опроса соответственно равна 1/0,003840 ~ 260 Гц. Следовательно, при длине импульсной пачки до 0,5 с в регистре D накопится число, не большее 130, что гарантирует отсутствие переполнения регистра.
Перед вводом программы в ПМ-ЭВМ подключим к выводу 4 микросхемы D23 вывод 16 микросхемы D16 второй ПМ-ЭВМ, в которую введена описанная выше программа вывода, настроенная на длительность импульсной пачки не более 0,5 с. Вместо второй ПМ-ЭВМ можно подключить приведенный на рис. 10.6 формирователь и магнитофон, на ленту которого предварительно записаны с ПМ-ЭВМ импульсные последовательности для одиночных байтов, но тогда мы сталкиваемся с проблемами отладки всего тракта: ПМ-ЭВМ — выходной формирователь — магнитофон в режиме записи, а затем магнитофон в режиме воспроизведения — входной формирователь — ПМ-ЭВМ. В то же время при непосредственной связи между двумя ПМ-ЭВМ отпадают проблемы согласования уровней и при этом могут быть заданы любые временные характеристики сигналов.
Настроим программу вывода передающей ПМ-ЭВМ на выда чу одного байта информации из регистра С, т. е. используем программу в том виде, как она приведена в тексте. Для вывода байта необходимо нажать кнопки СБРОС и П. Если до этого в принимающей ПМ-ЭВМ были также нажаты кнопки СБРОС и П, через 3 — 4 с на индикаторах ее порта 000 можно будет наблюдать код числа, идентичный коду, хранящемуся в регистре С передающей ПМ-ЭВМ. Чтобы снова передать байт информации, нужно снова нажать кнопки СБРОС и П. Меняя содержимое регистра С передающей ПМ-ЭВМ, можно проверить правильность передачи для любых кодов. После такой проверки можно произвести проверку правильности передачи массива информации. Для этого в память передающей ПМ-ЭВМ нужно дополнительно ввести управляющую программу и внести в основную программу указанные выше изменения. Управляющая программа имеет вид
014110041 ММ1: LXI H, ADM
014 111 000
014 112 015
014113116 ММ2: MOV C.M
014114315 CALL M1
014 115 002
014 116 014
014117054 INR L
014120302 JNZ,MM2
014 121 113
014 122014
014 123 166 HLT
Здесь ADM = ADMHQ ADMLQ - символический адрес начала массива чисел, заносимый в регистровую пару H; Ml - метка начала программы вывода информации. Максимальная длина передаваемого массива - 256 байт, если он начинается с адреса ADMHQ OOOQ и кончается адресом ADMHQ 377Q.
Для проверки правильности передачи необходимо нажать кнопки СБРОС и П принимающей ПМ-ЭВМ, нажать кнопку СБРОС, набрать адрес начала управляющей программы (метка ММ1) и нажать кнопку П передающей ПМ-ЭВМ. На индикаторах порта 000 принимающей ПМ-ЭВМ будут последовательно появляться коды передаваемого массива. Коды массива могут быть занесены в ОЗУ принимающей ПМ-ЭВМ.
Для этого вместо команды MOV С, А по адресу 014Q 105Q необходимо занести команду RET и ввести дополнительно управляющую программу вида
014 041 МА1: LXIH,ADM
014 141 000
О14 143 161 МА2: MOVM,C
014 144 315 CALL MAG
014 145 000
014 146 014
014 147 054 iVrS » л
014 150 302 JNZ, MA2
014 151 143
014 152 014
014 153 166 HLT
Теперь для запуска программы принимающей ПМ-ЭВМ необходимо после нажатия кнопки СБРОС набрать адрес начала управляющей программы (метка МА1), а затем нажать кнопку П. Принимаемые коды по-прежнему наблюдаются на индикаторах порта 000, но после окончания передачи правильность принятого массива легко проверить, считывая его последовательно на индикаторах порта 002 принимающей ПМ-ЭВМ с помощью клавиатуры. После такой проверки можно уже отладить передачу информации с рабочей скоростью порядка 150 бит/с, затем включить между передающей и принимающей ПМ-ЭВМ выходные и входные формирователи, снова проверить передачу и лишь после этого включать магнитофон.
ОБЩАЯ ФУНКЦИОНАЛЬНАЯ СХЕМА ПМ-ЭВМ
Кроме микропроцессорного блока, функциональное назначение которого мы уже определили, в состав ПМ-ЭВМ входят оперативное и постоянное запоминающие устройства и порты ввода/вывода. Все эти блоки связаны между собой через шины адреса и данных. Шина управления в ПМ-ЭВМ состоит всего из четырех линий передачи сигналов, причем в каждом режиме работы микропроцессора активна только одна линия.
Управление работой ПМ-ЭВМ осуществляется двумя блоками: схемой пошагового выполнения программы и схемой системного контроллера. Первая схема полезна для анализа исполнения вводимых команд программы. Системный контроллер необходим для организации трактов передачи информации при реализации основных режимов работы микропроцессора. Используемый в ПМ-ЭВМ микропроцессор КР580ИК80А имеет шины адреса и данных, а также некоторые управляющие сигналы. Сигналы шины управления формируются системным контроллером вне микропроцессора из управляющих сигналов МП. К ним относятся: ЧТЕНИЕ, ЗАПИСЬ, ВЫВОД НА ВНЕШНЕЕ УСТРОЙСТВО, ВВОД С ВНЕШНЕГО УСТРОЙСТВА (см. § 6.3).
При организации шин необходимо правильно оценить величину токовой нагрузки по каждой шине. Если суммарный ток нагрузки линии в шине превышает допустимую величину на соответствующем выходе микропроцессора, то такую линию необходимо снабдить буфером. Под буфером подразумевается специальная схема, обеспечивающая электрическое согласование цепей передачи сигналов. Как уже отмечалось в гл. 3, простейшая схема буфера, не меняющая значение сигнала, состоит из двух включенных последовательно инверторов. Именно эта схема используется в ПМ-ЭВМ в формирователе сигналов шины адреса.
Линии шины данных в ПМ-ЭВМ также необходимо снабдить буферами. Однако поскольку шина данных является двунаправленной, буфер для нее также должен быть двунаправленным. Поэтому схему из двух последовательно включенных инверторов здесь использовать нельзя. Необходима специальная схема с использованием управляющего сигнала выбора направления передачи данных.
Работа схемы двунаправленного буфера шины данных описана в § 6.3.
Рис. 4.3. Схема основных функциональных узлов ПМ-ЭВМ и связей между ними:
ДАЗУ, ДАУВВ - дешифраторы адреса ЗУ и УВВ; ДБШД - двунаправленный буфер ШД; КЛ - клавиатура; СД - све-тодиоды; СК — системный контроллер; СПИП — схема пошагового исполнения программы; 0, 1,2,3 — порты вывода; 3' - порт ввода
Для организации правильной адресации к устройствам памяти и к устройствам ввода/вывода в схеме ПМ-ЭВМ используются еще два блока, не указанных на рис. 4.2: дешифратор адреса запоминающих устройств и дешифратор адреса устройств ввод а/выв од а. С учетом этих и всех остальных перечисленных выше дополнительных блоков общая функциональная схема ПМ-ЭВМ принимает вид, представленный на рис. 4.3. На этой схеме двойными линиями указаны шины передачи адреса (красными) и данных (зелеными), а сигналы управления — тонкими линиями. Расположение блоков в точности соответствует расположению их схем на общей электрической принципиальной схеме ПМ-ЭВМ, приведенной в приложении 2. На рис. 4.3 показаны лишь основные связи (например, отсутствуют связи по питанию).
Работа всех приведенных на рис. 4.3 блоков в отдельности описывается в гл. 6 и 7. Перейдем к рассмотрению функциональной схемы микропроцессора и организации его работы.
ОБЩИЕ ПОЛОЖЕНИЯ
Выше была рассмотрена шинная архитектура, на основе которой строятся все современные микро-ЭВМ. Составные части или блоки микро-ЭВМ подключаются к шинам адреса, данных и управления. Эти шины служат для передачи информации от одного блока к другому, причем в определенный момент времени передатчиком может быть лишь один из блоков. В гл. 6 было рассмотрено устройство микропроцессорного блока, который хотя и является "сердцем" микро-ЭВМ, но не может самостоятельно работать без блока памяти и устройств ввода/вывода. Поэтому в данной главе рассматриваются функционирование и подключение к микропроцессорному блоку блока памяти (§ 7.2), устройств вывода — светодиодов и устройств ввода — клавиатуры (§ 7.3). Далее, в § 7.4, приводится полный текст программы-монитора, которая управляет работой микро-ЭВМ, в том случае, когда она не решает какую-либо задачу и позволяет пользователю с помощью кнопок клавиатуры и индикаторов вводить, отлаживать и запускать свои программы.
ОБЩИЕ ВОПРОСЫ
В последующих главах будет подробно описано устройство и функционирование ПМ-ЭВМ и ее блоков. Для понимания этих глав необходимо познакомиться с работой отдельных микросхем, из которых построены блоки ПМ-ЭВМ.
Рис. 5.1. Внешний вид микросхемы в корпусе с двухрядным расположением выводовИнтегральная микросхема - микроэлектронное изделие, выполняющее определенную функцию преобразования и обработки сигнала и имеющее высокую плотность упаковки электрически соединенных элементов. Полупроводниковый кристалл, в объеме и на поверхности которого созданы элементы, составляющие микросхему, обычно помещается в корпус. Корпуса микросхем бывают самых разнообразных форм и изготовляются из керамики, пластмассы, металла и т. д. В ПМ-ЭВМ будут использоваться микросхемы в прямоугольных пластмассовых корпусах (рис. 5.1) с двухрядным расположением выводов. Принято обозначать выводы микросхем арабскими цифрами и буквами русского и латинского алфавитов. При этом для корпусов всех типов используется общее соглашение по обозначению номеров выводов, практически не имеющее исключений. У вывода номер один ставится маркирующая точка, которая называется ключом. Начиная от этой точки номера выводов будут возрастать при обходе их против часовой стрелки. На условных графических изображениях микросхем эти номера выводов проставляются над линиями, изображающими выводы. Принято также присваивать выводам буквенные обозначения в соответствии с названиями выполняемых выводамифункций. Существуют две системы буквенных обозначений: отечественная (буквами русского алфавита) и международная (буквами латинского алфавита). В этой книге будет применяться международная система, так как она широко используется во многих отечественных и переводных книгах по электронике и микро-ЭВМ. Выводы будут обозначаться в тексте буквами или номерами (если не принято данный вывод обозначать буквой) при описании микросхем и номерами — при описании электронных схем, чтобы избежать двусмысленности этих описаний.
ОПЕРАЦИИ
Рассмотренные в предыдущем параграфе логические операции и описываемые ниже арифметические операции реализуются в арифметическо-логическом устройстве (АЛУ) микропроцессора, на котором построена ПМ-ЭВМ. Операции выполняются над 8-разрядными двоичными числами, причем старший (левый) разряд может использоваться для представления знака числа (значение 0 указывает на положительное число, а 1 — на отрицательное).
Сложение двоичных чисел производится по тем же правилам, что и сложение десятичных чисел, за исключением того, что перенос в следующий разряд осуществляется при сумме в данном разряде, равной 2, а не 10. Пусть, например, требуется сложить два числа:
00011 010B = 26D
+ 00001 100 В = 12D
00 100 110B=38D.
При сложении крайних правых четырех разрядов имели место все четыре возможные комбинации сложения одноразрядных чисел: 0+0=0, 1 + 0 = 1, 0+1 = 1, 1+1=0. В четвертом разряде сумма равна 2D, или 10 В. Следовательно, необходим перенос единицы из четвертого разряда в пятый. Тогда в пятом разряде опять же 1 + 1 = 0 и после переноса единицы в шестой разряд сумма в шестом разряде будет 1 + 0+0=1.
Нетрудно заметить, что реализация этих операций может быть выполнена с помощью всего двух логических элементов: суммы по модулю 2, или ИСКЛЮЧАЮЩЕГО ИЛИ, реализующего функцию f9, соответствующую выходу суммы S, и элемента И, реализующего функцию f5, соответствующую выходу переноса в следующий разряд С (рис. 3.3,с). Эта схема сложения одноразрядных чисел без учета входного переноса из предыдущего разряда называется полусумматором.
Рис. 3.3. Одноразрядные суммирующие схемы: а - полусумматор; б - полный сумматор
Чтобы реализовать сложение с учетом переноса из предыдущего разряда, необходимо использовать два полусумматора, соединив их так, как показано на рис. 3.3,6. Эта схема носит название полного сумматора, или одноразрядного сумматора. Для сложения двух 8-разрядных двоичных чисел потребуется 8 одноразрядных сумматоров, соединенных таким образом, чтобы сигнал переноса передавался в каждый следующий разряд на вход Св соответствующего полного сумматора.
Сигнал переноса из самого старшего разряда запоминается в специальном триггере, называемом триггером флага переноса, для указания переполнения, имевшего место при сложении.
Поскольку, как указывалось выше, старший разряд может отводиться под знак числа, с помощью 8-разрядной суммирующей схемы можно оперировать как с любыми целыми положительными числами в диапазоне от 00 000 000 В = OD до 11 111 111 В = 25 5 D, так и с целыми положительными и отрицательными числами в диапазоне от 01 111 111 В = 127D до 10 000 000 В = -128D (в этом случае единица в старшем разряде указывает на отрицательное число, а нуль - на положительное).
Для вычитания одного числа из другого используется специальное кодовое представление отрицательных чисел, называемое дополнительным кодом. Дополнительный код (иначе, дополнение до 2) получается прибавлением единицы к младшему разряду инверсного, или обратного, кода числа (дополнения До 1). Сложение уменьшаемого с вычитаемым, представленным в дополнительном коде, приводит к результату, который получился бы при обычном вычитании. Таким образом, не нужно строить специальную схему для операции вычитания, а можно
воспользоваться все той же схемой 8-разрядного сумматора. Пусть, например, требуется выполнить вычитание: 38 D — 26 D. Перейдем к дополнительному коду для числа — 26. Инвертируя код числа 26D и прибавляя единицу в младшем разряде, получаем:
00 011 010 — прямой код 11 100 101 — обратный код
+
1
11 100 110 — дополнительный код. Теперь выполним сложение:
00100 110В + 11 100 110В
100001 100 В =12D.
В результате получили двоичный код десятичного числа 12 D и перенос из старшего разряда. Этот сигнал может быть использован при выполнении арифметических операций с 16-разрядными числами по частям в одном 8-разрядном сумматоре. При этом сначала производится сложение в дополнительном коде младших разрядов суммируемых чисел и запоминание сигнала (единицы) переноса, а затем сложение старших разрядов с учетом этого сигнала переноса.
Для выполнения операций умножения и деления специальных команд в микропроцессоре КР580ИК80А не предусмотрено. Поэтому эти операции в ПМ-ЭВМ выполняются программным путем с использованием операций сложения, сложения с дополнительным кодом числа (вычитания) и сдвига (см. § 9.1).
Арифметические операции можно производить также над десятичными числами, закодированными так называемыми двоично-десятичными кодами (двоично-кодированное представление десятичного числа). При таком представлении чисел каждая десятичная цифра кодируется четырехразрядным двоичным кодом (кодом прямого замещения, или кодом 8421). После сложения двух двоично-кодированных чисел для получения правильного результата необходимо выполнить коррекцию результата этой операции. Для этого используется блок десятичной коррекции. Он осуществляет требуемую коррекцию результата путем исполнения специальной команды "десятичной коррекции" DAA (см. список команд в приложении 1), которую необходимо выполнить после команды сложения.
ОСНОВНЫЕ БЛОКИ МИКРО-ЭВМ
Будем представлять описываемую далее микро-ЭВМ системой вложенных друг в друга блоков наподобие матрешек и открывать каждый раз лишь тот из них, который будет нужен в момент изложения соответствующего материала. Так, например, сейчас нас будет интересовать только внешний блок (собственно микро-ЭВМ), имеющий вполне определенное число входов и выходов. Следующий, расположенный внутри него блок назовем пока центральным блоком. О содержимом центрального блока и о том, как он связан с внешним блоком, будет показано чуть позже.
Основным назначением внешнего блока является преобразование дискретной информации. Общий вид простейшего преобразователя информации представлен на рис. 2.1,д. На его входы поступает исходная информация, а на выходах появляется информация, преобразованная в соответствии с законом, реализуемом в преобразователе.
В простейших преобразователях закон преобразования информации остается неизменным и применяется к любому конкретному виду информации, на работу с которой рассчитан преобразователь данного вида. Более широкими функциональными возможностями обладают преобразователи с законом преобразования, изменяемым путем подачи специальных управляющих воздействий. На рис. 2.1,6 представлен общий вид такого преобразователя, отличающегося от простейшего наличием специальных управляющих входов.
Рис. 2.1. Преобразователи информации: а - простейший; б – управляемый
Различают два типа управляемых преобразователей. В преобразователях первого типа управляющие воздействия неизменны в течение всего времени преобразования поступившей информации. В преобразователях второго типа в процессе преобразования управляющие сигналы могут изменяться, настраивая каждый раз преобразователь на выполнение какой-то одной функции. Для преобразования дискретной информации, особенно в том случае, когда сложный процесс преобразования может быть разбит на ряд этапов, каждый из которых характеризуется вполне определенной функцией преобразования, как правило, используются преобразователи второго типа.
Любую вычислительную машину можно рассматривать как управляемый преобразователь входной информации в выходную со следующей оговоркой. В процессе многоэтапного преобразования информации настройка преобразователя выполняется автоматически по заранее составленной пользователем схеме (детальной последовательности преобразований) с учетом результатов преобразований на каждом из этапов. Отсюда следуют два важных факта.
1. Пользователь, решающий на вычислительной машине свою задачу, должен заранее составить эту детальную последовательность преобразований исходных данных, называемую программой решения задачи.
Рис. 2.2. Микро-ЭВМ как преобразователь
2 Чтобы преобразование выполнялось по мере решения задачи автоматически, программа решения задачи должна быть введена в машину до начала ее работы над задачей и должна храниться там в течение всего времени вычислений. Кроме того, должна быть предусмотрена возможность хранения тех промежуточных результатов вычислений, от которых зависит настройка преобразователя (работа машины). С учетом этих замечаний схема преобразования информации с помощью машины приобретает вид, указанный на рис. 2.2,д. А наш внешний блок кроме отмеченного раньше центрального блока (ЦБ) должен содержать устройство ввода (УВ) для ввода данных и программы и устройство вывода (УБЫВ) для выдачи результатов вычислений (рис. 2.2,6). В чем же состоит работа центрального блока и какие устройства в него входят?
ОСНОВНЫЕ ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Любое преобразование кодов в машине основано на выполнении над ними логических операций. К логическим относятся операции над наборами двоичных (принимающих только значения 0 и 1) аргументов, в результате выполнения которых получают единственное значение: 0 или 1. Логические операции могут быть описаны с помощью специальных функций, принимающих 0 и 1 на наборах двоичных переменных и называемых булевыми функциями. Число всевозможных булевых функций от п переменных равно 2 и, следовательно, растет очень быстро с ростом п. Для двух переменных число всех булевых функций равно 16, а для одной переменной — 4. Функции одной и двух переменных играют важную роль в теории переключательных схем (схем, реализующих логические преобразования дискретных сигналов).
Таблица 3.2
Значение
аргумента |
Значения функций
|
|||
X | f1 | f2 | f3 | f4 |
0 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
Множество всех булевых функций от и переменных может быть описано конечной таблицей, число строк которой равно 2", а число столбцов — 22 . Например, все четыре булевы функции от одной переменной могут быть описаны табл. 3.2.
Первые две функции не требуют для своей реализации специальных аппаратурных затрат, так как первая f1 (носящая название "константа 0") соответствует разрыву цепи передачи сигнала, а вторая f2 ("константа 1") — постоянному соединению. Третья функция f3 носит название "функции повторения" (имеется в виду повторение значения аргумента), а последняя f4 — "функции отрицания", или "функции инверсии".
В электрических цепях элемент, называемый буфером и служащий для развязки цепей и согласования нагрузок, может реализовывать функцию f3, а так называемый инвертирующий буфер — функцию инверсии f4. Функцию f3 могут выполнить два последовательно включенных инвертора, т. е. элементы, реализующие функцию инверсии сигнала f4.
Это свойство инвертора использовано в схеме буфера шины адреса ПМ-ЭВМ (см. §6.3).
Рис. 3.1. Схемные обозначения буфера (а) и инвертора (б)
Рис. 3.2. Схемные обозначения:
а — элемента И; б — элемента ИЛИ; в - элемента И-НЕ; г -элемента И ЛИ-НЕ; д — элемента ИСКЛЮЧАЮЩЕЕ ИЛИ
Схемное обозначение буфера приведено на рис. 3.1,а, а инвертора — на рис. 3.1,6. Инвертор является весьма распространенным элементом логических схем, поскольку входит в состав других логических элементов, реализующих более сложные булевы функции. На схеме рис. 3.1 приведены по два схемных обозначения буфера и инвертора. Первое обозначение используется в основном в англоязычной литературе, второе — в отечественной и рекомендовано ГОСТ.
Среди всех 16 возможных булевых функций от двух переменных наибольшее распространение получили следующие пять функций, описываемые в табл. 3.3.
Функция f5 носит название функции логического умножения (конъюнкции), или функции И. Она реализуется с помощью логического элемента, называемого схемой И. Графическое обозначение этого элемента приведено на рис. 3.2,а. К особенностям работы элемента И относится то, что сигнал на его выходе, соответствующий логической единице, появляется только в том случае, если аналогичные сигналы присутствуют одновременно на его двух входах. Если же хотя бы на одном входе элемента И сигнал нулевой, выход также принимает значение 0. Понятие функции (схемы) И естественным образом расширяется на п переменных (входов).
Функция f6 носит название функции логического сложения (дизъюнкции), или функции ИЛИ. Она реализуется с помощью логического элемента, называемого схемой ИЛИ. Графическое обозначение элемента ИЛИ приведено на рис. 3.2,6. В отличие от схемы И на выходе элемента ИЛИ единичный сигнал появляется при наличии аналогичного сигнала на любом входе. И только если на обоих входах элемента ИЛИ присутствуют нулевые сигналы, на его выходе формируется тоже нулевой сигнал.Аналогичным образом вводится понятие и-входового элемента ИЛИ.