Text
                    
88721®
№/Ш- 9
Yoshifumi AMEMIYA / Yoshikazu SUEMATSU
Illustrated Introduction to Mechatronics
Introduction to Personal Computer Based Controllers
Revised 2nd Edition
Ohmsha

МИКРОКОМПЬЮТЕРНЫЕ СИСТЕМЫ УПРАВЛЕНИЯ ПЕРВОЕ ЗНАКОМСТВО ЁСИКАДЗУ СУЭМАЦУ под редакцией Ёсифуми Амэмия ОДЭКА
УДК 004.382.7 ББК 32.973.26 С89 С89 Суэмацу Ё. Микрокомпьютерные системы управления. Первое знакомство. /Пер. с яп.; под ред. Ёсифуми Амэмия. — М.: Издательский дом «Додэка-ХХ1», 2002. — 256 с.: ил. ISBN 5-94120-048-Х Книга призвана дать общее представление об областях примене- ния и возможностях микрокомпьютеров, используемых в качестве управляющих устройств различными процессами и системами. В по- пулярной форме излагаются основные понятия из области микропро- цессорной техники, программирования, цифровой электроники, ме- тоды обработки данных, возможности и конфигурация микроком- пьютеров. На примере конкретных задач управления подробно рас- смотрены принципы составления программ для микроЭВМ, системы команд, взаимодействие с периферийными устройствами. Предназначена для начинающих радиолюбителей, студентов и школьников, осваивающих основы проектирования и программиро- вания микропроцессорных контроллеров. УДК 004.382.7 ББК 32.973.26 Original Japanese edition published as Illustrated Introduction to Mechatronics. Introduction to Personal Computers Based Controllers (Revised 2nd Edition) by Yoshikazu Suematsu. Published by Ohmsha, Ltd., 3-1 Kanda Nishikicho, Chiyodaku, Tokyo, Japan. Translation rights arranged with Ohmsha, Ltd. ISBN 4-274-08675-5 (яп.) © Yoshikazu Suematsu, 1999 ISBN 5-94120-048-Х (рус.) © Издательский дом «Додэка-XXI», 2002 Все права защищены. Никакая часть этого издания не может быть воспроизведена в любой фор- ме или любыми средствами, электронными или механическими, включая фотографирование, ксеро- копирование или иные средства копирования или сохранения информации, без письменного разре- шения издательства.
www.chipdip.ru <*РЧИП ВШИНДУСТРИЯ ОПТОВАЯ БАЗА КОМПЛЕКТАЦИИ ЭЛЕКТРОННЫХ КОМПОНЕНТОВ И ПРИБОРОВ ДЛЯ РОЗНИЧНОЙ ТОРГОВЛИ и ПРОИЗВОДСТВА (095) 973-7073 (многоканальный) ОГЛАВЛЕНИЕ От редактора ....................................10 Предисловие......................................12 1. МИКРОКОМПЬЮТЕР КАК ОРУДИЕ ТРУДА...............15 1.1. Где применяются микрокомпьютеры.............15 1.2. Функции контроллеров бытовых приборов ......21 1.3. Алгоритм работы микрокомпьютера.............25 Обобщение главы .................................31 Практические задания.............................31 2. УСТРОЙСТВО МИКРОКОМПЬЮТЕРА ...................33 2.1. Внешний вид микрокомпьютера.................34 2.2. Процессор (ЦПУ) ............................38 2.3. Запоминающее устройство.....................43 2.4. Порты ввода-вывода..........................47 Обобщение главы .................................49 Практические задания ............................50 3. МИКРОКОМПЬЮТЕРНАЯ МАТЕМАТИКА..................51 3.1. Двоичная система счисления..................51 5
ОГЛАВЛЕНИЕ Сложение двоичных чисел ...........................53 Отрицательные двоичные числа (представление в дополнительном коде)..............55 Вычитание двоичных чисел ..........................57 Умножение двоичных чисел...........................59 3.2. Шестнадцатеричная система счисления................59 3.3. Двоично-десятичный код (BCD).......................62 3.4. Логические операции ...............................64 Логическое сложение (ИЛИ) .........................64 Логическое умножение (И)...........................66 Отрицание (НЕ).....................................67 Исключающее ИЛИ....................................68 Обобщение главы ........................................70 Практические задания....................................70 4. ЦИФРОВЫЕ СХЕМЫ.......................................71 4.1. Вентильные схемы...................................74 4.2. Триггеры...........................................76 Счетный триггер (Т-триггер) .......................76 D-триггер .........................................77 4.3. ТТЛ (транзисторно-транзисторные логические схемы) .78 Вентильные схемы ТТЛ...............................79 Схемы с Z-состоянием...............................83 Дешифратор ........................................84 «Защелка» .........................................85 4.4. Архитектура микрокомпьютера........................86 Соединение процессора и ЗУ.........................86 Соединение ЦПУ с портами ввода-вывода..............92 Обобщение главы ........................................95 Практические задания....................................96 5. ПРОГРАММЫ ДЛЯ МИКРОКОМПЬЮТЕРА........................97 5.1. «Лингвистические» способности микрокомпьютера......97 6
ОГЛАВЛЕНИЕ 5.2. 0 том, что такое «мнемоника» и как она заменяет машинный код.........................................101 5.3. Схема выполнения команды.........................105 Обобщение главы ......................................110 Практические задания..................................110 6. ВВЕДЕНИЕ В МАШИННЫЙ ЯЗЫК...........................111 ,6.1. Назначение регистров ЦПУ........................111 Регистры А и F для хранения результатов вычислений . . .111 Регистры общего назначения — «записная книжка» процессора.......................................114 Дополнительные регистры — «дублеры» главных регистров........................................115 Регистры — указатели адреса IX и ГУ.............116 Счетчик команд (PC) и указатель стека (SP)......116 6.2. Команда загрузки данных (Load)...................117 6.3. Команды арифметических операций..................119 Команды сложения и вычитания.....................119 Команды увеличения (INC) и уменьшения (DEC)......120 Команда сравнения (СР)...........................121 6.4. Команды логических операций .....................122 Команды «И», «ИЛИ», «Исключающее ИЛИ»......123 Команды инверсии (CPL) и изменения знака (NEG) ... .124 6.5. Команды перехода.................................125 Команды безусловного перехода (JP, JR)...........125 Команды условного перехода.......................127 6.6. Команды вызова подпрограммы и возврата из подпрограммы (CALL, RET) .........................129 6.7. Команды ввода и вывода (IN, OUT) ................134 Цикл считывания данных из порта ввода ...........134 Цикл записи в порты вывода ......................136 Обобщение главы ......................................139 Практические задания..................................139 7
ОГЛАВЛЕНИЕ 7. СОСТАВЛЕНИЕ ПРОГРАММ .............................141 7.1. Технические характеристики микрокомпьютера (аппаратные средства)................................141 7.2. Задача № 1 — поочередно зажечь определенное количество светодиодов...............................142 Программирование «по частям»....................144 Компоновка единой программы.....................148 Программа в машинных кодах и на языке ассемблера .... 149 7.3. Задача № 2 — запомнить последовательность сигналов и воспроизвести ее (вариант 1)........................153 Процедура записи в память последовательности сигналов........................................155 Процедура воспроизведения последовательности сигналов........................................157 7.4. Задача № 3 — запомнить последовательность сигналов и воспроизвести ее (вариант 2) ......................161 Запоминаем последовательность сигналов..........161 Воспроизводим последовательность сигналов, соблюдая временные интервалы ............................166 Коррекция ошибок ввода состояния выключателей (устранение «дребезга»).........................170 7.5. Задача № 4 — программа с использованием таблицы данных .................................... 173 7.6. Задача № 5 — управление шаговым двигателем......180 Как управлять шаговым двигателем................180 Импульсы управления.............................182 Описание программы..............................182 Обобщение главы .....................................186 Практические задания.................................186 8. ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА УПРАВЛЯЮЩЕГО МИКРОКОМПЬЮТЕРА......................................187 8.1. БИС портов ввода-вывода ........................187 8
ОГЛАВЛЕНИЕ 8.2. Обработка прерывания ...........................193 Понятие прерывания..............................193 Сигнал прерывания ..............................195 Программирование ПИ на обработку прерывания ....198 Задача № 6 — программа контроля механической системы.........................................201 8.3. БИС таймера-счетчика (СТС) .....................205 8.4. Преобразования цифровых и аналоговых сигналов...208 Цифро-аналоговый преобразователь (ЦАП)..........209 Аналого-цифровой преобразователь (АЦП)..........214 Задача № 7 — программа ввода в ЦПУ изменяющегося во времени аналогового сигнала..................222 Обобщение главы .....................................227 Практические задания.................................227 Приложения...........................................229 Ответы к практическим заданиям.......................244 Предметный указатель.................................251
ОТ РЕДАКТОРА Серия «Механотроника. Первое знакомство (с иллюстрациями)» издается с 1983 года. Как раз в это время общественный интерес к но- вому направлению, получившему название «механотроника»1, начал набирать силу. Именно тогда представители самых разных профессий, так или иначе связанных с техникой и естественными науками, боясь отстать от времени, ощутили потребность заполнить «пустоты» в своей эрудиции, образовавшиеся в результате стремительного развития эле- ктроники, вычислительной и микропроцессорной техники. Аудито- рии, где проводились семинары и лекции, посвященные этим дисцип- линам, были переполнены слушателями. Приступая к работе над этой серией, авторы постарались таким образом подобрать, скомпоновать и изложить материал, чтобы рассматриваемые (в общем, достаточно сложные) вопросы и про- блемы пробуждали у читателей, особенно у тех, кто впервые столк- нулся с понятием «механотроника», интерес и стремление к более глубокому их изучению и пониманию (а не наоборот!). Теперь, без ложной скромности, можно утверждать, что мы с этой задачей справились. Объективным свидетельством этого служит тот факт, что и сейчас, по прошествии двух десятилетий, книги данной се- рии не залеживаются на прилавках. За это время было продано бо- лее 100000 экземпляров. Учитывая столь очевидный интерес читателей, было принято ре- шение о выпуске второго — исправленного и дополненного — изда- ния книги. Теперь в конце каждой главы вы найдете разделы «Обоб- щение главы» и «Практические задания», в которых, для закрепле- ния материала, в очень сжатой форме изложено основное содержа- 1 Механотроника (от англ, mechatronics) — соединение оборудования с микрокомпьютерами (прим, переводчика). 10
ОТ РЕДАКТОРА ние, даны вопросы для повторения и небольшие практические за- дачи, ответы к которым приведены в конце книги. Авторы постарались не слишком перегружать книгу теоретически- ми основами такой фундаментальной науки, как механотроника, со- хранив ее главное достоинство — понятность и доступность широко- му кругу читателей, прежде всего новичкам. Было решено вернуться к более подробному и строгому изложению этих вопросов в другом бо- лее объемном издании под названием «Практическое руководство по .технике обработки сигналов»1. Дополненное издание серии «Механотроника. Первое знакомст- во» включает в серию еще 7 книг, которые, возможно, тоже заинте- ресуют читателя: • Датчики. • Микрокомпьютерные системы управления. • Электромеханические приводные устройства. • Системы управления роботами. • Цифровые системы управления. • Обработка сигналов. • САПР. • Электронные интерфейсы. Январь 1999 г. Ёсифуми Амэмия В оригинале — «Advice course» (прим, переводчика).
ПРЕДИСЛОВИЕ С тех пор как в 1973 году американская фирма «Intel» впервые опубликовала материалы о 4-разрядных микрокомпьютерах1, про- изошел весьма ощутимый прогресс как в области расширения их функциональных возможностей, так и в сфере коммерческого при- менения в самых различных областях. Сегодня трудно найти быто- вой прибор без управляющего микропроцессора. Представьте толь- ко, одно устройство может содержать около 20 микропроцессоров! Причем в распоряжении каждой японской семьи может находиться более сотни таких устройств. Одним из основных показателей совершенства микрокомпьюте- ра является число разрядов данных, которые он обрабатывает. Так, на смену 4-разрядным процессорам пришли 8-разрядные, что мгновенно привело к расширению области практического приме- нения микрокомпьютеров. Увеличение разрядности до 16, а затем до 32 воспринималось специалистами как события исключительно- го значения. В настоящее время существуют даже 64-разрядные ми- кропроцессорные системы. Появление микрокомпьютеров произвело революционный пере- ворот не только в промышленности, но и в повседневной жизни. Современный человек уже не может представить себя без бытовых удобств, пришедших в его дом вместе с приборами, начиненными хитроумной электроникой. В то же время произошло своего рода «интеллектуальное отчуждение» большинства людей от окружаю- щей их бытовой техники. Устройство приборов существенно услож- 1 В отечественной литературе вместо слова «микрокомпьютер» часто используется тер- мин «микропроцессор», имея в виду БИС, в которой помимо процессора есть также запоминающее устройство и устройства ввода-вывода (прим, редактора перевода). 12 — ' - - — - —
ПРЕДИСЛОВИЕ нилось, и «обыкновенный человек» зачастую не представляет себе принцип их работы. Кроме того, ввиду исключительно интенсивно- го развития компьютерной техники промышленные изделия, управ- ляемые с помощью микрокомпьютеров, морально устаревают, преж- де чем рядовой пользователь успеет привыкнуть к ним и основатель- но разобраться в их устройстве. В эпоху расцвета микрокомпьютер- ной техники очень важно, чтобы как можно больше людей научи- лись находить общий язык с микропроцессорными системами. Эта книга ориентирована на читателей, которые либо совсем не знакомы с вычислительной техникой и цифровыми электронными схемами, либо имеют некоторый опыт работы с микрокомпьютера- ми и языками программирования типа Фортран или Бейсик. Цель написания книги состояла в том, чтобы вооружить читателя базо- выми знаниями, необходимыми для понимания основных функций микрокомпьютерных управляющих систем. Книга состоит из восьми глав. В первой главе сравниваются прин- ципы построения и области применения микрокомпьютеров и уни- версальных компьютеров «большого формата». На конкретных при- мерах рассматриваются функции управляющего микрокомпьютера в окружающих нас технических устройствах. Во второй главе читатель познакомится с внутренней «архитектурой» микрокомпьютера, узна- ет, какие существуют типы микрокомпьютеров, из каких основных блоков они состоят и какие функции способны выполнять. Третья и четвертая главы содержат основные сведения из обла- сти техники цифровых схем, а также азы двоичной системы счис- ления. Изучив пятую главу, мы узнаем, каким образом происходит загрузка программы, и как она выполняется микрокомпьютером. В шестой главе мы познакомимся с принципами машинного про- граммирования и основными командами, применяемыми для уп- равления микрокомпьютером, рассмотрим назначение наиболее часто используемых команд языка ассемблера для 8-разрядного микрокомпьютера. В седьмой главе приведены 5 несложных задач, на примере кото- рых мы научимся составлять программы для микрокомпьютера. Восьмая глава посвящена описанию принципа работы и функций больших интегральных схем (БИС), реализующих так называемый 13
ПРЕДИСЛОВИЕ параллельный интерфейс — устройство, обеспечивающее обмен данными и взаимодействие компонентов микрокомпьютера. Зна- чительная часть главы посвящена цифро-аналоговым и аналого- цифровым преобразователям, осуществляющим взаимодействие микрокомпьютера с внешними устройствами. При подготовке первого издания книги, увидевшей свет в 1983 году, авторы постарались поставить себя в положение человека, впервые узнавшего о микрокомпьютерных управляющих устройст- вах. Учитывая интерес, проявленный читателями к этой книге, бы- ло предпринято ее второе издание, исправленное с учетом послед- них достижений в рассматриваемой области, и дополненное разде- лами «Обобщение главы» и «Практические задания» по каждой гла- ве. Авторы книги будут считать, что их труд не пропал даром, если число ее читателей, разбирающихся в устройстве микрокомпьюте- ра, станет хотя бы на одного больше. В заключение хотелось бы выразить благодарность заслуженно- му профессору университета г. Нагоя Ёсифуми Амэмия, под руко- водством которого создавалась книга, художнице Такеути Томоко, с иллюстраций которой начинаются все главы, а также сотрудникам издательства «Омша» — непосредственным исполнителям техниче- ской части проекта. Автор
МИКРОКОМПЬЮТЕР КАК ОРУДИЕ ТРУДА Уникальное орудие труда 1.1. ГДЕ ПРИМЕНЯЮТСЯ МИКРОКОМПЬЮТЕРЫ Шутники утверждают, будто бы двигателем технического прогресса была и остается человеческая лень. Какие только приспособления и уст- ройства не изобрели люди, стремясь максимально облегчить себе повседневную жизнь! Самые удачные изобретения составляли «ин- теллектуальную собственность» отдельных племен, обеспечивая им существенные преимущества перед соперниками в борьбе за выжи- вание. Секреты изготовления орудий труда и правила пользования ими (выражаясь современным языком, инструкции по эксплуата- ции) тщательно оберегались и передавались из поколения в поколе- ние. В ходе эволюции человечество накопило огромный техничес- кий потенциал, благодаря которому его физические возможности возросли тысячекратно. Компьютер — это тоже рабочий инструмент, однако совершенно уникальный. Изобретенный во второй половине 20 века, он, в отли- чие от всех прежних изобретений, увеличил производительность в сфере умственного труда. За считанные секунды он способен про- изводить вычисления, с которыми человеку не справиться и за всю Жизнь, причем достоинства компьютера не ограничиваются только этим. Можно не соглашаться с прогнозами фантастов, предсказы- вающих появление электронных роботов, наделенных всеми функ- циями человеческого мозга, а значит, способных заменить самого 15
1. Микрокомпьютер как орудие труда 1.1. Где применяются микрокомпьютеры человека. Однако отрицать достижения в области компьютерной электроники сегодня не осмелится никто. Лишь несколько десятков лет отделяет нас от момента появле- ния первого компьютера. За этот сравнительно короткий период времени компьютерная техника проникла во все области деятель- ности современного человека. С помощью компьютеров мы мо- жем, не выходя из дома, заказать билеты на самолет или поезд, уви- деть по телевизору трансляцию Уимблдонского турнира по тенни- су через спутник связи. Результаты незаметной для глаза работы компьютеров можно обнаружить во всем, что нас окружает. Они обеспечивают работу банкоматов и безопасность движения поез- дов метро, требуемый режим приготовления блюда в микроволно- вой печи и управление тормозной системой автомобиля. Лишь благодаря компьютеру в наш обиход вошли такие понятия, как компьютерное проектирование, компьютерная графика, компью- терная музыка, компьютерные игры. Для некоторых экран ком- пьютера стал окном в виртуальный мир, заменяющий им мир ре- альный. Миллионы компьютеров, соединенных в единую глобаль- ную сеть Интернета, образуют небывалое по своим возможностям коммуникационно-информационное поле, в котором человек ощущает себя частью мирового сообщества. Своей столь стреми- тельной карьерой компьютер обязан прежде всего кардинальным достижениям в электронике. Первые компьютеры — электронно- вычислительные машины (ЭВМ) — были построены на электрон- ных лампах и представляли собой достаточно громоздкие сооруже- ния. Для размещения одной ЭВМ требовалось отдельное помеще- ние, а то и целое здание! Каждый новый этап развития компьютер- ной техники был связан с переходом на более совершенную эле- ментную базу: от лампы к транзисторам, от транзисторов к интег- ральным схемам (ИС), а затем к большим интегральным схемам (БИС). В результате появилось компактное электронное устройст- во, известное всем под именем «компьютер», в миллион раз пре- восходящее первые ЭВМ по быстродействию и производительнос- ти. Именно БИС положили начало технологии производства мик- рокомпьютер ов. Несмотря на малые размеры, микрокомпьютер по своим функ- циональным возможностям почти не отличается от большой ЭВМ. Принципиальное различие между микрокомпьютером и универ- сальным (большим) электронно-вычислительным комплексом со- стоит в их основном назначении и особенностях применения. Производители универсальных вычислительных машин выпус- кают компьютеры стоимостью от нескольких десятков тысяч до не- скольких миллионов йен1, комплектуя их всеми современными ап- паратными и программными средствами, включая практические руководства для всевозможных приложений. Составление собст- венных программ для универсального компьютера осуществляется на каком-либо из языков программирования так называемого вы- сокого уровня (Бейсик, Фортран, Кобол, Паскаль и т. п.). Напротив, при работе с микрокомпьютером владение языками высокого уровня окажется недостаточным. Дело в том, что ни мик- рокомпьютер, ни универсальная ЭВМ не являются полиглотами. Они понимают только свой собственный так называемый «машин- ный язык». Специальная программа — компилятор — выполняет роль переводчика, превращая текст программы, составленной пользователем, скажем, на языке Фортран, в последовательность команд, выполняемых затем компьютером. Компилятор в обяза- тельном порядке входит в комплект поставляемого программного обеспечения для универсального компьютера. При работе с микро- компьютером вы будете вынуждены общаться с ним на понятном ему языке. Некоторые области применения больших универсальных ЭВМ и микрокомпьютеров показаны на схеме (Рис. 1.1). Универсальные ЭВМ (Рис. 1.1а) нашли широкое применение в тех областях, где требуется большой объем памяти и высокая производительность. В микрокомпьютерной технике (Рис. 1.16) выделяют два основных направления — контроллеры (управляющие микрокомпьютеры) и микропроцессоры, используемые для обработки данных. Микропроцессорное направление предполагает использование микрокомпьютеров, главным образом, в качестве вычислительных блоков измерительных приборов, бытовых, инженерных или офис- 1 Одна тысяча японских йен эквивалентна 7.8 долл. США (по курсу ЦБ РФ на 15.05.2002 г. — прим, редактора перевода). 16 17
1. Микрокомпьютер как орудие труда Научно-технические расчеты Финансы, коммерция, \ хозяйственная деятельность/ " Математические расчеты, статистика, математическое моделирование, расчет орбит искусственных спутников Земли Расчет заработной платы, банковское дело, логистика, электронная коммерция Автоматизация производства, системы компьютерного проектирования (CAD) Компьютерные сети, спутниковая связь, оплата телефонных переговоров Бронирование мест, спутниковые навигационные системы, организация диспетчерских служб, оперативный анализ, управление городским транспортом Тренажеры, дистанционное обучение, поисковые системы и банки информации, электронные учебные пособия Компьютерные методы обследования, анализ истории болезни ------------------------ Бытовые электроприборы Изделия и услуги массового Л (кондиционер, швейная машина потребления j и т.п.), досуг и развлечения *•---------—-----------' (игровые автоматы, аудио- и видеотехника и т.п.) —^АМикрокомпьютеры\- ['У'р роли контроллеров]" Промышленные установки еЛ приборы ) Измерительная техника, Л испытательное оборудованиеJ Автомобильная промышленность Микрокомпьютеры в качестве микропроцессоров Вычислительные системы Станки и оборудование с цифровым управлением, роботы, управление технологическими процессами Измерительные приборы, испытательные стенды, экспериментальные установки Системы управления автомобильными двигателями, автоматические бензоколонки Машинки для счета купюр, кассовые аппараты Офисные компьютеры, вычислительная техника, разработка программ Графические дисплеи, графические интерфейсы Рис. 1.1. Области применения больших ЭВМ (а) и микрокомпьютеров (б) 18
1.1. Где применяются микрокомпьютеры них калькуляторов, а также в компьютерных терминалах. Микро- компьютеры в роли контроллеров призваны улучшить эксплуата- ционные характеристики систем и механизмов. Судя по примерам, приведенным на схеме, эта область применения гораздо ближе к окружающему нас быту. Контроллеры управляют работой кондици- онера, электрической швейной машины, микроволновой печи, иг- рового автомата, системы бортовой автоматики автомобиля и т. д. Совершенствование ассортимента бытовой техники вызывает неу- клонное расширение области применения микрокомпьютерных систем. При относительно невысокой цене контроллеры способны существенно улучшить качество товаров массового потребления. Слово «контроллер» означает управляющее устройство, причем в смысле более широком, чем это принято в теории систем автома- тического управления (Рис. 1.2). В автоматике и телемеханике под управлением понимают действия, направленные на коррекцию от- клонений системы от требуемого состояния. Слово «управление» в выражении «микрокомпьютер управления» часто используется в смысле «контроль», «наблюдение». Так, контроллеры, применяе- мые в промышленных системах, могут осуществлять контроль за работой склада, предприятия, отслеживать потоки городского транспорта, производить мониторинг окружающей среды, регист- рировать аномальные явления. Чтобы самому смонтировать и настроить систему управления какого-либо устройства на основе недорогого, но «смышленого» микрокомпьютера, необходимо обладать хотя бы минимумом зна- ний и навыков. Во-первых, вам потребуются некоторые сведения из области схемотехники, в частности, основы применения больших интегральных схем. Во-вторых, придется овладеть навыками со- ставления программ на языке компьютерных команд. В противном случае ваш микрокомпьютер, который, в принципе, «может все», окажется бесполезной вещью. В отличие от универсальной ЭВМ, для которой аппаратные и программные средства создают специа- листы фирмы-изготовителя, ваш микрокомпьютер «оживет» лишь при условии, что вы сами разработаете для него и аппаратные, и программные средства, а также приобретете и грамотно смонтируе- те необходимые интегральные схемы и другие электронные и меха- нические компоненты. 19
1. Микрокомпьютер как орудие труда Рис. 1.2. Различные значения слова «управление» / Так как \ же приготовить домашнее блюдо под названием «микрокомпьютер» ? В определенном смысле работу с универсальным компьютером можно уподобить обеду в дорогом ресторане: для того чтобы насла- диться трапезой, достаточно овладеть манерами поведения за сто- лом и знать названия блюд. Тогда про микрокомпьютер можно ска- зать, что это «блюдо, приготовленное по домашнему рецепту». Его создание начинается с подбора ингредиентов и кухонного инвента- ря. Затем нужно тщательно выдержать температурный режим. В за- вершение следует добавить соответствующие специи, придающие кушанью неповторимый вкус, отражающий вашу индивидуальность в кулинарных пристрастиях. Наша книга для тех, кто предпочитает вкус- ную, здоровую и, что немаловажно, недорогую домашнюю пищу разорительным обедам в рес- торане. Однако прежде чем мы в полной мере овладеем кулинарным искусством, потребуется определенная доля упорства и терпения. То же можно сказать в отношении техники создания 20
1.2. Функции контроллеров бытовых приборов микрокомпьютерных систем — без знаний и практики вы не до- стигнете качества, соответствующего вашему взыскательному вкусу. Основная цель написания книги заключалась в том, чтобы по- мочь читателю сделать первый — самый трудный — шаг в увлека- тельный мир микрокомпьютеров, вносящих гармонию и порядок в работу разнообразных приборов и устройств, окружающих совре- менного человека на работе, в быту и на отдыхе. Необходимо помнить, что в отли- чие от универсальной ЭВМ микро- ФУНКЦИИ КОНТРОЛЛЕРОВ компьютер предназначен для управ- БЫТОВЫХ ПРИБОРОВ леНИЯ конкретным техническим уст- ройством. Попробуем выяснить на примере наиболее распространенных окружающих нас приборов, какую роль выполняют встроенные в них контроллеры и какие новые эксплуатационные качества приоб- ретают эти приборы, если снабдить их микрокомпьютерами. К числу постоянно используемых бытовых устройств, дополнен- ных микрокомпьютерами, относятся кондиционеры. Работа кон- троллера, управляющего кондиционером, заключается в своевре- менной подаче команд «включить»/«выключить». В зависимости от состояния на входах контроллера одна из этих команд подается на реле, контакты которого принимают состояние «замкнуто» или «ра- зомкнуто». На Рис. 1.3 представлена схема, поясняющая назначе- ние входов и выходов контроллера бытового кондиционера, выпол- няющего различные функции. Главная задача кондиционера — контроль температуры в поме- щении. Он работает следующим образом. Система автоматическо- го регулирования сравнивает установленное значение температу- ры с показаниями датчика температуры в помещении и в соответ- ствии с ними подает команды на включение или выключение вен- тилятора и нагревателя. Кроме того, если установлен режим «спо- койной ночи», таймер через час автоматически повысит установ- ленную температуру на 3°С (а при включенной системе отопления Понизит ее на 5°С). Заданная температура в помещении будет ав- томатически поддерживаться таким образом, чтобы скомпенсиро- вать ночное понижение температуры наружного воздуха. В задачу 21
1. Микрокомпьютер как орудие труда 1.2. Функции контроллеров бытовых приборов Вход Контроллер Выход • Автоматическое регулирование температуры ( Выполняемые функции Реле включения электропитания Датчик температуры в помещении • Регулирование производи- тельности вентилятора • Таймер • Задержка повторного запуска • Управление температурой в помещении по заданной программе • Отсчет времени работы фильтра • Регулирование воздушного потока С Установка температуры Реле включения вентилятора новными функциями контроллера являются управление скоростью приводного электродвигателя и контроль положения швейной иг- лы. Функциональная схема встроенного контроллера швейной ма- шины представлена на Рис. 1.4. На входы контроллера подаются сигналы датчиков, установлен- ных на механических частях швейной машины. Контроллер должен обеспечивать устойчивое вращение двигателя во всем рабочем диа- пазоне скоростей независимо от колебаний напряжения и частоты источника питания, а также от изменения нагрузки, которая зави- Вход Контроллер Выход Выполняемые функции Реле системы отопления Рис. 1.3. Функциональная схема контроллера бытового кондиционера контроллера входит также автоматическое регулирование воздуш- ного потока и отработка функции задержки (3 минуты) при по- вторном запуске. С помощью дисплея контроллер осуществляет индикацию температуры в помещении. Он оснащен счетчиком времени работы вентилятора. По истечении 100 часов эксплуата- ции фильтра загорается контрольная лампа, извещая о необходи- мости его чистки или замены. Таким образом, относительно недо- рогой встроенный микрокомпьютерный контроллер превращает обычное механическое устройство в современный бытовой при- бор, способный выполнять «тонкие» функции, которые до недав- него времени могли быть реализованы ценой затрат, несопостави- мых с достигаемым при этом уровнем комфортности. В качестве еще одного примера рассмотрим работу встроенного контроллера швейной машины. В то время как в бытовом кондици- онере исполнительные устройства выполнены в виде реле, управля- емых с помощью команд «включено»/«выключено», в швейной ма- шине привод осуществляется с помощью электродвигателя, а ос- 22 — - — - - - ^Датчик скорости Переключатель режима работы Синхросигнал источника питания переменного тока Датчик исходного положения Датчик положения иглы ^Датчик вращения • Управление ^Переключатель каретки^ • Автоматическая установка в режим прямой строчки • Установка режимов прямой и фигурных строчек, индикация выбранного режима • Регулирование скорости электродвигателя • Автоматическое распознавание частоты напряжения (50 или 60 Гц) в сетях электропитания 'Устройство управления положением \иглыг Схема запуска двигателя Шаговый двигатель Устройство управления рисунком строчки Индикатор выбранного рисунка строчки • Обеспечение устойчивой работы электродвигателя Переключатель скорости Автоматизация режима штопки Пусковой выключатель ( Переключатель выбора \ I рисунка строчки Г Устройство отключения при обрыве нити Рис. 1.4. Функциональная схема контроллера швейной машины ---------=---- 23
1. Микрокомпьютер как орудие труда - 1.3. Алгоритм работы микрокомпьютера сит от плотности и количества слоев прошиваемой ткани. Для вы- полнения этой задачи схема управления скоростью вращения дви- гателя производит анализ состояния на входах контроллера, кото- рое определяется совокупностью сигналов, поступающих с датчика скорости, датчика синхросигнала источника питания и датчика по- ложения переключателя скорости. В соответствии с этими сигнала- ми выдаются команды в схему управления электродвигателем. При установке одной из 20 стандартных фигурных строчек на индикато- ре высвечивается название строчки. Одновременно приводится в движение шаговый двигатель выбора строчки и электромагнитный механизм горизонтального перемещения иглы в соответствии с вы- бранным рисунком шва. Контроллер следит также за тем, чтобы двигатель останавливался, когда игла находится в крайнем верхнем положении. Дополнительные функции контроллера: автоматичес- кая остановка двигателя при случайном нажатии любой из кнопок во время вращения, установка режима прямой строчки при включе- нии питания и т. д. Итак, швейная машина, оснащенная микрокомпьютером, поми- мо свойств обычного механического прибора, приобрела также и преимущества электронного устройства. В данном случае удачно используется способность контроллера анализировать входные сиг- налы и выполнять такие новые функции, реализация которых сред- ствами одной только механики была бы невозможной. В результате такой модернизации швейная машина стала изделием, потреби- тельская стоимость которого существенно возросла. Рассмотрев приведенные выше примеры с бытовым кондици- онером и швейной машиной, мы выяснили, что в качестве вход- ных устройств управляющий микрокомпьютер использует вы- ключатели, потенциометры и всевозможные датчики. Выходны- ми устройствами являются реле, светодиоды, дисплейные пане- ли, электромеханические приборы (соленоид, электродвигатель и т. д.). Если вы собираетесь приспособить микрокомпьютер для управления каким-либо прибором, вы должны сами подобрать и смонтировать устройства ввода-вывода в соответствии с решае- мой задачей. 1.3. АЛГОРИТМ РАБОТЫ МИКРОКОМПЬЮТЕРА Попробуем теперь сравнить работу микрокомпьютера с деятельностью мозга человека. Как было показано в предыдущем разделе, микрокомпью- тер, встроенный в бытовой прибор, получает сигналы от входных устройств (подобно тому, как человек получает внешнюю информацию, пользуясь своими пятью органа- ми чувств). Соответствующим образом обработав эти сигналы, он посылает команды на выходные устройства (аналогично тому, как человеческий мозг подает управляющие сигналы своим «исполни- тельным устройствам» — рукам и ногам). Микрокомпьютер, работу которого мы сравнили с работой чело- веческого мозга, следует заранее заложенной программе. Он анали- зирует ситуацию исходя из информации, поступающей в виде вход- ных сигналов, и формирует предусмотренные программой команды для исполнительных устройств. Любая программа представляет со- бой последовательность команд, выполняемых компьютером, кото- рые, в конечном счете, приводят к решению поставленной задачи. Такой порядок выполнения операций, который задается и реализу- ется для решения поставленной задачи и учитывает все возможные варианты событий, часто называют алгоритмом. Микрокомпьюте- ры используются в самых различных областях. Один и тот же мик- рокомпьютер может совершать различные действия в зависимости от содержания программы. Именно качество программы определя- ет эффективность работы микрокомпьютера. Как было сказано выше, в зависимости от характера команд, составляющих программу, микрокомпьютер осуществляет анализ и обработку информации. Рассмотрим подробнее, каким образом организован процесс выполнения программы. Для этого, исполь- зуя общепринятую систему записи алгоритмов, попытаемся про- следить последовательность работы двух микрокомпьютеров, один из которых управляет игровым автоматом, а другой занима- ется куда более серьезным и ответственным делом — управляет системой впрыска топлива автомобильного двигателя. Самые первые игровые автоматы типа «сокровищница» были сконструированы из механических элементов и не имели управля- ющего электронного процессора. Впоследствии появились модер- 24 25
1. Микрокомпьютер как орудие труда Основные знаки алгоритма схемы Вход или выход Условный переход Предварительные операции Арифметическое выражение Процедура Начало или окончание Линия О Адрес перехода низированные модификации автоматов, оснащенных управляю- щим микрокомпьютером, без существенной переделки механичес- кой схемы. Модернизированные автоматы устанавливались в игро- вых залах вместе с автоматами старого типа и отличались от них на- личием небольшой коробочки, прикрепленной к тыльной стенке корпуса, в которой и размещался микрокомпьютер. На Рис. 1.5 по- казаны схемы алгоритмов работы игровых автоматов обоих типов. Сначала проследим алгоритм работы игрового автомата первой модификации (Рис. 1.5а). Если шары попадают в определенное от- верстие, имеющее профиль в форме буквы V, подается напряжение Небольшое замечание по поводу работы игрового автомата Изменение программы встроенного микрокомпьютера игрового автомата или перенастройка электронной схемы без согласия фирмы-изготовителя преследуются по закону. И если из автомата вдруг перестали выпадать призовые шары, хотя еще накануне они выскакивали почти безостановочно, вряд ли причиной тому сбой в работе электронной схемы. Думаю, что все дело в системе подачи шаров... 26
1.3. Алгоритм работы микрокомпьютера Рис. 1.5. Алгоритмы работы игрового автомата (а) первой модификации и (б) модернизированной версии на электромеханическое устройство, которое открывает большую Крышку, расположенную в нижней части автомата. Одновременно включается «музыкальная шкатулка», оповещая играющего о том, что шар попал в отверстие V. Эта последовательность выполняется 27
1. Микрокомпьютер как орудие труда до тех пор, пока шар не попадет в отверстие S, расположенное в центре большой крышки. После этого крышка закрывается, шка- тулка замолкает, а игра прекращается. Алгоритм модернизированной версии игры выглядит следую- щим образом (Рис. 1.56): если шар попадает в отверстие V, располо- женное в центре игрового автомата, «оживает» модель самолета, сложенные крылья которого начинают попеременно раскрываться и закрываться в горизонтальной плоскости. Количество таких дви- жений задано программой и равно 18. Если в ходе игры шар снова попадает в отверстие V, то число движений крыльев самолета увели- чивается еще на 18. Верхний предел количества таких циклов равен десяти (это соответствует 180 движениям крыльев). Теперь рассмотрим алгоритм работы микрокомпьютера, управ- ляющего системой впрыска топлива инжекторного автомобильного двигателя. Электронные системы впрыска топлива, впервые разра- ботанные фирмой «BOSCH», известны в Японии под названием EFI или EGI. В модернизированных устройствах «ECCS» и «TCCS», помимо управления впрыском топлива, осуществляются такие функции, как регулирование момента зажигания, оборотов холос- того хода и т. д. На Рис. 1.6 показан алгоритм выполнения основной функции «TCCS» (компьютерной системы управления фирмы «Toyota»), Речь идет о системе впрыска топлива (EFI). Сравнивая сигналы различных датчиков с данными, записан- ными в памяти микрокомпьютера, система впрыска топлива опре- деляет момент включения инжектора. На 6-цилиндровом двигателе команды впрыска топлива поочередно подаются на 6 инжекторов. Длительность базового импульса впрыска вычисляется исходя из числа оборотов двигателя и количества всасываемого воздуха. При вычислении используются арифметические операции умножения и деления. Далее длительность базового импульса корректируется пу- тем увеличения на некоторую величину, которая определяется раз- личными дополнительными факторами, действующими в данный момент. В результате учета этих факторов устанавливается опти- мальная длительность импульса впрыска. Например, при запуске холодного двигателя добавляется определенное количество впрыс- киваемого топлива с учетом сигнала, поступающего от датчика тем- пературы охлаждающей жидкости. Величина этой добавки, завися- 28
1.3. Алгоритм работы микрокомпьютера Рис. 1.6. Алгоритм работы системы впрыска топлива инжекторного двигателя автомобиля Щей от конкретных параметров двигателя, предварительно записы- вается в память микрокомпьютера. В процессе прогрева двигателя величина поправки длительности импульса впрыска постепенно Уменьшается. В режиме повышенной нагрузки длительность импульса впры- ска увеличивается пропорционально числу оборотов двигателя. 29
1. Микрокомпьютер как орудие труда 1.3. Алгоритм работы микрокомпьютера Таким образом осуществляется компенсация эффектов, связан- ных с повышенной нагрузкой во время разгона автомобиля и при запуске холодного двигателя. Аналогично при работе стартера длительность импульса впрыска определяется с учетом температу- ры охлаждающей жидкости и напряжения аккумуляторной бата- реи. Автолюбителям хорошо известно, что для облегчения запуска двигателя при низкой температуре требуется обогатить топливно- воздушную смесь. В режиме запуска стартер потребляет достаточно большой ток (порядка 200 А), вследствие чего напряжение аккумулятора пони- жается и реакция электромеханической системы инжектора ухуд- шается. Увеличив время впрыскивания, автоматическая система компенсирует уменьшение объема впрыскиваемого топлива, обус- ловленное понижением бортового напряжения. Итак, микрокомпьютер, контролирующий электронную систему впрыска топлива, определяет оптимальную длительность импульса впрыска, используя заложенные в его память функции двух и трех переменных. Учет индивидуальных характеристик двигателя позво- ляет такой системе реагировать на любые изменения условий его работы. Система управления впрыском топлива, описанная выше, ис- пользует сигналы датчиков разных типов и выдает команды на раз- личные исполнительные устройства. В качестве основных датчиков применяются датчик расхода воздуха, определяющий количество воздуха, всасываемого через впускной коллектор двигателя, терми- сторный датчик температуры охлаждающей жидкости, датчики оборотов холостого хода и повышенной нагрузки, датчик положе- ния и скорости перемещения педали акселератора, определяющий скорость равномерного движения и состояние разгона автомобиля, датчик температуры всасываемого воздуха, датчик числа оборотов двигателя, Х-датчик, обнаруживающий уровень повышенного со- держания кислорода в выхлопных газах. В число исполнительных устройств входят прецизионный инжектор, система зажигания, раз- личные контрольные лампы и т. п. В качестве примера рассмотрим работу одного из датчиков — датчика положения акселератора (Рис. 1.7), соединенного с педа- лью газа. Рис. 1.7. Устройство датчика положения акселератора Без датчиков и \ исполнительных механизмов не I va , обойтись... ЙУ? х V4-— Датчик снабжен двумя парами контактов — в цепи сигналов ре- жима холостого хода и режима разгона. Эти контакты замыкаются, когда педаль газа находится соответственно в крайнем верхнем и крайнем нижнем положениях. При перемещении педали газа в ин- тервале между крайними положениями в сигнальную цепь переда- ются прямоугольные импульсы напряжения с амплитудой от А! до А2. Усовершенствованный датчик положения акселератора может по скорости чередования этих им- пульсов определить также и ин- тенсивность разгона. Благодаря постоянному про- грессу в области разработки дат- чиков разнообразного примене- ния сфера использования микро- компьютеров в системах управле- ния автомобильными двигателя- ми неуклонно расширяется. В этой главе мы показали, что микрокомпьютер является эффек- тивным средством улучшения функциональных характеристик тех- нических устройств самого различного назначения. В наибольшей степени достоинства микрокомпьютеров проявляются при приме- 30 31
1. Микрокомпьютер как орудие труда нении их в качестве управляющих устройств или, иначе говоря, контроллеров. На конкретных примерах мы познакомились с осо- бенностями работы микрокомпьютеров в некоторых наиболее рас- пространенных электромеханических системах. Из этих примеров нам стало понятно, что контроллер выполняет роль «диспетчера», следящего за тем, чтобы выходные устройства работали в соответст- вии с сигналами входных устройств, обеспечивая выполнение ос- новных функций конкретной системы. Контроллер работает строго по заложенной в него программе. На основании сказанного можно заключить: искусство составления программ, оптимальным обра- зом организующих взаимодействие микрокомпьютера с входными и выходными устройствами, — ключ к освоению техники управле- ния с помощью микрокомпьютера. ОБОБЩЕНИЕ ГЛАВЫ 1. Микрокомпьютеры применяются главным образом в качестве кон- троллеров. 2. Основное назначение микрокомпьютеров — улучшение эксплутаци- онных характеристик различных технических устройств. Это дости- гается путем обработки сигналов датчиков и формирования команд, передаваемых на исполнительные устройства. Практические задания 1) Приведите пример применения микрокомпьютера в качестве контрол- лера. 2) Поясните, какие функции выполняет микрокомпьютер в электронной системе впрыска топлива инжекторного автомобильного двигателя. 32
2 УСТРОЙСТВО МИКРОКОМПЬЮТЕРА Интересно, что у него внутри ? Распаковав вновь приобретенный электробытовой прибор, ком- пьютер или другое относительно сложное устройство, мы, прежде чем начнем пользоваться им, усаживаемся за изучение инструкции по эксплуатации. В этом документе изложены сведения о назначе- нии изделия, о том, как им пользоваться, как подготовить его к ра- боте, проверить его рабочие характеристики, приведены гарантий- ные обязательства фирмы-изготовителя. Не ознакомившись с со- держанием инструкции, мы не сможем в полной мере оценить и ис- пользовать потребительские качества изделия. Все это относится и к микрокомпьютеру, с которым мы имеем дело впервые. Однако для того чтобы досконально разобраться в «инструкции по эксплуатации» микрокомпьютера, необходимо приложить определенные усилия. Когда речь идет, например, о ви- деомагнитофоне, совсем не обязательно представлять себе в деталях его принцип действия и, тем более, внутреннее устройство. Чтобы пользоваться этим прибором, достаточно знать, как его подклю- чить, а также хорошо представлять себе назначение основных орга- нов управления. «Прост в обращении» — фраза, наиболее часто встречающаяся в рекламе товаров. В действительности так называ- емая «простота в обращении» возможна лишь в том случае, когда изделие имеет достаточно ограниченную область применения. Эта характеристика, как следует из предыдущей главы, не может быть отнесена к микрокомпьютеру, область применения которого ис- ключительно широка. Алгоритм программы и состав всего ком- -- —===^=—= 33 2-2
2. Устройство микрокомпьютера плекса внешних устройств определяется характером задачи, кото- рую пользователь собирается решать с помощью данного микро- компьютера. На примере контроллеров мы убедились в том, что та- кие задачи могут быть весьма разнообразными. Следовательно, что- бы применить микрокомпьютер как средство решения конкретной технической проблемы, пользователь сам должен составить про- грамму, по которой он будет работать, и организовать его взаимо- действие с внешними системами. Для этого необходимо знать уст- ройство микрокомпьютера и представлять назначение его функци- ональных блоков. Этим вопросам и посвящена настоящая глава. 2.1. ВНЕШНИЙ ВИД МИКРОКОМПЬЮТЕРА Миниатюрный микрокомпьютер принципиально ничем не отличается от большой ЭВМ. Значит, так же как и ЭВМ, он включает в себя 5 основных блоков, которые показаны на Рис. 2.1. ‘А 5 главных блоков компьютера V, ( Устройство < ввода Принимает информацию, поступающую извне Компьютер ЦПУ Выполняет арифметические и логические операции Осуществляет обработку сигналов Устройство вывода у Передает информацию на внешние устройства Хранит данные и программы Рис. 2.1. Пять основных блоков компьютера Функциональное назначение пяти основных блоков компьютера следующее: 1. Арифметико-логическое устройство (АЛУ) выполняет арифме- тические и логические операции с данными. 34
2.1. Внешний вид микрокомпьютера 2. В запоминающем устройстве (ЗУ), или «памяти», хранятся вы- полняемая компьютером программа и данные, с которыми он работает. 3. Устройство ввода получает внешнюю информацию. 4. Устройство вывода передает данные на внешние устройства. 5. Устройство управления обеспечивает согласованную работу всех блоков компьютера в соответствии с заложенной про- граммой. АЛУ и устройство управления — это «сердце» компьютера, на- зываемое центральным процессором или центральным процессор- ным устройством (ЦПУ). Обычно понятие «компьютер» в первую очередь включает в себя процессор и запоминающее устройство. На Рис. 2.2 для сравнения показан внешний вид процессора и ЗУ микрокомпьютера и большой ЭВМ. Рис. 2.2. Внешний вид процессора и запоминающего устройства микрокомпьютера и ЭВМ 35
2. Устройство микрокомпьютера Процессор и устройство памяти большой ЭВМ имеют размеры бытовой микроволновой печи. Процессор и запоминающее устрой- ство микрокомпьютера помещаются в стандартные корпуса боль- ших интегральных схем (БИС). Компьютер, состоящий из процес- сора и ЗУ, выполненных на одном кристалле (то есть, по технологии БИС), называется микрокомпьютером. С чем ассоциируется в воображении читателя слово «компью- тер»? Наверное, многие из вас представят себе микрокомпьютер 3-го типа, наиболее часто рекламируемый в популярных печат- ных изданиях (Рис. 2.3). Однокристальный микрокомпьютер (Одноплатный микрокомпьютер Дисплей с дисководами Рис. 2.3. Так выглядят микрокомпьютеры 36
2.1. Внешний вид микрокомпьютера Микрокомпьютер этого типа составляет одно целое с устройст- вами ввода-вывода. Он сконструирован в виде единой завершенной системы, называемой персональным компьютером (ПК). В качест- ве устройств ввода-вывода используются клавиатура, мышь, дис- плей (на основе электронно-лучевой трубки или жидкокристалли- ческой панели), дисководы гибкого и жесткого дисков, дисковод компакт-дисков, принтер, сканер, модем и/или сетевая плата и т. д. Как отмечалось в первой главе, современному человеку уже трудно представить свое существование без персонального компьютера, используемого в производственной деятельности как средство для выполнения вычислительных операций, составления и учета кон- торской документации, инженерного проектирования, художест- венно-оформительских работ, как средство коммуникации и поис- ка информации и т. д. О применении персональных компьютеров в быту рассказывать на страницах этой книги не имеет смысла, по- скольку любой школьник в достаточной мере представляет себе их колоссальные возможности в сфере приятного времяпровождения. Нас же в данный момент интересуют микрокомпьютеры, применя- емые в качестве управляющих устройств — контроллеров. Сущест- вует два типа микрокомпьютеров, различающихся по степени инте- грации (Рис. 2.3). Микрокомпьютер первого типа представляет со- бой большую интегральную схему, в которой процессор, запомина- ющее устройство и порты ввода-вывода (устройства, обеспечиваю- щие обмен данными между процессором и устройствами ввода-вы- вода) выполнены на одном кристалле. Поэтому такие микрокомпь- ютеры часто называют однокристальными. В микрокомпьютере второго типа процессор, ЗУ и порты ввода- вывода выполнены в виде отдельных микросхем и смонтированы на одной печатной плате. Соответственно микрокомпьютеры данного типа получили название одноплатных. Часто такие микрокомпью- теры бывают оснащены блоком кнопок управления и устройством отображения информации (дисплеем). Система управления технического устройства бытового или про- мышленного назначения может быть сконструирована на основе контроллера, выполненного в виде микрокомпьютера любого из Двух типов. Здесь нужно руководствоваться практическими сообра- жениями (наличие свободного места, стоимость комплектующих . - 37
2. Устройство микрокомпьютера элементов, сложность объекта управления, наличие навыков и тех- нической возможности изготовления печатных плат и т. д.). В быто- вых кондиционерах, швейных машинах, видеомагнитофонах, му- зыкальных центрах традиционно используются однокристальные микрокомпьютеры, а в системах управления двигателем автомоби- ля, игровых приставках — одноплатные. Однокристальный микрокомпьютер весьма удобен в практичес- ком применении, не занимает много места, не требует большого объема монтажных работ. В то же время его ресурсов (производи- тельность, объем памяти) может быть недостаточно для управления сложным техническим устройством. В последнем случае приходится использовать одноплатный микрокомпьютер, более пригодный для выполнения сложного комплекса операций контроля и управления. Однако стоимость системы, построенной на основе одноплатного микрокомпьютера, как правило, оказывается выше. Есть еше одно обстоятельство, ограничивающее применение одноплатных микро- компьютеров. В то время как ассортимент однокристальных микро- компьютеров очень широк, и покупатель всегда может выбрать мо- дель, оптимально соответствующую его конкретной задаче, модель- ный ряд одноплатных компьютеров ограничен. Кроме того, они ча- сто обладают функциями, которые повышают их стоимость, но мо- гут не пригодиться пользователю. Программирование обоих типов микрокомпьютеров можно производить с помощью персонального компьютера. Теперь рассмотрим принцип работы и функциональные характе- ристики основных компонентов микрокомпьютера — процессора, запоминающего устройства и портов ввода-вывода. Одной из основных характеристик 2я2« "1. процессора является разрядность дан- П ЦсССОР (ЦПУ) НЫх, обрабатываемых его арифметико- логическим устройством. Разрядность процессора соответствует одному из значений следующего ряда на- туральных чисел: 4, 8, 12, 16, 32, 64, ..., 2П. Соответственно процес- соры бывают 4-разрядными, 8-разрядными и т. д. Так, 8-разрядным называется процессор, который оперирует с 8-разрядными двоич- ными числами. В наиболее распространенных в настоящее время 38 — - — — --- ------------------------ 1
2.2. Процессор (ЦПУ) персональных компьютерах последних поколений используются 32-разрядные и 64-разрядные процессоры. Процессоры различаются не только по количеству разрядов об- рабатываемых данных, но и по другим важным параметрам (напри- мер, по быстродействию), которые определяются теми технологи- ческими и схемотехническими решениями, которые заложены в них фирмами-производителями. В числе ведущих фирм этой обла- сти следует отметить такие, как «Intel», «Motorola», «Zilog», «AMD», «Atmel», «Microchip» и др. Различные типы процессоров различают- ся, в частности, системами команд управления, которые использу- ются при составлении программ. В этой главе мы в качестве приме- ра подробно рассмотрим устройство так называемого «совершенно- го 8-разрядного процессора» серии Z80 («Zilog»), охватывающего системы команд процессоров серий 8080 («Intel») и 6800 («Motorola»). На Рис. 2.4 показаны внешний вид и назначение выводов про- цессора Z80. 40 39 38 □ А, □ А8 D6C 10 +5 в q и 12 Do С 14 □ Аб □ А3 JGND □ RFSH INT Z' Сигналы NMI ( управления ]< HALT v У WAIT [reset BUSRO BUSAK ф +5 В GND INTC 16 - NMIC " _ HALT С MREQ С IORQE 17 18 19 20 36 35 34 33 32 31 30 29 28 27 26 Ь RESET 25 ZJBSRQ 24 □ WAIT 23 3 BUSAK 22 □ WR 21 3RD MREQ IORQ RD WR тг, RFSH 19 0 20 0 30 2IO 32 22 0 и 27 35 28 16 0 38 39 170 40 18 1 24 26 О 4 5 25 23 14 6 О ИО 1 29© 10 13 А0 А А А1 А4 'л5 д’ •А-10 '411 '4|2 л13 414 А15 Шина адреса О 4 О О наиболее важные сигналы ЦПУ280 а б Схема выводов («цоколевка») БИС микропроцессора Z80 Рис. 2.4. Внешний вид (а) и назначение выводов (б) процессора Z80 39
2. Устройство микрокомпьютера Процессор представляет собой большую интегральную схему, размещенную в корпусе с 40 выводами (симметрично расположен- ными по обеим сторонам), каждый из которых имеет определенное назначение. Ниже мы дадим пояснения, касающиеся функцио- нального назначения выводов процессора Z80. Если при чтении этой главы вы встретите некоторые незнакомые вам слова и обо- значения, не заостряйте на этом внимание — постарайтесь усвоить основные понятия. Из 40 выводов интегральной схемы 16 относят- ся к адресной шине, 8 выводов — к шине данных; 6 выводов имеет устройство управления; 5 выводов связаны с процессором; 2 выво- да относятся к контроллеру шины процессора. Остается еще 3 вы- вода: общий вывод (GND), вывод питания +5 В и вывод генерато- ра тактовой частоты. Теперь рассмотрим функции выводов процессора более подроб- но. Как было сказано выше, под адресную шину отводится 16 вы- водов. Каждый из них предназначен для одного разряда двоичного числа, обозначающего номер ячейки памяти. Этот номер обычно называют «адресом». Рассчитаем максимальное количество ячеек памяти, к которым можно получить доступ по адресной шине про- цессора Z80. При наличии 16 выводов, каждый из которых соответ- ствует одному разряду двоичного числа, общее число комбинаций составляет 216 = 65536. Итак, по адресной шине осуществляется доступ к информации, хранящейся в ЗУ. Шина данных — это совокупность выводов, пред- назначенных для перемещения данных во время операций, выполня- емых процессором. Процессор использует шину данных, когда счи- тывает информацию из ЗУ, а результат вычислений возвращает в ЗУ или выводит на внешние устройства. Поскольку в нашем случае ши- на данных имеет 8 выводов, Z80 представляет собой 8-разрядный процессор. Кроме того, шина данных ис- пользуется при обмене данными между внешним устройством и процессором. Из 6 выводов, связанных с устройством управления, 4 выполняют наиболее важ- ные функции. Для их обозначения приня- ты следующие сокращения (по названию соответствующих сигналов): MREQ IORQ, RD, WR. 40
2.2. Процессор (ЦПУ) Сигнал MREQ (Memory REQuest) предназначен для запроса данных из устройства памяти и вырабатывается в момент обраще- ния процессора к запоминающему устройству. IORQ (I/O ReQuest) — сигнал обращения процессора к портам ввода-вывода^ Сигнал RD (ReaD) генерируется в момент считывания процес- сором данных из портов ввода-вывода или ЗУ. Сигнал WR(WRite) вырабатывается при записи данных из про- . цессора в порты ввода-вывода или в ЗУ. По сигналам устройства управления мы можем узнать, какое действие производит процессор в настоящее время. Например, ес- ли на выводах процессора одновременно активизируются сигналы MREQ и WR, это означает, что в данный момент процессор соби- рается записать данные в запоминающее устройство. Сигналы, которые можно обнаружить на выводах контроллера процессора, выполняют функции управления работой процессора. Так, по сигналу RESET («сброс» или «перезапуск») осуществляется перезапуск процессора, то есть переход к началу управляющей про- граммы. Два других сигнала — INT и NMI — служат для прерыва- ния программы, выполняемой процессором в настоящий момент, и перехода к выполнению другой программы. Одним из основных сигналов, необходимых для работы процес- сора, является сигнал тактовой частоты, представляющий собой периодическую последовательность импульсов. Максимальная тактовая частота процессоров Z80 базовой модификации составля- ет 2.5 МГц (2.5-106 Гц). Помимо базовой модификации процессора, существует модификация Z80A, тактовый генератор которой рабо- тает с повышенной тактовой частотой 4 МГц. Питание процессора Z80 осуществляется от источника постоянного напряжения +5 В (относительно общего вывода, называемого также землей). Откло- нение напряжения от номинального значения не должно превы- шать ±5%. Из 40 выводов процессора Z80 мы рассказали о назначении ос- новных выводов. Не уяснив функций сигналов, проходящих по этим выводам, невозможно понять взаимосвязь отдельных блоков процессора между собой и с внешними устройствами. На Рис. 2.46 эти выводы отмечены кружками. 41
2. Устройство микрокомпьютера Теперь давайте «заглянем» под крышку корпуса процессора и уз- наем, что находится внутри. Для этого обратимся к функциональ- ной схеме процессора Z80, представленной на Рис. 2.5. Функцио- нальная схема — это схема, которая поясняет взаимодействие от- дельных частей какой-либо системы. Управление Управление Управление Шина данных системой ЦПУ шиной ЦПУ D0 ...D7 Шина адреса А0-А15 Рис. 2.5. Функциональная схема процессора Z80 Процессор состоит из АЛУ, группы регистров процессора, ре- гистра команд, а также устройства управления. Регистр — это уст- ройство для временного хранения данных. Например, регистр ко- манд хранит коды команд (например, сложение) до выполнения этой команды процессором. В регистр А, часто называемый «акку- мулятором», помещается результат вычислений, произведенных АЛУ. Процессор Z80 имеет целый ряд других регистров, предназ- наченных для временного хранения данных в ходе выполнения 42
2.3. Запоминающее устройство программы. Дешифратор команд определяет, какое действие дол- жен выполнить процессор по команде, код которой помещен в ре- гистр команд. Устройство управления процессором представляет собой схему, которая синхронизирует выполнение команд с помощью импуль- сов тактового генератора и передает сигналы управления в процес- сор или из процессора на внешние устройства. В пятой главе будет дано более подробное описание особенностей работы каждого из деречисленных блоков при выполнении конкретных команд про- граммы, загруженной в память процессора. Здесь же вполне доста- точно приведенных кратких сведений об основных функциональ- ных блоках процессора. 2.3. ЗАПОМИНАЮЩЕЕ УСТРОЙСТВО Назначение запоминающего устрой- ства или просто «памяти» — хранить данные и программы, определяющие порядок работы микрокомпьютера. За- поминающее устройство, используемое в управляющем микро- компьютере, выполнено в виде полупроводниковых интегральных схем. Существуют различные виды устройств памяти. Классифи- кация таких устройств, используемых в микрокомпьютерах, пред- ставлена на Рис. 2.6. Технология приборов, способных хранить информацию, насчи- тывает несколько десятков лет. За это время появилось огромное количество разнообразных устройств, различающихся по принципу действия, применяемым материалам и конструкции. Каждое из них имеет свои преимущества и недостатки. Начнем с того, что про- ведем линию разграничения между запоминающими устройствами, в которые можно записывать данные, и устройствами, которые этим свойством не обладают. Для устройств первого типа (1а) принято обозначение RWM (Read/Write Memory), что в переводе на русский язык означает счи- тывающее и записывающее запоминающее устройство. Устройства второго типа (16), работающие только на считывание Данных, по-английски обозначаются как ROM (Read Only Memory). По-русски они называются постоянными (содержание которых не Изменяется) запоминающими устройствами (ПЗУ). 43
f 2. Устройство микрокомпьютера - — — . — - а) ЗУ, работающее б) ЗУ с функцией только на считывание перезаписи Время запроса данных постоянно «;зу с произвольной выборкой б) ЗУ с последовательным доступом а) ПЗУ б) ОЗУ Рис. 2.6. Классификация устройств памяти В качестве второго признака, разделяющего ЗУ на две другие группы, следует упомянуть способ обращения к содержимому запо- минающего устройства. В первую группу (2а) попадают устройства памяти с произволь- ной выборкой (ЗУПВ), чаще называемые оперативными запомина- ющими устройствами (ОЗУ). Английское обозначение — RAM (Random Access Memory). ОЗУ устроено таким образом, чтобы про- цессор мог непосредственно обратиться к любой ячейке памяти по ее адресу. ЗУ, выполненные на интегральных схемах и используемые в микрокомпьютерах в качестве основной памяти, почти всегда от- носятся к устройствам с произвольной выборкой. Напротив, ЗУ на магнитных лентах применяются в качестве вспомогательных уст- 44
2.3. Запоминающее устройство ройств памяти, так как характеризуются низким быстродействием. Они относятся ко второй группе (26) — запоминающим устройст- вам с последовательным доступом SAM (Sequential Access Memory). В отличие от ОЗУ обращению к какой-либо определенной ячейке памяти предшествует поиск этой ячейки на диске или ленте. При этом продолжительность запроса зависит от удаленности ячейки от считывающей головки. Очень важной характеристикой ЗУ, определяющей специфику их применения, является способность сохранять данные после от- ключения от источника питания. По этому признаку устройства па- мяти разделяются на: (За) энергонезависимые (Non-Volatile Memory, NVM) и (36) энергозависимые (Volatile Memory, VM) запо- минающие устройства. Итак, мы произвели общую классификацию запоминающих ус- тройств по трем признакам. Если ограничиться устройствами памя- ти в интегральном исполнении для микропроцессоров, то достаточ- но разделить их всего на две группы: 1. ОЗУ (RWM, RAM, VM). 2. ПЗУ (ROM, RAM, NVM). Итак, ОЗУ — это запоминающее устройство, обладающее следу- ющими свойствами: возможность считывать и записывать данные; время поиска ячейки памяти постоянно и не зависит от ее адреса; данные, хранящиеся в ЗУ, не сохраняются при отключении от ис- точника питания. ПЗУ не позволяет записывать данные, а только считывает данные; время поиска ячейки памяти не зависит от ее ад- реса; информация сохраняется после отключения ЗУ от источника питания. В свою очередь, в группе ПЗУ можно выделить самостоятельный класс устройства памяти — перепрограммируемое (или репрограм- мируемое) ПЗУ (ППЗУ). Английское обозначение — EPROM (Erasable Programmable ROM). Пользователь может при необходи- мости изменить содержимое памяти ППЗУ Однако в отличие от за- поминающего устройства типа RWM, предназначенного для много- кратной оперативной перезаписи данных, перепрограммирование ППЗУ осуществляется посредством специального прибора, называ- емого «программатором». Прежде чем изменить содержимое запо- минающего устройства типа перепрограммируемого ПЗУ (ППЗУ), 45
2. Устройство микрокомпьютера мы должны стереть информацию, хранящуюся в памяти, облучив кристалл ультрафиолетовыми лучами через маленькое окошко в центральной части корпуса схемы (Рис. 2.7). Такой тип ППЗУ назы- вают ППЗУ с ультрафиолетовым стиранием или стираемое ППЗУ (СППЗУ — EPROM). Имеются также ППЗУ с электрическим сти- ранием (электрически стираемое ППЗУ, ЭСППЗУ — EEPROM или E2PROM). Рис. 2.7. Два типа ПЗУ ПЗУ целесообразно применять в системе, процессор которой со- держит программу или данные, не изменяющиеся в течение всего срока службы изделия, т. е. их программируют однократно и назы- вают однократно программируемое ПЗУ (ОППЗУ — OTPROM). К ним относятся и масочные ПЗУ, в которые информация записыва- ется еще на этапе изготовления ПЗУ с использованием технологи- ческих фотошаблонов — так называемых масок. ППЗУ используется, когда мы хотим заложить в изделие воз- можность последующего изменения программы или данных, на- пример в случае модернизации или перепрофилирования его функ- ционального назначения. Изготовители интегральных схем памяти для изделий массового производства обычно записывают програм- му и данные в ПЗУ, с тем чтобы мы, неопытные пользователи, не могли случайно их изменить. 46
2.4. Порты ввода-вывода Если мы разрабатываем программу для контроллера, мы должны позаботиться о том, чтобы при отключении источника питания программа сохранялась. Для этого необходимо занести ее в посто- янное запоминающее устройство. Вот почему все окружающие нас бытовые приборы, управляемые электронным контроллером, осна- щены ППЗУ, в котором записана управляющая программа. Таким образом, составив программу управления контроллером (о том, как это делается, мы узнаем в пятой главе), мы должны с помощью про- грамматора занести ее в ППЗУ, после чего мы можем использовать запрограммированную интегральную схему в качестве ЗУ контрол- лера. В четвертой главе будет рассказано, как соединить запомина- ющее устройство с центральным процессором. 2.4. ПОРТЫ ВВОДА-ВЫВОДА Порты ввода-вывода — это промежу- точное звено в процессе обмена данными между микрокомпьютером и устройства- ми ввода-вывода. Результаты вычисле- ний, производимых процессором, а также данные, записанные в па- мять, передаются на внешние устройства через порт вывода. И на- оборот, передача информации в процессор с внешних устройств происходит через порт ввода. Процесс обмена данными между процессором и устройствами ввода-вывода (Рис. 2.8) можно сравнить с работой почты. Порт вывода подобен почтовому ящику из тех, что установлены на улице или в почтовом отделении, а порт ввода — ящику для пи- сем и газет на первом этаже многоквартирного дома. Когда процес- сору нужно передать информацию куда-либо, он записывает эту информацию на «почтовую открытку» и «опускает» ее в «почтовый ящик». Процессор регулярно проверяет свой ящик для писем и га- зет и, если обнаружит в нем какую-либо корреспонденцию, забира- ет ее. Таким образом, роль почтового ящика и ящика для писем и газет заключается в хранении почтовых отправлений до прихода Почтальона или получателя соответственно. Порт ввода-вывода в микрокомпьютере совмещает функции обоих почтовых ящиков: он хранит данные, подлежащие отправке, и полученные данные до тех Пор, пока они не будут востребованы соответственно процессором Или внешними устройствами. Чтобы повысить степень надежности 47
2. Устройство микрокомпьютера Рис. 2.8. Назначение портов ввода-вывода хранения информации, применяют устройства, называемые схема- ми «защелки», которые как бы «запирают» порты ввода-вывода до прихода сигнала перезаписи содержания ЗУ (работа одной из раз- новидностей таких интегральных схем подробно описана в четвер- той главе). На Рис. 2.9 приведен пример соединения микрокомпью- тера с некоторыми внешними устройствами. Различные датчики, сигналы которых используются для управле- ния техническими устройствами (переключатели, потенциометры, термодатчики, датчики давления, фотодиоды и т. д.), подключаются к порту ввода. Исполнительные приборы и механизмы (электродви- гатели, обмотки реле и соленоидов, электролампы, светодиоды и т. п.) подключаются к порту вывода. Подключение каждого из этих ус- тройств к портам микрокомпьютера осуществляется через интер- фейс. Интерфейс располагается между двумя и более устройствами (в 48
2.4. Порты ввода-вывода Рис. 2.9. Соединение микрокомпьютера с внешними устройствами нашем случае — между микрокомпьютером и внешними устройства- ми ввода-вывода) и осуществляет согласование форматов сигналов. Итак, в этой главе мы научились отличать однокристальный мик- рокомпьютер от одноплатного, ознакомились с устройством микро- компьютера, выяснили, какие функции выполняют его основные блоки — процессор, запоминающее устройство, порты ввода-вывода. Обобщение главы 1. Компьютер состоит из пяти основных блоков — АЛУ, устройства уп- равления, запоминающего устройства, устройства ввода, устройства вывода. 2. Центральный процессор состоит из АЛУ, выполняющего арифмети- ческие и логические операции, и устройства управления, осуществ- ляющего передачу сигналов на внешние устройства. 3. Одноплатный микрокомпьютер принципиально ничем не отличает- ся от персонального компьютера. На его плате расположены процес- сор, запоминающее устройство, порты ввода-вывода. 49
2. Устройство микрокомпьютера 4. Интегральные схемы запоминающих устройств подразделяются на два основных типа — ПЗУ, ОЗУ. Запоминающее устройство, называ- емое ПЗУ, работает только на считывание данных; время обращения к ячейке памяти ПЗУ постоянно и не зависит от ее адреса; данные в ПЗУ сохраняются после отключения от источника питания. ОЗУ мо- жет как считывать, так и записывать данные, время обращения к ячейке памяти ОЗУ постоянно и не зависит от ее адреса; данные не сохраняются после отключения ОЗУ от источника питания. 5. Порты ввода-вывода предназначены для временного хранения дан- ных при обмене между процессором и внешними устройствами. Практические задания 1) Компьютер какого типа называют микрокомпьютером? 2) Что представляют собой адресная шина и шина данных? 3) Чем ППЗУ отличается от других типов ПЗУ? 4) Для чего микрокомпьютеру необходимы порты ввода-вывода?
3 МИКРО- КОМПЬЮТЕРНАЯ МАТЕМАТИКА Таблица умножения из одних лишь «ноликов» и «единичек» В предыдущей главе мы узнали, из чего состоит микрокомпью- тер, изучили назначение его основных функциональных блоков. Те- перь нам предстоит выяснить, каким образом программа считыва- ется из памяти, как производятся вычисления и каким образом ре- зультаты вычислений заносятся в ЗУ или выводятся на порты вво- да-вывода. В этой и последующих главах будут изложены принципы выпол- нения математических действий с двоичными числами и необходи- мые начальные сведения из области цифровой схемотехники, чтобы вы могли наглядно представлять себе содержание основных вычис- лительных операций, а также процессы, происходящие при этом в микрокомпьютере. 31 В повседневной жизни мы посто- ДВОИЧНАЯ СИСТЕМА янно пользуемся различными числа- СЧИСЛЕНИЯ ми’ практически никогда не задумы- ваясь над тем, что при этом нам при- ходится оперировать двумя различными системами счисления. Лишь в тех редких случаях, когда требуется, например, перевести 24 минуты в 0.4 часа, мы наконец вспоминаем, что помимо деся- тичной в нашем обиходе имеется и шестидесятеричная система, с помощью которой мы отсчитываем время. Создавая цифровые вы- числительные машины, человек «учит» их работать в одной или не- скольких системах счисления. Все современные ЭВМ оперируют 51
3. Микрокомпьютерная математика цифровой информацией, представ- ленной в двоичной системе. Это оз- начает, что числа, обрабатываемые компьютером, можно представить с помощью всего лишь двух цифр. Принято записывать их с помощью цифр «О» и «1». Двоичная система выбрана не случайно. Дело в том, что самыми помехоустойчивыми, а следователь- но, надежными в работе, оказались электронные устройства, имеющие лишь два устойчивых состояния. Кроме того, двоичная система иде- ально подходит для вычисления функций логических переменных, поскольку последние могут прини- мать лишь два значения: «истинно» и «ложно». Давайте поупражняемся в представлении чисел в двоичной системе. В качестве учебного посо- бия можно использовать пальцы руки (Рис. 3.1). Будем считать, что согнутый палец обозначает цифру «О», а выпрямленный палец — «I». Большой палец будет обозначать цифру младшего разряда в двоич- ной системе, а мизинец — цифру старшего разряда. Повторите дей- ствия, показанные на рисунке. Кстати, это может быть полезным физическим упражнением на раз- витие координации движений пальцев. Как вы сами можете убе- диться, с помощью пяти пальцев можно по порядку представить все числа в пределах пяти двоичных Рис. 3.1. С ПОМОЩЬЮ пяти пальцев руки можно представить все числа в пределах пяти двоичных разрядов 52
3.1. Двоичная система счисления разрядов, то есть от 0 до 31 в десятичной системе. х—-—-—х Электронные цифровые устройства, работаю- С К0/Дш^меет ) щие в двоичной системе счисления, используют ( «полярные» свойства различных материалов, со- +—ir—— стояния электрических компонентов и схем. Циф- ' рам «О» и «1» можно, например, поставить в coot- ветствие высокий или низкий уровень напряже- ния, разомкнутое или замкнутое положение кон- тактов реле, противоположные направления намаг- ниченности отдельных участков магнитной ленты | или диска и т. п. Для того чтобы «заставить» электрическое устройство работать непосредственно с десятичными числами, нам пришлось бы наде- лить его способностью находиться в 10 различных состояниях, со- ответствующих цифрам от 0 до 9. Принципиально это возможно, но связано с определенными техническими проблемами. К тому же при необходимости представления результатов вычислений в при- вычной для пользователя десятичной системе можно произвести все необходимые преобразования, используя математические спо- собности самого процессора, работающего в «привычной для него» двоичной системе. Давайте на примере 8-разрядного процессора Z80 попытаемся понять принцип, по которому процессор выполняет арифметичес- кие действия с двоичными числами. Сложение двоичных чисел На Рис. 3.2а и 3.26 приведены два примера сложения 8-разряд- ных двоичных чисел. Сложение выполняется «в столбик», для чего слагаемые записывают строго одно под другим. Складывают числа, начиная с младшего разряда, то есть справа налево. При этом руко- водствуются простыми правилами: 0 + 0 = 0, 0+1 = 1; при сложе- нии двух единиц переносят единицу в старший разряд (1 + 1 = 10). (Совсем как в школе, не так ли?) На рисунке справа для сравнения показано сложение тех же чисел в десятичной системе счисления. При сложении двух чисел в примере, продемонстрированном на Рис. 3.2а, результат представляет собой 8-разрядное двоичное чис- ло (т. е. число, меньшее 28—1 = 255). Сложение чисел во втором 53
3. Микрокомпьютерная математика а « « 5S >s >S >s 25 +24 + 21 + 2° 26 +24 + 23 + 2° 27 +23 + 22 5 1 +18 9 1 4 О о +) О О 1 1 О 1 1 О 1 О О 1 О 1 1 Разряд переноса 6 1 0 0 1 0 0 0 1 +110 11110 1 27+24+ 2° 145 27 + 25 +24 + 22 3 + 22 + 2° I—=£>-+) 1 8 9 3 3 4 в Так происходит сложение двух чисел в АЛУ Регистры ЦПУ Регистр А 11111111 +> 00000001 8-разрядный результат |0 0 0 00 0 0 0| операции ГГ||О 0 0 0 0 0 0 0 1 Результат переноса [ —------------------------- разряда Регистр признаков F Рис. 3.2. Сложение двух 8-разрядных двоичных чисел 54
3.1. Двоичная система счисления примере (Рис. 3.26) дает в результате 9-разрядное двоичное число. Единица в 9-м разряде появилась в результате переноса из старше- го разряда. Это означает, что результат операции сложения над дву- мя 8-разрядными числами не всегда является 8-разрядным числом. Таким образом, нельзя быть уверенным, что полученное 8-разряд- ное число представляет правильный результат сложения. Чтобы получить правильный результат, нужно зарегистрировать факт пе- реноса из старшего разряда, и в этом случае прибавить к получен- ному 8-разрядному числу величину, равную 28 = 256. В центральном процессоре микрокомпьютера сложение 8-разрядных чисел осуществляется в АЛУ, а результат помещается в регистр А (аккуму- лятор). Одновременно, в зависимости от того, про- изошел перенос в старшем разряде или нет, в 0-й разряд регистра F посылается соответственно циф- ра «1» или «0». Пример выполнения такой опера- ции показан на Рис. 3.2в. Процессор представляет конечный результат сложения двоичных чисел в виде содержимого двух регистров А и F (регистр признаков), находящихся внутри процессора (бо- лее подробное описание регистров процессорной памяти будет дано в шестой главе). Отрицательные двоичные числа (представление в дополнительном коде) Чтобы выразить отрицательные числа, в микрокомпьютере ис- пользуется представление двоичных чисел в дополнительном коде. Число, представленное в дополнительном коде, равно по величине, Но противоположно по знаку исходному числу. Следовательно, сум- ма этих чисел должна быть равна 0. Используя операцию сложения, можно проверить, является ли рассматриваемое число представле- нием исходного числа в дополнительном коде. Порядок представле- ния числа в дополнительном коде показан на Рис. 3.3. Слева показа- на операция вычитания для 8-разрядного двоичного числа, а справа ~~ для соответствующего 2-разрядного десятичного числа. Процедура представления в дополнительном коде для обеих си- стем одна и та же: обозначим основание системы счисления через а 55
3. Микрокомпьютерная математика ^===^== 3.1. Двоичная система счисления Представление чисел в дополнительном коде Двоичное число (а = 2) Десятичное число (а = 10) В каждом I 0 0 1 0 1 10 1 из восьми разрядов LI I I I I I I I заменяем «0» на «1», и наоборот 110 10 0 10 ] @ Исходное число 2 4 1| Цифру каждого разряда вычитаем из (а-]) Прибавляем I 1110 10 0 111 (з) Число в дополнительном вое число в любой из строчек, можно убедиться в том, что сумма от- рицательного и положительного 8-разрядных чисел одной абсолют- ной величины равна 0. Поскольку представление десятичных чисел + 128 и -128 с помощью 8-разрядного двоичного числа со знаком имеет один и тот же вид, принято считать, что +128 нельзя пред- ставлять с помощью 8-разрядного двоичного числа со знаком. По- этому положительные десятичные числа, которые можно предста- вить 8-разрядными двоичными, находятся в диапазоне от 1 до 127, а отрицательные числа — от —1 до —128. Таким образом, старший разряд 8-разрядного положительного числа имеет значение 0, а старший разряд отрицательного числа равен 1. По этому признаку легко отличить отрицательное число от положительного. ГП looooooool Перенос Значения восьми разряда младших разрядов при сложении числа с его дополнительным кодом равны 0 коде □ | 0 0 I Перенос Значения двух младших разрядов равны 0 Рис. 3.3. Представление двоичного и десятичного числа в дополнительном коде Положительные числа (1...127) 00000001 (= 1) 0 0 1 1 0 0 1 1 (=51) 0 1111111 (=127) гг *\ Не является двоичным числом со знаком Отрицательные числа (-1..-128) 1 1 1 1 1 1 1 1 (=-1) 110 0 110 1 (=-51) 1 0 0 0 0 0 0 1 (=-127) 1 0 0 0 0 0 0 0 (=-128) *\ Старший разряд отрица- тельного числа равен 1 (в двоичной системе а — 2, а в десятичной а = 10). Сначала в каждом разряде числа необходимо вычесть значащую цифру из (п-1). Да- лее, чтобы получить представление числа в дополнительном коде, к полученному промежуточному результату следует прибавить 1. Для проверки сложим исходное число с его представлением в дополни- тельном коде. Результат сложения исходного числа и его представ- ления в дополнительном коде действительно равен 0 (если не учи- тывать перенос единицы в старшем разряде). Таким образом, мы убедились, что число, представленное в дополнительном коде, рав- но исходному числу по величине, но имеет противоположный знак. Двоичное число, представляющее отрицательное число в допол- нительном коде, называется двоичным числом со знаком. На Рис. 3.4 приведены примеры двоичных чисел со знаком. Сложив левое и пра- Рис. 3.4. 8-разрядные двоичные числа со знаком Вычитание двоичных чисел Арифметико-логическое устройство, выполняющее в процессо- ре функции «калькулятора», умеет выполнять только одну арифме- тическую операцию — сложение. Поэтому, чтобы произвести вычи- тание, вычитаемое число сначала представляется в виде отрица- тельного числа, а затем складывается с уменьшаемым числом. На- пример, вычитание десятичного числа 51 из числа 89 будет осуще- ствляться сложением двух чисел: 89 + (—51). На Рис. 3.5а показано, Как эта операция выполняется в двоичной системе. В левой части изображена операция вычитания одного двоично- го числа из другого. В правой части это действие заменено сложени- 57 56
3. Микрокомпьютерная математика а Вычитание одного двоичного числа из другого В процессоре вычитание выполняется как операция сложения 0 1 0 1 1 0 0 1 (=891 -) _ o.„i.j..j(= 51) О 1 О 1 1 О О 1 (=89) +ХОХОХХХХ (=-5i) 0 0 1 0 О 1 1 0 (=38) б Заменяем вычитаемое отрицательным числом путем представления его в _ Перенос разряда дополнительном коде i’ij 0 0 1 0 0 1 1 0 (=38) \ 8-разрядный результат \\ операции вычитания игнорируется Заем разряда ] 1 i 0 0 1 1 0 0 1 1 (=511 -) Г о jXlXXX a j X (= 89) О О 1 1 0 0 1 1 (=51) +Xl.qXiXX jXlXj (=-89) 110 110 10 (=-38) Oj 1 1 0 1 1 0 1 0 (=-38) 8-разрядный результат вычисления Рис. 3.5. Вычитание двоичных чисел ем с отрицательным числом, которое является представлением вы- читаемого в дополнительном коде. Результат обеих операций оди- наков. На Рис. 3.56 показан пример, когда результат вычитания де- сятичных чисел (51—89) отрицательный. В этом случае при вычита- нии одного двоичного числа из другого занимается единица стар- шего разряда вычитаемого (заем разряда). Результатом операции является отрицательное двоичное число со знаком, представленное в дополнительном коде. При сложении с вычитаемым, представ- ленным в дополнительном коде (см. правую часть рисунка), мы по- лучим тот же результат. Итак, операция вычитания осуществляется процессором как операция сложения уменьшаемого с вычитаемым, представленным в дополнительном коде. 8-разрядный результат вычислений поме- щается в регистр А процессора. 58
3.2. Шестнадцатеричная система счисления Умножение двоичных чисел Попробуем выполнить операцию умножения двоичного числа на 2. Порядок выполнения этой операции показан на Рис. 3.6а. Приятной неожиданностью оказывается то, что таблица умноже- ния двоичных чисел состоит всего лишь из трех коротких строчек: 0x0 = 0; 0x1 = 0; 1x1 = 1. При умножении на 2 мы получили чис- ло, которое образуется в результате сдвига каждого разряда исход- ного двоичного числа влево на 1 разряд. Аналогично при умноже- нии на 4 происходит сдвиг каждого разряда влево на 2 разряда, при умножении на 8 — на 3 разряда и т. д. А что происходит при умно- жении, например, на 6? На Рис. 3.66 показана операция умноже- ния двоичного числа на 6 (второй множитель также представлен в двоичном виде). На Рис. З.бв показан другой способ умножения на 6, который заключается в сложении результатов двукратного и че- тырехкратного увеличения исходного числа. Итак, рассмотрев приведенные выше примеры, мы выяснили, что умножение двоичных чисел осуществляется с помощью опера- ций сложения и сдвига всех разрядов исходного числа влево. 3.2. При всех указанных выше досто- ШЕСТНАДЦАТЕРИЧНАЯ инствах двоичные числа имеют один СИСТЕМА СЧИСЛЕНИЯ досадный недостаток — необходи- мость использования большого ко- личества разрядов. Преодолеть это неудобство позволяет примене- ние шестнадцатеричных чисел. В шестнадцатеричной системе каж- дый разряд может быть представлен шестнадцатью цифрами. Одна- ко, поскольку в нашем распоряжении имеется лишь десять арабских Цифр (0...9), для обозначения остальных шести цифр принято поль- зоваться буквами латинского алфавита от А до F. Так, одиннадцатой Цифре соответствует буква А, двенадцатой — В, тринадцатой — С, четырнадцатой — D, пятнадцатой — Е, шестнадцатой — F. Если мы посмотрим на Табл. 3.1, где показано соотношение между первыми шестнадцатью числами в двоичной, десятичной и Шестнадцатеричной системах, то увидим, что одному разряду шест- надцатеричного числа соответствуют 4 разряда двоичного числа. Следовательно, для представления 8-разрядных двоичных чисел до- статочно всего лишь двух шестнадцатеричных разрядов, что значи- тельно сокращает запись числа. 59
3. Микрокомпьютерная математика Умножение двоичного числа на 2 | 0 0 1 1 0 1 0 1 |(= 53) X 1 о (=2) 00000000 0 0 110 10 1____ | 0 1 1 0 1 0 1 0 | (=106) Все разряды сдвигаются влево на 1 позицию Умножение двоичного числа на 6 0 0 0 1 1 0 1 1 (=27) х 1 1 0 (=6) 00000000 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1 | 1 0 1 0 0 0 1 0 |(= 162) в Еще один способ умножения на 6 |0 0 0 1 1 0 1 1| Я 0 0 110 110 ... Увеличение в 2 раза (сдвиг влево на 1 разряд) +) 0 1 10 1 10 0 ... Увеличение в 4 раза _ г::1 —zr. (сдвиг влево на 2 разряда) | 1 0 1 О О 0 1 О I... Увеличение в 6 раз Рис, 3.6. Умножение двоичных чисел 60
3.2. Шестнадцатеричная система счисления Таблица 3.1. Соответствие между числами двоичной, десятичной и шестнадцатеричной систем счисления Десятич- ная система счисления Двоичная система счисления Шестнадца- теричная система счисления Десятич- ная система счисления Двоичная система счисления Шестнадца- теричная система счисления 0 0000 0 9 1001 9 1 0001 1 10 1010 А 2 0010 2 11 1011 В 3 ООН 3 12 1100 С 4 0100 4 13 1101 D 5 0101 5 14 1110 Е 6 оно 6 15 1111 F 7 0111 7 16 10000 10 8 1000 8 Для того чтобы отличить шестнадцатеричное число от чисел, за- писанных в других системах, запись кода числа дополняют буквой латинского алфавита Н (заглавная буква слова Hexadecimal — шест- надцатеричный). При этом запись шестнадцатеричного числа при- нимает следующий вид: 6DH, 59Н и т. п. Кроме того, перед шест- надцатеричным числом, начинающимся с символов A...F, принято записывать цифру «О». Например, запись 0В6Н соответствует шест- надцатеричному числу В6 (что равно 10110110 в двоичной системе или 182 — в десятичной). Примеры Р (ноль, один, один, ноль, один, один, ноль, один) Двоичное 01101101 ЧИСЛО I____________I I_______ ( = 64 + 32 + 8 + 4+1 = 109) Шестнадца- I I теричное число 6 D (шесть, дэ) Двоичное 01011001 ЧИСЛО ( = 6x16+ 13= 109) 10 110 111 Каждые 4 разряда двоичного числа преобразуются в 1 цифру шестнадцатеричного числа В7 Читать и записывать числа в шестнадцатеричной системе гораздо легче! 61
3. Микрокомпьютерная математика 3.3. Двоично-десятичный код (BCD) 3.3. Как мы убедились выше, для ДВОИЧНО-ДЕСЯТИЧНЫЙ преобразования числа из двоичной КОД (BCD) системы в привычную для нас деся- тичную форму необходимо произ- вести определенные вычисления. Чтобы упростить эти вычисле- ния, был введен так называемый код BCD. BCD — это сокращение английского термина Binary Coded Decimal, который обозначает представление десятичного числа двоичными цифрами. Двоичное число, каждые 4 разряда которого выражают одну цифру десятич- ного числа, и есть код BCD. Будучи представленным в коде BCD, 2-разрядное десятичное число становится 8-разрядным, а 3-раз- рядное — 12-разрядным. Рассмотрим это преобразование на примере десятичного числа 69. В соответствии с определением кода BCD каждую из значащих цифр (6 и 9) следует преобразовать в 4-разрядное двоичное число. Так как десятичному числу 6 соответствует двоичное число ОНО, а числу 9 — число 10010 (см. Табл. 3.1), представлением числа 69 в ко- де BCD является число 01101001. Учитывая простоту преобразова- ния десятичного числа в код BCD, последний часто используется в качестве промежуточного формата представления данных при вводе в микрокомпьютер или когда результаты вычислений, произведен- ных микрокомпьютером, требуется представить в десятичном виде. Мы рассмотрели различные представления чисел, используемых в микрокомпьютере, и простые арифметические операции с двоич- ными числами. Теперь давайте рассмотрим следующую проблему: допустим, мы имеем 8-разрядное число 10010110. Как определить, что это за число? Может быть, это положительное двоичное число, а может быть, отрицательное двоичное число со знаком. Не исклю- чено также, что оно представлено в дополнительном коде или коде BCD. Прежде чем мы ответим на этот вопрос, давайте посмотрим на Рис. 3.7, где показаны различные варианты «расшифровки» од- ной и той же записи 8-разрядного числа, по виду напоминающего двоичное. В зависимости от того, с каким форматом числа мы имеем дело, при переводе в десятичную систему оно может принимать значе- ния, равные 150, -106 или 96. И никто не сможет определить, какое из этих значений правильное, кроме того, кто при составлении про- “1 Одинаковые по форме 8-разрядные числа могут иметь разные значения 8-разрядное число, записанное 110 0 Г"0 ГЛ 0 в форме двоичного числа 1-------------------- По правилам преобразования Г_ двоичного числа в десятичное: 128+16 +4 + 2+ =Г~15(Г1 g Двоичное число со знаком По правилам представления в дополнительном коде: 0 110 10 0 1 + ) 1 0 1 10 10 10 (= 106) При преобразовании в дополнительный код изменяется знак. Так как мы получили +106, то исходное число было равно Рис. 3.7. Различные интерпретации одной и той же записи 8-разрядного числа граммы для микрокомпьютера определил, в каком формате будут записаны те или иные числа. Именно пользователь решает, напри- мер, что переменная ^выражается только положительными двоич- ными числами, переменная Р представляет собой двоичные числа со знаком, а переменная Z представлена в коде BCD, Тогда при со- ставлении программы он должен позаботиться о том, чтобы значе- ния этих переменных обрабатывались в соответствии с правилами, Предусмотренными именно для этих случаев. 62 63
3. Микрокомпьютерная математика 3.4. Логические операции 3 4 Как следует из названия АЛУ, ко- ЛОГИЧЕСКИЕ ОПЕРАЦИИ тоРое является одним из основных функциональных блоков микро- компьютера, оно предназначено для выполнения не только ариф- метических, но и логических операций. При вычислении значений логических функций процессор использует правила логической ал- гебры (ее часто называют по имени ее изобретателя, английского математика Дж. Буля, булевой алгеброй). В булевой алгебре, осно- ванной на двузначной логике, все переменные могут принимать од- но из двух значений — «истинно» или «ложно» (аналогично цифрам двоичного числа, их обычно обозначают символами «1» или «О» со- ответственно). Число основных логических операций (как и арифметических действий) равно 4. Это логическое сложение «ИЛИ», логическое умножение «И», отрицание «НЕ» и «Исключающее ИЛИ». Давайте познакомимся со свойствами этих четырех логических операций и рассмотрим примеры их использования. Логическое сложение (ИЛИ) Операция логического сложения обозначается знаком «+» (или «V»), Несмотря на кажущееся сходство, следует отличать обозначе- ние логической операции от знака «+», используемого при арифме- тическом сложении (во избежание недоразумений рекомендуется там, где есть вероятность перепутать эти две операции, использо- вать только обозначение «v»). Результат логического сложения можно представить в виде сле- дующего правила: Если хоть одно из слагаемых равно «1», то в результате также получится «1» Рассмотрим конкретный пример. Пусть переменная X обознача- ет следующее: в комнате находится человек (если находится, то зна- чение функции равно «1», если нет — «О»). Эту переменную можно представить в виде суммы двух переменных — А (в комнате находит- ся мужчина) и В (в комнате находится женщина). Тогда в трех слу- чаях из четырех значение логической функции X = А + В равно «1», и только в одном случае оно равно «О». На Рис. 3.8 приведена табли- ца истинности для операции логического сложения. 64 —..... ...— Рис. 3.8. Таблица истинности для операции логического сложения Логическое сложение часто используется при обработке двоич- ных чисел. Например, если требуется заменить на «1» только пер- вый разряд 8-разрядного двоичного числа X (эта операция называ- ется установкой значения разряда), то для этого в каждом разряде числа X выполняется операция логического сложения с соответст- вующими значащими цифрами двоичного числа 00000010, как по- казано на Рис. 3.9. Установка разряда | 8-разрядное число 1 0 1 Производим поразрядное L + + + сложение j Мы хотим установить «1» только ООО в 1-м разряде ------ Обратите внимание: Результат вычисления функции «ИЛИ» не совпадает с результатом арифметического сложения 1 0 1 i 0 I 1 + + + ; + ; + о о ОШО 10 1 1 0 1 [Т] 1 Установленный разряд Рис. 3.9. Установка разряда методом логического сложения 3~2970 65
3. Микрокомпьютерная математика 3.4. Логические операции Логическое умножение (И) Логическое умножение обозначается знаком «» (или «л»). Ре- зультат логического умножения можно определить с помощью сле- дующего правила: Результат равен «1» только в том случае, если оба множителя равны «1» Таблица истинности для операции логического умножения представлена на Рис. 3.10. Эту таблицу легко запомнить, так как ре- зультат при логическом умножении тот же, что и при арифметичес- ком умножении двоичных цифр. Если в рассмотренном выше при- мере оставить прежним смысловое значение введенных логических переменных А и В, то смысл логической переменной Y, равной про- изведению А • В, выражается в виде утверждения: «в комнате одно- временно находятся мужчина и женщина». Маска разряда | 8-разрядное число 10 110 Производим поразрядное 1 логическое умножение ] 0 0 0 0 0 1 0 0 Сохраняем прежнее значение только в 1-м разряде Рис. 3.11. Маскирование разряда путем логического умножения 1 О 1 Обнуление разряда J 8-разрядное число Производим поразрядное [ логическое умножение 1 Во всех разрядах «1», кроме обнуляемого разряда Результат операции Содержимое других разрядов не изменяется 10 1 1 0;1:10 1 1 1 1 1 :0j 1 1 1 0 1 1 0 [о] 1 о А Операция обнуления разряда выполнена Рис. 3.10. Таблица истинности операции логического умножения При обработке двоичных чисел логическое умножение исполь- зуется, например, когда нам нужно выборочно обнулить разряды 8-разрядного двоичного числа, оставив значения остальных раз- рядов прежними. В этом случае выполняем логическое умножение на 1 в тех разрядах, значения которых мы хотим сохранить, а над значащими цифрами остальных разрядов производим логическое умножение на 0 (Рис. 3.11). Такая операция называется маской разряда. Аналогично можно обнулить только один из разрядов двоичного числа. Пример такой операции приведен на Рис. 3.12. Рис. 3.12. Обнуление разряда путем логического умножения Отрицание (НЕ) Операция отрицания изменяет значение логической переменной На противоположное. Она изображается чертой, расположенной над обозначением переменной. Например, выражение А = X означает, что X является отрицанием А. Правило, по которому осуществляется опе- рация отрицания, может быть сформулировано в следующем виде: 66 67
3. Микрокомпьютерная математика 3.4. Логические операции При отрицании «О» и «1» взаимно заменяют друг друга (происходит инверсия значений логических переменных) На Рис. 3.13 представлена таблица истинности для логической операции отрицания. Черточки над выводами MREQ, IORQ, RD (Рис. 2.4) во второй главе, посвященной описанию функций выво- дов процессора Z80, обозначают инверсию (отрицание) логического сигнала. Отрицание используется при вычислении дополнительного кода двоичного числа. «НЕ» А = Х Таблица истинности операции «НЕ» а| х 0 1 1 о Рис. 3.13. Таблица истинности логической операции отрицания Исключающее ИЛИ В качестве обозначения операции «Исключающее ИЛИ» ис- пользуется знак + (или V). Результат этой логической операции можно определить по правилу: Результат равен «1» только в том случае, если значения переменных противоположны Таблица истинности операции «Исключающее ИЛИ» приведена на Рис. 3.14. Рассмотрим на конкретном примере смысл этой опе- рации. Предположим, что господин К и господин N внесены в спи- сок кандидатов на пост президента. Переменной А обозначим со- бытие: «господин К наберет больше половины голосов избирате- лей», а переменной В: «господин N наберет больше половины голо- сов избирателей». Тогда событие X: «второго тура голосования не потребуется» является результатом операции «Исключающее ИЛИ» над переменными А и В . Рис. 3.14. Таблица истинности операции «Исключающее ИЛИ» Операция «Исключающее ИЛИ» используется, например, если требуется инвертировать содержимое некоторого разряда 8-разряд- ного числа (Рис. 3.15). Для этого мы применяем операцию «Исклю- чающее ИЛИ» над значащей цифрой разряда, который мы хотим инвертировать, и единицей. Кроме того, в результате применения этой операции ко всем разрядам двух одинаковых 8-разрядных чи- сел получается число, все разряды которого равны 0. Это означает, что операцию «Исключающее ИЛИ» можно использовать для очи- стки (обнуления) регистра. Инвертирование разрядов] 10 11 ® ® ® ® 1111 8-разрядное число 0 10 1 Производим поразрядно 1 операцию «Исключающее ИЛИ»Г~ ® ® ® ® Мы хотим инвертировать 0 0 0 0 только 4 младших разряда ------------ Результат вычисления 0 1 0 0 1 0 0 I Содержимое не I Инвертировано меняется —-----------------— Рис. 3.15. Пример применения операции «Исключающее ИЛИ» 68 69
3. Микрокомпьютерная математика Итак, мы познакомились с основными свойствами четырех ло- гических операций: логическое сложение «ИЛИ», логическое умно- жение «И», отрицание «НЕ» и «Исключающее ИЛИ», рассмотрели примеры их использования. Микрокомпьютеру часто приходится выполнять логические операции при выполнении определенных команд, смысл и назначение которых мы объясним позже. Эти ко- манды часто используются в операциях над разрядами двоичных чисел. Они служат для того, чтобы устанавливать, сбрасывать или инвертировать значения в требуемых разрядах двоичных чисел. ОБОБЩЕНИЕ ГЛАВЫ 1. Компьютеры оперируют числами, представленными в двоичной си- стеме счисления. Это связано с тем, что в электронных устройствах и устройствах памяти проще всего реализуются системы с двумя ус- тойчивыми состояниями. 2. Для представления отрицательных чисел используют двоичное чис- ло со знаком (представление в дополнительном коде). 3. Шестнадцатеричная система применяется для «сжатия» данных, то есть для более экономичной записи чисел. Она позволяет в четыре раза уменьшить число разрядов по сравнению с двоичной системой. 4. В компьютере при выполнении действий с числами могут использо- ваться четыре основные логические операции — логическое сложе- ние (ИЛИ), логическое умножение (И), отрицание (НЕ) и (Исклю- чающее ИЛИ). Практические задания 1) Объясните, каким образом с помощью электрических или магнитных устройств можно представить цифры двоичного числа «О» и «1». 2) Переведите в десятичную форму двоичное число со знаком «10011101»- 3) АЛУ процессора производит лишь операцию сложения двоичных чи- сел. Объясните, каким образом выполняется вычитание. 4) Вспомните, в каких случаях в программе, составленной для микроком- пьютера, могут использоваться логические операции. 70
4 ЦИФРОВЫЕ СХЕМЫ Из каких деталей можно построить компьютер? Микрокомпьютер конструируется на основе цифровых схем. В свою очередь, цифровая схема состоит из различных электронных компонентов: сопротивлений, конденсаторов, диодов, транзисто- ров и т. д. На Рис. 4.1 показаны так называемые «дискретные» (то есть выполненные в виде отдельных деталей) электронные компо- ненты. Соединенные между собой определенном образом, они представляют собой электронные устройства, реализующие различ- ные логические функции. На печатной плате современного компьютера вы не увидите большого количества дискретных компонентов, так как основная часть элементов, составляющих его схему, находится внутри инте- гральных схем (ИС). В корпусе одной ИС размещается огромное количество электронных элементов, сформированных на одном кристалле. Исключение составляют так называемые «гибридные» ИС, содержащие некоторое количество миниатюрных бескорпус- ных дискретных компонентов. В зависимости от количества эле- ментов, сформированных на одном кристалле, интегральные схе- мы делятся на схемы малой, средней, высокой и сверхвысокой сте- пени интеграции. 1. К схемам малой степени интеграции, или малым интеграль- ным схемам (МИС, SSI), относятся ИС, в которых число элементов не превышает 100. 2. Схемы средней степени интеграции (СИС, MSI) содержат от 100 до 1000 элементов. 71
4. Цифровые схемы п~Р~п р-п-р Полевой транзистор Биполярные ________________________________________ транзисторы рОсновные компоненты электронных схем Рис. 4.1. Обозначения и внешний вид основных компонентов электронных схем 3. Схемы большой степени интеграции — большие интегральные схемы (БИС, LSI) — содержат от 1000 до 10000 элементов. 4. Класс интегральных схем сверхвысокой интеграции (СБИС, VLSI) составляют ИС с числом элементов больше 10000. В зависимости от полупроводниковой технологии, используе- мой при их изготовлении (биполярные или полевые транзисторы), различают транзисторно-транзисторные логические схемы (ТТЛ) и схемы на комплиментарных МОП-транзисторах ( КМОП). Кро- ме того, имеются варианты ТТЛ и КМОП интегральных схем с усовершенствованными характеристиками. Например, разработа- ны маломощные ТТЛ-схемы на диодах Шоттки (ТТЛШ) с потреб- лением тока в 4 раза меньше, чем у стандартных ТТЛ. На Рис. 4.2 показано, как внешне выглядят интегральные схемы некоторых типов. 72
4. Цифровые схемы В интегральной схеме множество элементов сформировано на одном кристалле Кремниевая подложка (кристалл размером несколько мм) ИС, изготовленные по различным технологиям ИС различной степени интеграции ИС на биполярных транзисторах Меньше 100 элементов ИС на КМОП-транзисторах 3 I Рис. 4.2. Виды интегральных схем Прочитав вторую главу, мы узнали, что процессор и запоминаю- щее устройство микрокомпьютера являются большими интеграль- ными схемами. Порты ввода-вывода обычно также выполнены на больших интегральных схемах. Кроме того, интегральные схемы различных типов используются для передачи сигналов и данных Между процессором, ЗУ и портами ввода-вывода. Для того чтобы разобраться в работе микрокомпьютера, мы должны изучить функ- ции интегральных схем, из которых он построен. Мы также долж- ны иметь представление о цифровых схемах, с помощью которых осуществляется взаимодействие портов ввода-вывода с внешними Устройствами. Рассмотрению этих вопросов и посвящена настоя- щая глава. 73
4. Цифровые схемы 4,1, Вентильными, или комбинацион- ВЕНТИЛЬНЫЕ СХЕМЫ ними, схемами называют электрон- ные устройства, выполняющие те са- мые логические операции, которые мы изучили в предыдущей гла- ве: логическое сложение «ИЛИ», логическое умножение «И», отри- цание «НЕ», «Исключающее ИЛИ». Существуют стандарты обозна- чения логических элементов на схемах в зависимости от выполняе- мых ими функций. В Табл. 4.1 представлены обозначения элек- тронных элементов, реализующих перечисленные выше логические функции. Таблица 4.1. Логические элементы, выполняющие четыре основные операции Наименование Обозначение на схеме Выполняемая функция ИЛИ А—Р\— X* (А + В) I На выходе «1», если хотя бы на одном входе присутствует «1» и А—FY—Xi в—1_у (А В) I На выходе «1» лишь при наличии «1» на обоих входах НЕ А 1^>° х! Инверсия функции входного сигнала Исключающее ИЛИ А— п 11 У А.« и^-ДАев) i На выходе «1» лишь при неодинако- вых сигналах на входе Любую логическую функцию можно реализовать с помощью комбинации, состоящей из вентильных схем четырех типов, соот- ветствующих четырем основным логическим операциям. Довольно часто (прежде всего в силу технологических причин) применяются логические элементы, выполняющие операции «ИЛИ-HE» и «И- НЕ». Функции и обозначения таких логических элементов пред- ставлены в Табл. 4.2. 74
4.1. Вентильные схемы Таблица 4.2. Логические элементы, выполняющие операции «И-НЕ» и «ИЛИ-НЕ» Наименование Обозначение на схеме Выполняемая функция И-НЕ в=О=.х! (А В) I На выходе «0», если на всех входах «1» ИЛИ-НЕ А —Xq yg В (А + В) । На выходе «0», если хотя бы на одном входе «1» Все четыре основные логические функции можно реализовать с помощью одной и той же схемы «И-НЕ», которая посредством до- полнительных инвертирующих каскадов легко преобразуется в дру- гие типы вентильных схем (Рис. 4.3). Применение вентилей «И-НЕ» (Схема «Исключающее ИЛИ») С помощью вентилей «И-НЕ» можно реализовать любую логическую функцию Рис. 4.3. Варианты реализации основных вентильных схем посредством логических элементов «И-НЕ» 75
4. Цифровые схемы 4.2. Текущее состояние на выходе комбинационной ТРИГГЕРЫ схемы, составленной из вентилей, о которых мы го- ворили выше, полностью определяется комбинаци- ей входных сигналов, присутствующих в данный момент на входах. Причем одно и то же состояние на выходе сохраняется лишь до тех пор, пока сохраняется соответствующая комбинация «нулей» и «еди- ниц» на входах. Помимо комбинационных схем, в вычислительной технике очень часто используются устройства, способные «запоми- нать» входные сигналы. Они изменяют состояние на выходе в резуль- тате воздействия короткого входного сигнала, оставаясь в этом со- стоянии до прихода на соответствующий вход очередного сигнала определенной формы. Такие устройства называют последовательно- стными схемами. К классу последовательностных прежде всего от- носят триггеры. Триггер имеет один или несколько входов и два вы- хода — прямой (Q) и инверсный (Q). Если на первом выходе сигнал соответствует «1», то на втором выходе обязательно будет «О», и на- оборот. В результате воздействия соответствующего сигнала на входе триггер изменяет состояние выходов на противоположное («1» меняется на «О», а «О» — на «1») и остается в этом состоянии до тех пор, пока на его входы не придут управляющие сигналы или бу- дет отключено питание устройства. Счетный триггер (Т-трштер) Счетный триггер имеет один вход (Т) и два выхода (Q и Q). Со- стояние на его выходах изменяется путем инверсии выходного сиг- нала (на одном из входов «О» меняется на «1», а на втором — «1» на «О»). «Переброс» (быстрый переход) состояния триггера происходит в момент поступления на его вход Т (Рис. 4.4) нарастающего фрон- та (резкого перехода из состояния «О» в состояние «1») импульса уп- равления, который является «спусковым крючком», приводящим триггер в действие. Как видно из диаграммы, спадающий фронт (обратный пере- ход из состояния «1» в состояние «О») сигнала на входе Т не вызы- вает изменения состояния выходов триггера. В момент прихода переднего фронта следующего импульса триггер вернется в состо- яние, в котором он был до прихода первого импульса. Таким обра- зом, Т-триггер «умеет считать» только до двух, так как его реакция на каждый следующий нечетный импульс внешне ничем не отли- 76
4.2. Триггеры чается от его реакции на первый импульс. Если сигнал с выхода этого триггера подать на вход другого триггера, получится систе- ма, в которой по комбинации состояний на выходах обоих тригге- ров можно различить четыре импульса на входе первого триггера. Эти математические способности Т-триггеров находят примене- ние в двоичных счетных схемах. D-триггер D-триггер имеет два входа: D (date) — вход данных, CL (clock) — вход синхронизации и два выхода (Q и Q). Принцип работы D-триг- гера легко понять с помощью диаграммы, приведенной на Рис. 4.5. Как видно из диаграммы, логический сигнал на прямом выходе Q в момент прихода положительного фронта синхроимпульса на вход CL Устанавливается равным логическому сигналу на входе данных D. Логический сигнал на инвертирующем выходе Q всегда противо- положен сигналу на прямом выходе. Необязательно, чтобы на счет- ный вход подавались импульсы тактовой частоты с одинаковым пе- риодом. Достаточно любого сигнала, который во времени изменяет состояние из «О» в «1». На основе восьми D-триггеров можно пост- роить так называемую схему «защелки» для регистра, запоминаю- щего одновременно 8 разрядов двоичного числа, которые применя- ется в портах ввода-вывода. --- - - — Т7
4. Цифровые схемы ==== 4.3. ТТЛ (транзисторно-транзисторные логические) схемы В момент нарастающего фронта импульса на счетном входе состояние входа D передается на выходQ Вход D Счетный вход Выход Q Время Обозначение на схемах Рис. 4.5. D-триггер Выход Q Временная диаграмма В ТТЛ логических схемах «О» соответствует напряжению О В, а логическая «1» — напряжению +5 В. Это номинальные значения напряжения сигнала. На самом деле логические элементы сохраня- ют работоспособность, если уровень напряжения, соответствующе- го логической «1», находится вдиапазоне от 1.3 до 5.25 В. Напряже- ние ниже 1.3 В обрабатывается электронной схемой, как логичес- кий «О». Более точная схема уровней напряжения логических сигна- лов для ТТЛ-микросхем приведена ниже. Для краткости их часто называют уровнями ТТЛ или ТТЛ-уровнями. Завод — изготовитель микросхем гарантирует их работоспособность в температурном ди- апазоне О...7О°С. В вычислительной технике, помимо упомянутых выше D- и Т-триггеров, часто используются триггеры двух других видов — RS-триггер, о котором будет сказано несколько слов в разделе 7.4, и JK-триггер. Они применяются в устройствах хранения ин- формации, представленной в виде двоичных чисел, в счетчиках импульсов, устройствах формирования сигналов. Итак, в предыдущей и настоящей главах мы ознакомились с функциями основных элементов цифровых схем — вентилями и триггерами. Теперь настало время поговорить о том, в каком виде обычно продаются триггеры и вентильные схемы и каким образом они выполняют в компьютере возложенные на них функции. В сле- дующем параграфе мы подробно рассмотрим устройство и основ- ные параметры относительно недорогих цифровых интегральных схем, выполненных по технологии ТТЛ. ТТЛ-уровни Уровень входного Уровень выходного сигнала сигнала ---------5 В ВЫСОКИЙ ---------2.4 ^\’Ы>ласть неустойчивой У работы 0 4 В [НИЗКИЙ а4 5В 2.0 ВЫСОКИЙ 01 низкий' Уровень сигнала «1» (ВЫСОКИЙ) на входе должен быть выше 2.0 В В состоянии «1» (ВЫСОКИЙ) на выходе напряжение должно быть больше 2.4 В Интегральные схемы этого вида впервые были разработаны американ- ской фирмой «Texas Instrument Corp». В числе наиболее распространенных приборов данного типа можно назвать логические микросхемы серии SN7400. Сегодня аналогичные приборы выпускаются многими фирмами. 4.3. ТТЛ (ТРАНЗИСТОРНО- ТРАНЗИСТОРНЫЕ ЛОГИЧЕСКИЕ) СХЕМЫ Вентильные схемы ТТЛ На Рис. 4.6 показано назначение выводов (цоколевка) двух ти- пов микросхем ТТЛ — SN7400 и SN7404. Обе микросхемы выпуска- ются в корпусе размером 20x8x5мм с 14 выводами. Интегральная схема SN7400 состоит из четырех так называемых двухвходовых схем «И-НЕ». Интегральная схема SN7404 включает в себя 6 логи- ческих элементов «НЕ», часто называемых инверторами. У обеих ИС на 14-й вывод (ИСс) подается напряжение источника питания (+5 В ±5%), 7-й вывод (GND) - общий (0 В). 78 79
4. Цифровые схемы Рис. 4.6. Цоколевка ИС SN7400 и SN7404 ИС этой серии выпускаются в очень широком ассортименте: ло- гические элементы «И», «ИЛИ», «НЕ», «Исключающее ИЛИ», «И- НЕ», «ИЛИ-HE» и т. д. Помимо 2-входовых вентилей, имеются так- же вентили с 4 и даже 8 входами. Благодаря относительно невысо- кой стоимости (всего несколько десятков йен за одну микросхему, состоящую из четырех вентилей «И-НЕ») микросхемы ТТЛ-серии SN7400 пользуются популярностью у конструкторов-любителей. На примере ТТЛ-микросхемы серии SN7400 рассмотрим, как работает вентиль «И-НЕ» (Рис. 4.7). Прежде всего необходимо подать напряжение от источника пи- тания на 7-й и 14-й выводы микросхемы. Седьмой вывод присоеди- няется к отрицательному полюсу источника постоянного напряже- ния 5 В, а четырнадцатый вывод — к его положительному полюсу. С помощью двух выключателей, подключенных к входной цепи вентиля, как показано на Рис. 4.7, проанализируем особенности ра- боты ТТЛ-вентиля «И-НЕ» для различных вариантов включения. В первом варианте (вентиль А) схема вообще не будет работать как логический элемент, так как при любых положениях выключателей, подсоединенных к выводам 1 и 2, на выходе вентиля (вывод 3) все- 80
4.3. ТТЛ (транзисторно-транзисторные логические) схемы Вольтметр о+5 В Резистор, который смещает напряжение вверх GND Могут возникнуть помехи Если хотя бы один контакт замкнут, то сигнал на выходе равен «1» Источник питания (+5 В) Сигнал на выходе равен «1», если оба контакта замкнуты 390 Резистор, V/ который смещает! напряжение вниз Рис. 4.7. Включение микросхемы SN7400 в режиме вентиля «И-НЕ» гда будет присутствовать уровень напряжения НИЗКИЙ (логичес- кий «О»). Дело в том, что внутри микросхемы имеются резисторы, через которые входы соединены с положительным полюсом источ- ника питания. Таким образом, на обоих входах сигнал соответству- ет «1» независимо от того, замкнуты или разомкнуты соответствую- щие выключатели. В этом случае, в соответствии с Табл. 4.2, на вы- ходе всегда будет «О». Во втором варианте включения (вентиль В) входы логического элемента (выводы 4 и 5) соединены с отрицательным полюсом ис- точника питания (общий вывод) через резисторы сопротивлением 390 Ом. Это сделано для того, чтобы снизить начальное напряжение на входах до уровня логического «О». В этом случае при разомкну- тых выключателях во входной цепи на выходе логического элемен- та (вывод 6) сигнал будет равен «1». Чтобы получить на выходе ло- гический «0», необходимо подать на оба входа «1» (Табл. 4.2), для че- го следует замкнуть оба выключателя. Во всех других случаях сигнал на выходе будет равен «1». Посмотрим теперь как работает вентиль С. Ранее мы выяснили, что на свободные входы ТТЛ-вентиля через внутренние резисторы —- - — .....- . --------81
4. Цифровые схемы подается напряжение от положительного полюса источника пита- ния, что соответствует сигналу «1». В таком случае на выводе 13 сиг- нал будет равен «О» до тех пор, пока мы не замкнем хотя бы один из выключателей. Тогда, в соответствии с Табл. 4.2, произойдет инвер- сия сигнала на выходе. Однако работа такой схемы будет неустой- чивой, поскольку на свободных входах могут оказаться случайные электрические сигналы (например, помехи от электростатических разрядов), способные на некоторое время изменить напряжение в очень широких пределах. Для обеспечения надежной работы в цепь выводов 12 и 13 необходимо включить резисторы сопротивлением 1... 3 кОм (вентиль D). Их роль состоит в том, чтобы надежно зафик- сировать на входах вентиля напряжение, соответствующее логичес- кой «1» (+5 В). Функциональные возможности интегральных схем ТТЛ можно значительно расширить путем составления различных комбинаций вентилей, соединенных друг с другом. Для этого часто соединяют выход логического элемента с его входом или подключают непо- средственно к выходу одного вентиля входы нескольких других вен- тилей. Максимальное количество входов вентильных схем, которые можно присоединить к одному выходу, называется нагрузочной способностью или коэффициентом разветвления. У стандартного вентиля ТТЛ коэффициент разветвления равен 10. Коэффициент разветвления по выходу, или нагрузочная способность К выходу ТТЛ-схемы можно подключить до 10 ТТЛ-входов 82
4.3. ТТЛ (транзисторно-транзисторные логические) схемы Схемы с Z-состоянием Как известно, любая логическая переменная может принимать только два значения, поэтому на выходе логической цифровой схе- мы, реализующей какую-либо булеву функцию, достаточно двух со- стояний: состояние «1», соответствующее значению переменной «истинно» и состояние «О», соответствующее значению «ложно». Тем не менее в некоторых случаях, учитывая специфику работы конкретных типов цифровых схем, их наделяют способностью на- ходиться еще и в третьем состоянии, называемом высокоомным, или Z-состоянием. Высокоомное состояние представляет собой со- стояние разрыва цепи между выходным выводом и внутренней час- тью интегральной схемы. Как показано на Рис. 4.8, схема находит- ся в высокоомном состоянии на выходе, если на входе ОС присут- ствует сигнал «1». Эта функция интегральной схемы дает возмож- ность на некоторое время «отключить» ее выход от остальной части электронного устройства. Такой режим работы может понадобиться, например, чтобы сни- зить потребление энергии от источника питания выходной цепью тех ИС, которые в данный момент не производят никаких операций с данными. /Интегральная схема с \ \ Z-состоянием на выходе / Вход -------- Выход —► —► 3 состояния на выходе —* —* ВЫСОКИЙ = «1» ~? низкий = «о» ОС —► —► Z Высокоомное ---------состояние Когда на входе ОС (Output Control) сигнал равен «1», все выходы находятся в состоянии Z (высокоомное состояние). Когда на входе ОС сигнал равен «О», s схема работает в бистабильном режиме s Рис. 4.8. Интегральная схема с Z-состоянием 83
4. Цифровые схемы Дешифратор Дешифратор вырабатывает сигнал на том выходе, двоичный ад- рес которого установлен на его входе. Иначе говоря, дешифратор выполняет функцию устройства идентификации (распознавания) двоичных чисел. На Рис. 4.9 показан 3-разрядный дешифратор (74LS138). Эта интегральная схема имеет три входа для сигналов управления — Gl, G2A и G2B. Сигналы управления синхронизируют работу де- шифратора. Как вы уже могли заметить, маленькие кружки на схе- ме у выводов означают инверсию сигнала. Дешифратор находится в активном состоянии, когда на вывод G1 подается сигнал «1», а на выводы G2A и G2B — «О». Во всех остальных случаях на всех выхо- дах от Y0 до Y7 сигнал соответствует «1». На Рис. 4.9 справа дана таблица соответствия некоторых кодовых комбинаций дешифра- тора. Если состояние на адресных входах А, В, С представить дво- ичным числом, то на выходе, номер которого равен значению это- го числа, устанавливается «О». Дешифраторы обычно используются для преобразования двоич- ного числа в десятичное. В процессоре микрокомпьютера он часто играет роль селектора, который через шину адреса выбирает требу- емый кристалл устройства памяти или порт ввода-вывода. Подроб- нее об этом мы расскажем в следующем разделе (4.4). 3-разрядный дешифратор YO Y1 Y2 Y3 Y4 Y5 Y6 Входные Синхросигналы сигналы (адреса) Примеры кодов дешифратора С в А Выходы Y0...Y7 0 0 0 «0» только на выходе Y0 0 1 1 «0» только на выходе Y3 1 0 1 «0» только на выходе Y5 1 1 1 «0» только на выходе Y7 Распознаются .4-разрядные двоичные числа Синхросигналы инициируют работу дешифратора Дешифратор работает, только когда имеет место следующая комбинация сигналов: G1 = «1», G2A = G2B = «О» Рис. 4.9. Дешифратор (74LS138) 84 —...... -.....
4.3. ТТЛ (транзисторно-транзисторные логические) схемы Защелка Схема защелки выполняет следующую функцию: она сохраня- ет (фиксирует) данные в течение некоторого промежутка времени. В микрокомпьютере защелки применяются в портах ввода-вывода или в регистрах различных типов. Защелка представляет собой электронную схему, состоящую из множества вентилей и тригге- ров. Например, 8-разрядная схема защелки регистра (74LS373) со- держит восемь D-триггеров, сформированных на одном кристалле (Рис. 4.10). Это ТТЛ-схема с Z-состоянием. Поэтому, как мы уже знаем, если на вывод ОС подать «1», то на всех ее выходах устано- вится высокоомное состояние. Если на вывод G подать сигнал «1», то значения сигналов на входах 1D...8D без изменений передадут- ся на выходы 1Q...8Q. Это состояние на выходах будет сохранять- ся до тех пор, пока на вывод G будет подаваться сигнал «0». Именно такая 8-разрядная схема-защелка применяется в портах ввода-вывода микрокомпьютера. 8-разрядная «защелка» 8Q 8D 7D 7Q 6Q 6D 5D 5Q G |20)П9]П8][17]Пб]П5]П41Пз1Г|2]ГгП VCC 74LS373 (ТТЛ с Z-состоянием); содержит восемь D-триггеров _______________________________GND 111 ш Ш LU Ш LU Ш Ш Ш й ОС IQ ID 2D 2Q 3Q 3D 4D 4Q Входы: 1D ... 8D (8-разрядное число) Выходы: 1Q... 8Q Если на вход ОС подать «1», то на выходе установится высокоомное состояние Когда на входе G сигнал равен «1», значения сигналов с D-входов передаются на Q-выходы Когда G = «0», выходы сохраняют предыдущее состояние В момент перехода вывода G из состояния «1» в состояние «0» входные данные «защелкиваются» в выходном регистре Рис. 4.10. Схема защелки ТТЛ 85
4. Цифровые схемы д д Как уже было отмечено во второй АРХИТЕКТУРА главе, основными компонентами ми- МИКРОКОМПЬЮТЕРА крокомпьютера являются централь- ный процессор, состоящий из вычис- лительного и управляющего блоков, запоминающее устройство, в которое заносятся данные и программа, а также порты ввода-выво- да, осуществляющие обмен данными между процессором и внеш- ними устройствами. Теперь рассмотрим, каким образом осуществ- ляется соединение процессора с ЗУ и портами ввода-вывода. На Рис. 4.11 представлен пример простейшей схемы микрокомпьюте- ра, состоящего из процессора Z80, двух БИС, выполняющих функ- ции постоянного запоминающего устройства, двух БИС оператив- ного запоминающего устройства и одной интегральной схемы, иг- рающей роль портов ввода-вывода. Соединение процессора и ЗУ Пожалуйста, не поленитесь перелистать книгу немного назад и еще раз взгляните на Рис. 2.4, на котором показаны сигналы про- 86
4.4. Архитектура микрокомпьютера цессора Z80. Из 40 выводов процессора Z80 к устройствам памяти имеют отношение адресная шина А15...А0 (16 выводов) и шина дан- ных D7...D0 (8 выводов), а также выводы сигналов управления MREQ , RD, WR. То есть всего получается 27 выводов. Все эти сиг- налы показаны на Рис. 4.12. Рис. 4.12. Основные сигналы обмена данными между ЦПУ и ЗУ Давайте в качестве примера рассмотрим 8-разрядное оператив- ное запоминающее устройство объемом 2 Кбайта, показанное на Рис. 4.13. Адресная шина процессора имеет 16 выводов А15...А0. Следова- тельно, он может указать 65536 адресов (216), что соответствует 64 К (1 К = 1024 = 210). По шестнадцатеричной системе счисления весь этот диапазон адресов перекрывает область чисел от 0000 Н до 0FFFFH. В то же время объем памяти рассматриваемого нами ОЗУ составляет лишь 2 Кбайта. Поэтому мы должны решить, к каким именно адресам процессора (из 1024) «привязать» эти 2 Кбайта. Например, мы можем назначить ОЗУ, имеющее объем памяти 2 Кбайта, адреса от 8000Н до 87FFH (область С, см. Рис. 4.14). 87
4. Цифровые схемы Назначение выводов 8-разрядного ОЗУ объемом 2К CS ОЕ WE А1О-..Ао: указывают адреса ячеек памяти (всего 2К = 211) D7...D0: передают 8-разрядные данные CS: при «О» ОЗУ действует ОЕ: если сигнал равен «О», обмен данными разрешен WE: если сигнал равен «О», разрешена запись данных Рис. 4.13. Цоколевка БИС ОЗУ На Рис. 4.14 представлен вариант размещения адресов БИС каж- дой из микросхем памяти, показанных на Рис. 4.11. Области А и В соответствуют двум ПЗУ по 2 Кбайта, а области С и D — двум схемам ОЗУ. Такая схема называется картой памяти. Мы определили область адресов одной из БИС ОЗУ в пределах 8OOOH...87FFH. Теперь подумаем, как соединить микросхему ЗУ с процессором. Для этого обратимся к Рис. 4.15. Очевидно, что, когда шестнадцатеричный адрес в пределах от 8000Н до 87FFH представлен двоичными 16-разрядными числами с разрядами Aq...Ai5, при обращении к соответствующим ячейкам памяти меняются только младшие 11 разрядов (Aq...A10), а стар- 88
4.4. Архитектура микрокомпьютера Рис. 4.14. Распределение адресов для четырех БИС ЗУ Шие разряды (Aj j ...А15) остаются без изменения. В этом случае при запросе процессором ячеек памяти ОЗУ значения в старших раз- рядах (Ai5...An) 16-выводной адресной шины (Ai5...Aq,) будут по- стоянны, образуя одно и то же двоичное число «10000». Таким об- разом, мы определили область памяти, то есть диапазон адресов, По которым процессор вызывает содержимое ячеек памяти ОЗУ 89
4. Цифровые схемы 4.4. Архитектура микрокомпьютера Шестнадцатеричный адрес Д1 АцАцАиАпАц зоичный адрес А|0 А9 Ag А7 A^ А5 А4 A3 А2 Ai Ац 8 0 0 0 1 8 4 2 D 1 8 7 F F 1 0 0 0 0 «8» «8» 1 0 0 0 0 «8» 1 0 0 0 0 0 0000000000 «0» «0» «0» «4» «2» «D» 1 0000101 101' «/» <<F» «F» 1 1 1’ 1 1 1 i‘ i 1 1 1’ Значения пяти старших разрядов (А15---А11) не изменяются (всегда образуют число 10000) Младшие 11 разрядов (Аю-.Ао) изменяются Рис. 4.15. Изменяющиеся и неизменяющиеся разряды в области адресов 8000H...87FFH объемом 2 Кбайта. Иными словами, когда старшие разряды (А|5...Ац) адресной шины установлены в состояние «10000», ста- новится возможным соединение процессора именно с рассматри- ваемой нами БИС ОЗУ емкостью 2 Кбайта. На Рис 4.16 показан один из способов схемотехнической реали- зации соединения БИС ОЗУ с ЦПУ. Мы остановились на варианте схемы выборки адреса, построенной на основе вентиля «И-НЕ» и 2-разрядного дешифратора. Как видно из Рис. 4.16, 11 младших разрядов адресной шины (выводы Aq...Ai0 процессора) непосредственно соединены с выво- дами Aq...Aio ОЗУ. Когда на входах А15, А14 и А[3 3-входовой логи- ческой схемы выборки, собранной на вентиле «И-НЕ» и двух ин- верторах, устанавливается состояние «100», на вход G 2-разрядного дешифратора подается «0», и дешифратор активизируется. Мы знаем, что в зависимости от комбинации сигналов на входах А и В дешифратора на одном из его четырех выходов (Y0...Y3) уста- навливается сигнал «0». В рассматриваемом примере значение сиг- нала на выходе Y0 станет равным «0» только в том случае, если оба входа, соответствующие разрядам А,2 и Ai ], одновременно будут на- ходиться в состоянии «0». Таким образом, на выходе Y0 «0» появля- 90 Рис. 4.16. Схема соединения БИС ОЗУ с ЦПУ ется только тогда, когда старшие разряды адресной шины (A15...Ai Ц имеют значение «10000». Однако только этих условий недостаточно для того, чтобы про- цессор мог производить операции считывания или записи в ОЗУ. Интегральная схема ОЗУ должна находиться в активном состоянии при обращении к ней процессора, для чего с вывода М REQ процес- сора должен поступить сигнала «0». Проверку выполнения этого условия осуществляет вентильная схема, собранная на 2-входовом логическом элементе «И-НЕ». На один вход вентильной схемы по- дается сигнал с вывода MREQ процессора, а на второй — с выхода Y0 дешифратора. Если эти сигналы одновременно равны «0», на вы- вод CS устройства памяти поступает сигнал «0», который и активи- - —=—=—=— - 91
4. Цифровые схемы зирует БИС ОЗУ. Так, выбрав на адресной шине один из адресов в диапазоне от 8000Н до 87FFH и послав сигнал «О» с вывода MREQ, процессор обращается к определенной ячейке памяти, расположен- ной в БИС ОЗУ, имеющей объем 2 Кбайта. Восемь выводов шины данных (D7...D0) ОЗУ и процессора со- единены непосредственно. Режим работы ОЗУ (считывание или за- пись) определяется сигналами RD и WR, поступающими от процессора соответст- венно на входы ОЁ (Output Enable) и WE (Write Enable), разрешающие считывание или запись. Итак, мы подключили одну из БИС па- мяти к ЦПУ. Посмотрите еще раз на Рис. 4.16 и проследите порядок прохождения сигналов. Разобравшись в том, как работа- ет одна БИС ОЗУ, перейдем к следующей БИС например, ОЗУ, адреса которого представлены на карте памяти (Рис. 4.14) областью D. Эта область является продолжением области адресов первой БИС — от 8800Н до 8FFFH. Для нее значащие цифры пяти старших разрядов (А15...Ап) адресной шины образуют двоичное число «10001» (Рис. 4.15). Как вы думаете, с какого выхода дешифратора (Рис. 4.16) нужно снять сигнал управления второй БИС ОЗУ? Очевидно, с того выхо- да, на котором значение сигнала равно «0», когда в пяти старших разрядах адресной шины установлено число «10001», то есть с выхо- да Y1. Активизацию второй БИС ОЗУ по сигналу процессора целе- сообразно осуществлять с помощью точно такой же схемы выбор- ки, как и в первом случае. Дешифратор, показанный на Рис. 4.16, имеет всего четыре выхода, что позволяет использовать его для по- строения ОЗУ, состоящего из четырех аналогичных БИС. Соединение ЦПУ с портами ввода-вывода В качестве портов ввода-вывода микрокомпьютера часто ис- пользуются БИС универсального назначения, которые могут про- граммироваться и как порт ввода, и как порт вывода. В числе таких ИС можно упомянуть, например, схемы серий РЮ, PIA и PPI, ко- торые мы рассмотрим более подробно в восьмой главе. Здесь же, в целях изучения самого принципа построения простейших портов 92 - --- -----———=-
4.4. Архитектура микрокомпьютера ввода-вывода, посмотрим, как это можно сделать на основе 8-раз- рядной защелки (74LS373), описанной в предыдущей главе. Зададим область адресов портов ввода-вывода, подключенных к микрокомпьютеру, в диапазоне от 00 до FF в шестнадцатеричной системе (то есть от 0 до 255 при переводе в десятичный формат). Сигналы обращения процессора к определенным адресам портов ввода-вывода так же, как и в случае ОЗУ, передаются по адресной шине. Все адреса портов в области от ООН до 0FFH могут быть представлены 8-разрядными двоичными числами, поэтому для них Достаточно использовать только 8 младших разрядов адресной ши- ны (А7...А0). На Рис. 4.17 показаны схемы портов ввода и вывода, выполнен- ных на 8-разрядных ИС регистра-защелки 74LS373. Как отмеча- лось выше, схемы данной серии относятся к электронным устрой- ствам с Z-состоянием. Это означает, что при значении входного сигнала на выводе ОС, равном «1», выходная цепь схемы отключа- ется от внешних устройств, точнее, переходит в высокоомное («Z») состояние. Когда входной сигнал на выводе G соответству- ет «1», 8-разрядные данные передаются с входов на выходы схемы. При переключении входа G из состояния «1» в состояние «0» пе- редача данных прекращается. Текущие значения данных «защел- киваются» (записываются в регистр) и сохраняются до тех пор, по- ка значение сигнала на входе G остается равным «0». Пусть адрес порта ввода равен 0A0H (Рис. 4.17а). Такой выбор правомерен, поскольку данный адрес не выходит за пределы облас- ти 00H...0FFH. Схема выборки адреса порта, построенная по тому же принципу, что и схема выборки адреса памяти (на Рис. 4.17а не показана), вырабатывает сигнал, принимающий нулевое значение только в том случае, когда значащие цифры восьми младших разря- дов адресной шины образуют двоичное число «10100000», что соот- ветствует шестнадцатеричному коду 0A0H. Вызов процессором данного порта ввода происходит, если од- новременно с сигналом обращения процессора к порту подаются сигналы IORQ и RD, значения которых должны быть равны «0». Для проверки условия поступления всех трех сигналов применяет- ся 3-входовая схема «И-НЕ» с тремя инверторами (вентили «НЕ»), В портах ввода вход G обычно соединяют с положительным полю- 93
4. Цифровые схемы Рис. 4.17. Схемы портов ввода-вывода на основе 8-разрядной защелки (74LS373) д.-ь. ..— 4.4. Архитектура микрокомпьютера В портах вывода вход ОС схемы-защелки обычно соединен с отри- цательным полюсом источника питания, то есть сигнал на этом входе всегда равен «0», и выход защелки находится в активном со- стоянии. Когда все сигналы (сигнал выбора адреса, сигналы IORQ и RD) равны «0», сигнал на выводе G принимает значение «1», во всех остальных случаях он принимает значение «0». Сигнал управления передачей данных на входе G равен «1» лишь при условии, что все три сигнала (сигнал выбора адреса, сигнал IORQ, и сигнал RD) равны «0». При этом данные со входов D0...D7 сжемы-защелки передаются без задержки на выходы О0...О7. Когда значение сигнала на входе G изменяется с «1» на «0», входы D0...D7 «защелкиваются», а информация на этих входах сохраняется до тех пор, пока на входе G, присутствует сигнал «0». В таком состоянии схема остается до следующего обращения процессора к данному пор- ту вывода. Так происходит передача данных от процессора к внеш- ним устройствам, подключенным к выходам О0...О7 порта вывода. Итак, в этой главе мы узнали, каким образом запоминающее ус- тройство подключается к ЦПУ, изучили схемы и работу простейших портов ввода-вывода, построенных на основе ИС 8-разрядных ре- гистров типа защелки. сом источника питания, что соответствует сигналу «1», для того чтобы сигналы с внешних устройств через входы (вводы Iq.-.I?) ав- томатически «проскакивали» защелку, прямо попадая на выходы Do...D7, соединенные с выводами шины данных процессора. Таким образом, данные внешних устройств, подсоединенных к порту ввода, только тогда попадают на шину данных и «доставляют- ся» в процессор, когда ЦПУ вызывает этот порт ввода. В течение всего остального времени, когда ЦПУ не обращается к данному порту ввода, сигнал на входе ОС имеет значение «1». При этом вы- ход интегральной схемы находится в высокоомном состоянии, и порт ввода фактически отключается от ЦПУ. Рассмотрим схему порта вывода, представленную на Рис. 4.176. Будем считать, что адрес этого порта — 0А1Н. В этом случае 8 млад- ших разрядов (A7...Aq) адресной шины должны находиться в состо- янии «10100001». Именно при этом состоянии адресной шины со схемы выборки на один из инверторов, включенных во входную цепь 3-входовой схемы «И-НЕ», поступает логический сигнал «0»- ОБОБЩЕНИЕ ГЛАВЫ 1. В зависимости от способности электронных схем, применяемых в цифровой технике, запоминать состояния на их входах они разделя- ются на два основных класса —комбинационные логические схемы и последовательностные логические схемы. Состояние на выходе ком- бинационной логической схемы полностью определяется текущим состоянием на ее входах (схемы «ИЛИ», «И» и другие вентильные схемы — инверторы, дешифраторы и т. д.). Состояние на выходе по- следовательностной логической схемы зависит не только от значения сигналов в данный, но и в предыдущий момент времени, а также от характера изменения сигнала (триггеры, регистры-защелки и т. д.). 2- Для обмена данными с запоминающим устройством ЦПУ использу- ет адреса ячеек памяти и управляющие сигналы MREQ , RD , WR. 3. Карта памяти служит для указания областей ад- ресов, отведенных для ПЗУ и ОЗУ (Рис. 4.14). 4. Сигнал выборки адреса — это сигнал выбора области памяти, отно- сящейся к данной ИС памяти. 94 95
4. Цифровые схемы — ~ - 5. Дешифратор в схеме соединения ЦПУ с ЗУ используется для под- ключения нескольких интегральных схем памяти. Применение де- шифратора позволяет значительно упростить обращение к каждой из интегральных схем памяти и оставляет возможность увеличивать объем памяти путем подключения дополнительных ИС. Практические задания 1) Используя только логические элементы «И-НЕ», постройте схему «Ис- ключающее ИЛИ» и составьте для нее нее таблицу истинности. 2) На Рис. 4.18 представлен одноплатный микрокомпьютер, состоящий из ЦПУ Z80, двух интегральных схем ПЗУ по 8 Кбайт и одной интеграль- ной схемы ОЗУ емкостью 8 Кбайт. Область адресов ПЗУ 1 — от ООООН до 1FFFH, ПЗУ2 - от 2000Н до 3FFFH, область адресов ОЗУ - от 0A000H до 0BFFFFH. Используя 3-разрядный дешифратор 74LS138 (Рис. 4.9), изобразите на рисунке схему соединения всех интегральных схем с ЦПУ. 96 5 ПРОГРАММЫ МИКРОКОМПЬЮТЕРА Правильно составленная программа решает успех любого дела В предыдущих главах мы уже говорили о том, что программа — это последовательность команд, выполняемых компьютером, и что она хранится в памяти компьютера. По сути, это подробная «инст- рукция» компьютеру относительно действий, которые он должен произвести. Для того чтобы осуществить очередное действие, ком- пьютер считывает из памяти соответствующую команду. Поэтому программа должна быть записана только на том языке, которым вла- деет компьютер. В этой главе мы узнаем, на каком языке составляет- ся программа, заложенная в компьютер, и какие конкретные дейст- вия он может производить в процессе выполнения программы. Как вы уже знаете, любой компью- тер оперирует информацией, представ- ленной в виде сигналов НИЗКОГО и ВЫСОКОГО уровней напряжения, обозначаемых соответственно «О» и «1». Поэтому и язык, на котором составлена программа д ля компью- тера, должен содержать только эти символы. Язык компьютера, со- ставленный из комбинаций символов «О» и «1», называется языком Машинных команд или чаще его называют машинным кодом. Выполняя практические задания к третьей главе, читатели мог- ли убедиться в том, что работать с двоичными числами довольно не- привычно. Кроме того, чтобы приноровиться к специфическому Машинному языку и без ошибок понимать и составлять тексты про- 5.1. «ЛИНГВИСТИЧЕСКИЕ» СПОСОБНОСТИ МИКРОКОМПЬЮТЕРА 97 ’-2970 1
5. Программы микрокомпьютера 5.1. «Лингвистические» способности микрокомпьютера грамм, состоящие из одних только «ноликов» и «единичек», требу- ются определенные навыки. Чтобы облегчить задачу программиро- вания и сделать программы более понятными пользователю («по- мирить» логику компьютерную с логикой мышления человека), разработчики создают языки программирования высокого уровня (Бейсик, Фортран, Кобол, Паскаль и т. д.). Читателям, наверняка, доводилось если не программировать на одном из таких языков, то, по крайней мере, слышать о них. Однако любой язык программиро- вания высокого уровня требует вспомогательной программы, назы- ваемой компилятором, которая переводит программу, написанную на этом языке, на язык машинных команд — единственно доступ- ный для понимания компьютера. На Рис. 5.1 показано, как проис- ходит выполнение программы, написанной на языке Фортран. Со- ставленную программу сначала нужно «оттранслировать», то есть с помощью компилятора преобразовать в «объектную» программу. В соответствии с этой объектной программой, представляющей собой последовательность машинных команд, выполняются вычисления и производится обработка данных. Применение языков програм- мирования высокого уровня позволяет значительно сократить за- пись программы и упростить процесс программирования. Очень длинная последовательность машинных команд, скажем, на языке Фортран становится достаточно компактной. Потому разработчики Фортрана, равно как и других языков программирования высокого уровня, потратили уйму времени в первую очередь для того, чтобы облегчить жизнь себе и другим программистам (в очередной раз подтверждая тезис о том, что лень — двигатель прогресса). Компилятор, транслирующий программы, написанные на язы- ке высокого уровня, на язык машинных команд, представляет со- бой достаточно длинную программу, и для ее размещения в ком- пьютере требуется память большого объема. В отличие от универ- сальных ЭВМ, объем памяти которых позволяет загрузить не- сколько различных компиляторов, при работе с микрокомпьюте- ром память приходится «экономить». Нельзя, к примеру, занести в память 8-разрядного процессора с ЗУ объемом 64 Кбайта компи- лятор языка Фортран или Паскаль. Тем не менее существуют методы, позволяющие пользоваться преимуществами, которые дают языки программирования, при ра- 98 .. Программа, составленная на языке высокого уровня, например Фортране, выполняется только после преобразования ее в последова- тельность машинных команд Рис. 5.1. Схема выполнения программы, написанной на языке Фортран боте и с микрокомпьютерами. Так, компилятор языка Бейсик осу- ществляет трансляцию не всей программы сразу, что потребовало бы большого объема памяти, а отдельными «порциями». Операто- ры («кирпичики», из которых построена программа) поочередно переводятся на машинный язык и выполняются. Такой способ трансляции называется «методом переводчика». Так как модуль программы компилятора, осуществляющий трансляцию одного оператора программы, составленной на Бейсике, занимает в памя- ти всего 2...8 Кбайт, этот язык вполне соответствует «интеллекту- альным возможностям» микрокомпьютера. Как видно из Рис. 5.2, программа на языке Бейсик состоит из операторов. Один оператор может представлять собой арифметиче- сКую операцию, проверку какого-либо условия типа «если..., то...», переход в указанное место программы и т. п. С помощью операто- ров мы можем записать последовательность действий, которую дол- жен выполнить компьютер. га=а=-----------=====---------------------- 99
5. Программы микрокомпьютера ( Программа на Бейсике') Q Программа на языке машинных команд') «Кирпичик» программы — оператор Запись в удобной для пользователя форме Длинную последовательность команд можно записать с помощью одного оператора Нужна программа, преобразующая оператор в последовательность машинных команд Оператор Оператор Оператор Оператор Оператор Оператор Оператор Оператор Оператор «Кирпичик» программы — команда Скорость программирования высокая С Скорость программирования' низкая Рис. 5.2. Структура программы на языке Бейсик и программы на языке машинных команд «Кирпичик» программы на языке машинных команд называется командой. Оператор языка Бейсик — это «строительный блок», за- меняющий несколько таких кирпичиков. Поэтому, составляя про- грамму на Бейсике, мы избавлены от необходимости четко пред- ставлять себе «ход мышления» компьютера, знать и понимать со- держание большого количества машинных команд. В качестве языка программирования контроллеров обычно ис- пользуется язык Си. По сравнению со многими другими распрост- раненными языками программирования язык Си наиболее близок к языку машинных команд. Преимущество языка Си заключается в том, что одновременно с разработкой нового типа процессора на потребительский рынок поставляется и компилятор для языка Си. Следовательно, ваш труД- затраченный на составление программы для микрокомпьютера на языке Си, не пропадет впустую, даже если вам не удастся приобре' сти процессор именно того типа, на который вы первоначально 100
г gg. 5.2. О том, что такое «мнемоника» и как она заменяет машинный код рассчитывали. Правильно составленная программа на языке Си бу- дет также исправно работать с любым другим процессором. Однако в этой главе, чтобы разобраться в работе процессора, мы рассмотрим другой метод программирования — язык ассемблера, который, как нам кажется, позволяет легко проследить «механизм» выполнения операций микрокомпьютером. В ассемблере машин- ный код преобразуется в буквенные аббревиатуры, «прозрачно» на- поминающие программисту функцию каждой команды. Об этом более подробно будет рассказано в следующем разделе (5.2). В отли- чие от универсального языка Си язык ассемблера имеет несколько модификаций, соответствующих конкретным типам процессоров. Это означает, что программу, написанную на языке ассемблера для одного процессора, нельзя использовать для процессоров более по- здних разработок. Тем не менее мы полагаем, что изучение основ языка ассемблера, написанного для процессора Z80, окажется по- лезным при освоении других языков программирования, в том чис- ле и при составлении программ на языке Си. В данном случае язык ассемблера ЦПУ Z80 нам нужен не ради изучения самого языка. Главная задача заключается в том, чтобы понять, каким образом процессор, который может «считать только до двух», оперируя «но- ликами» и «единичками», быстро и без ошибок выполняет разнооб- разные достаточно сложные операции. Структурная единица машинного языка — команда. Существует несколь- ко сотен команд, причем они незначи- тельно различаются в зависимости от типа ЦПУ. Каждая команда, как нам известно, представляет собой комбина- цию сигналов «О» и «1». Минимальная длина одной команды — 8 раз- рядов (1 байт), максимальная — 32 разряда (4 байта). Когда в память Микрокомпьютера заносится команда (Рис. 5.3), то по одному адресу (в одну ячейку памяти) можно поместить число размером не более (и Не менее) чем в один байт. Поэтому при записи «длинных» машинных Команд в память ЦПУ их нужно «порезать» на куски «длиной» в один байт и последовательно разместить в ячейках памяти. Рассмотрим конкретные примеры машинных команд. Напри- мер, если команду «сложить А и В» представить двоичным числом, 5.2. О ТОМ, ЧТО ТАКОЕ «МНЕМОНИКА» И КАК ОНА ЗАМЕНЯЕТ МАШИННЫЙ КОД 101
5. Программы микрокомпьютера Рис. 5.3. Размещение команд в памяти ЦПУ Г -g— 5.2. О том, что такое «мнемоника» и как она заменяет машинный код Ассемблер — как раз один из тех методов записи команд, кото- рый выражает их смысл несколькими символами в форме, удобной для запоминания. Например, команда «ADD А, В» представляет со- бой сокращенную запись английской фразы «ADD В to А», что оз- начает «прибавить В к А». Соответственно команда «послать содер- жимое регистра А в порт вывода по адресу 1» в переводе на язык ас- семблера записывается примерно так: «Output A to port 1». Только в языке ассемблера она сокращается до выражения «OUT (01Н), А». Все команды языка ассемблера полностью соответствуют машин- ным командам, в частности команда «ADD А, В» соответствует ко- манде «80Н», a «OUT (01Н), А» - «D301H». Язык ассемблера построен по так называемому «мнемоническо- му» принципу. (Слово «мнемоника» в русском языке означает «тех- ника запоминания».) Действительно, сокращения типа «ADD», «OUT» вызывают (у тех, кто немного знаком с английским языком) ассоциации, способствующие запоминанию команд языка про- граммирования. Согласитесь, это гораздо проще, чем запомнить сотню двоичных чисел с разрядностью не менее 8. «Раскусив» достоинства языка ассемблера, мы сначала составля- ем программу именно на нем. Затем по таблице соответствия преоб- разуем команды ассемблера в машинные команды. Такой процесс преобразования называется ручным «ассемблированием». Но лучше поручить процедуру этого преобразования самому компьютеру. Программа преобразования ассемблера в машинный язык называет- то получим: «10000000». Команда «переслать А в порт вывода по ад- ресу 1» занимает 2 байта и записывается как: «11010011 00000001». Поскольку запись команд в двоичной системе весьма неудобна (приходится записывать большое количество символов), команды машинного языка обычно представляют шестнадцатеричными чис- лами. Рассмотренные выше команды в шестнадцатеричной форме записи принимают следующий вид: «80Н» и «D301H». Как видим, запись команд в шестнадцатеричной системе оказы- вается достаточно компактной, однако столь же трудной для запо- минания, как и в двоичной системе. Действительно, для того чтобы запомнить порядка сотни команд, аналогичных рассмотренным выше, требуется приложить немало усилий. 102 Ассемблер — мнемонический аналог машинного языка Машинный язык 80 (10000000) Смысл команды Add В to А Прибавить В к А Ассемблер ADDA, В D301 (11010011 00000001) ( Числовой код Output A to port 1 Послать содержимое А в порт 1 Сокращенную запись легче запомнить, чем числовой код. Одному числу соответствует один символ OUT (01Н), А (Сокращенная запись ==2^==™^^^ ЮЗ
5. Программы микрокомпьютера ся программой «дисассемблирования». Она за- нимает в памяти ЦПУ всего несколько Кбайт и, следовательно, не слишком «обременяет» мик- рокомпьютер. Целесообразно использовать программу дисассемблирования, которая раз- рабатывается для каждого конкретного типа микропроцессора фирмой-производителем. Нам кажется, что приведенных доводов в пользу языка ассемблер, вполне достаточно, чтобы убедить читателя, всерьез заинтересо- вавшегося микрокомпьютерной техникой, изучить этот метод про- граммирования. На Рис. 5.4 показана структура команды языка ассемблера. Еди- ничная команда состоит из мнемонического кода команды, соот- ветствующего глаголу английского языка, и обозначений «операн- дов» — объектов, над которыми производится операция. Существует около 70 видов мнемонических кодов команд типа «ADD», «OUT» и т. д. «А, В» или «(01Н), А» — это операнды. Опе- ранд, записанный сразу после кода команды, называется первым операндом; после первого через запятую записывается второй опе- ранд. Однако бывают команды и без операндов. Если при одинако- вых мнемонических кодах команд операнды различны, то и соот- ветствующие им машинные команды, естественно, отличаются. Структура команды языка ассемблера Команда = глагол + объект Мнемонический Операнды код команды Пример: команда сложения = ADD А, В Команда вывода = OUT (01Н),А Мнемонический код команды .....Выражает смысл операции: ADD, OUT. Сокращение из 2...4 букв («мнемокод») Операнды ....Некоторые команды используются без операндов. Операнды разделяются запятой Используемые символы Буквы английского Цифры 0...9, алфавита A...Z, запятая, двоеточие, скобки точка с запятой Рис. 5.4. Структура команды языка ассемблера 104
5.3. Схема выполнения команды Таким образом, используя 70 различных кодов операций и комби- нируя операнды, можно составить порядка 700 команд, соответст- вующих различным машинным командам. Если мы хотим научиться общению с иностранцами на англий- ском языке и уметь выражать свои просьбы, намерения, идеи и чув- ства, мы должны знать значения большого количества слов и выра- жений. В сравнении с этим задача общения с компьютером куда бо- лее простая. Достаточно знать значения и правила употребления всего лишь 70 символических сокращений, чтобы однозначно «объ- яснить» компьютеру порядок действий при выполнении какой-ли- бо конкретной задачи. Команды языка ассемблера (будучи «двойниками» машинных ко- манд) разработаны, исходя из устройства и принципа работы ЦПУ ми- крокомпьютера. Поэтому для понимания смысла команд этого языка важно знать, в каком порядке процессор выполняет каждую из них. 5 3 Как мы уже неоднократно говори- СХЕМА ВЫПОЛНЕНИЯ ли’ пРогРамма - это последователь- КОМАНДЫ ность команд, которую должен выпол- нить компьютер и которая размещена в его памяти по порядку адресов. Процессор поочередно считывает команды из памяти (операция чтения); расшифровав код команды, определяет ее назначение (операция декодирования) и, в зависимос- ти от содержания команды, выполняет нужное действие над операн- дами (операция выполнения). Основные этапы выполнения команды = операция чтения + операция декодирования + операция выполнения Выполнение программы — это многократное повторение этих трех основных этапов. Во второй главе мы получили основные сведения об устройстве ЦПУ (Рис. 2.5), одним из элементов которого является 16-разрядный регистр, называемый счетчиком команд или программным счетчи- ком (PC). Счетчик команд указывает адрес очередной команды, вы- полняемой процессором. ЦПУ, установив на шине адреса 16-разряд- ное числовое значение, указанное счетчиком команд, выполняет операцию считывания информации по этому адресу (точнее, из ячейки памяти, имеющей данный адрес). Затем с помощью дешиф- 105
5. Программы микрокомпьютера ратора команд выполняется операция декодирова- ния. Для этого дешифратор команд помещает ко- манду (8-разрядное число), считанную из памяти, в регистр команд и, в зависимости от комбинации сигналов «О» и «1» на входах, определяет, какую операцию требуется произвести. Затем он посыла- ет соответствующие «указания» в АЛУ. Каждый из этих этапов (тактов) синхронизируется импульса- ми тактовой частоты, поступающими на ЦПУ, и выполняется строго в определенные для этого эта- па интервалы времени. Аналогично операциям считывания и декодирования выполня- ются и все прочие команды. Эта последовательность этапов, произ- водимая в указанном порядке, называется машинным циклом. На Рис. 5.5 показана временная диаграмма машинного цикла. Цикл начинается с того, что значение, указанное счетчиком ко- манд, «выставляется» на шину адреса, и в память ЦПУ посылается информация об адресе команды (1). Затем, чтобы перейти к опера- ции считывания кода следующей команды, к содержимому счетчи- ка команд прибавляется 1. Далее на входы ОЗУ подаются сигнал об- ращения к памяти MREQ (2) и сигнал считывания данных RD (3). Эти сигналы переводят соответствующие входы в состояние «О», обеспечивая ЦПУ возможность в любой момент «прийти» за дан- ными. После этого процессор «захватывает» шину данных, считы- вает код команды из памяти и помещает его в регистр команд (4). Наконец, дешифратор команд расшифровывает команду и посыла- ет указания в АЛУ для ее выполнения (4). После окончания данно- го машинного цикла начинается цикл выполнения, содержание ко- торого определяется типом команды. Время, требуемое для выполнения машинного цикла, — 4 пе- риода импульсов тактового генератора (такой процессор называют 4-тактовым). Тактовая частота ЦПУ Z80 равна 2.5 МГц (в Z80A — до 4 МГц), что соответствует периоду тактового импульса 0.4 мкс (0.4х10‘6 с). Следовательно, один машинный цикл продолжается 1.6 мкс. Для выполнения команд ЦПУ Z80 требуется от 4 до 23 им- пульсов тактовой частоты (от 1.6 до 9.2 мкс). Так, следуя импуль- сам тактовой частоты, ЦПУ последовательно выполняет команды программы одну за другой. 106
5.3. Схема выполнения команды Машинный цикл[ ЦПУ Память Адрес Содержимое ячейки памяти Счетчик команд Шина адреса Импульсы тактовой частоты Шина данных MREQ © з RD WR ячейки памяти Машинный цикл Шина данных Время Рис. 5.5. Временная диаграмма машинного цикла 107
5. Программы микрокомпьютера 5.3. Схема выполнения команды Рассмотрим последовательность выполнения, например, коман- ды «ADD А, В». На машинном языке «Z80» это 1-байтовая команда которая обозначает следующую последовательность операций: «вы- полнив в АЛУ сложение содержимого регистра А и содержимого ре- гистра В, расположенных в ЦПУ, поместить результат этой опера- ции в регистр А». Поскольку все устройства (оба регистра — А и В и АЛУ), используемые при выполнении этой команды, находятся в процессоре, для ее выполнения достаточно одного машинного цик- ла. Получив указание от дешифратора команд, ЦПУ мгновенно его выполняет. Точнее, непосредственное выполнение этой команды происходит в течение 4-го периода (Т4) импульсов тактовой часто- ты машинного цикла, показанного на Рис. 5.5. То есть число им- пульсов, требуемых для выполнения всей команды, так же, как и для машинного цикла, равно 4. Команда «OUT (01Н), А» на языке ассемблера соответствует 2- байтовой машинной команде «D301». В этом случае в течение перво- го машинного цикла из памяти считывается 1 байт: «D3». Расшифро- вав его, ЦПУ «узнает», что смысл очередной команды заключается в том, чтобы «содержимое регистра А послать в какой-то порт вывода». Далее, выполнив считывание из памяти содержимого 2-го байта — «01» (следующие 3 импульса тактовой частоты), ЦПУ определяет ад- рес порта. К этому моменту становится окончательно ясным смысл всей команды «D301». Затем осуществляется запись в порты ввода- вывода (4 импульса тактовой частоты). Этим и завершается выполне- ние данной 2-байтовой команды. Итак, число импульсов тактовой частоты, требуемое для выпол- нения команды «OUT (01Н), А» равно: 4 + 3 + 4=11. При выполнении команды размером 3 байта для считывания полного кода команды требуется 3 машинных цикла, а для коман- ды, занимающей 4 байта, цикл считывания кода команды из памя- ти повторяется 3 раза. Вообще чем длиннее команда, тем больше времени требуется с момента считывания этой команды до завер- шения ее выполнения. Существует несколько способов занесения программы на языке машинных команд в память микрокомпьютера. При массовом про- изводстве однотипных изделий одна и та же программа разрабатыва- ется на стадии конструирования и заносится в ПЗУ (Рис. 2.7) заво- дом-изготовителем. Чтобы занести программу в память микрокомпь- 108 ----- — . — ЦПУ 4 «стартует» по сигналу сброса ютера на некоторый относительно продолжи- тельный период времени, мы записываем ее в ППЗУ с помощью устройства, называемого программатором. Если использовать в качест- ве устройства памяти микрокомпьютера ППЗУ, в которое записана программа, то ЦПУ будет поочередно считывать команды из ППЗУ и выполнять их. «Перезапуск» про- граммы, то есть перевод счетчика команд в начальное состояние, происходит после подачи на вход ЦПУ сигна- ла сброса RESET (Рис. 2.4). 1-байтовая команда = машинный цикл + цикл выполнения (про- стые команды выполняются в пределах одного машинного цикла) 2-байтовая команда = машинный цикл + цикл чтения из памяти + цикл выполнения 3-байтовая команда = машинный цикл + цикл чтения из памяти х 2 + цикл выполнения Сигнал запуска ЦПУ Если на ЦПУ подан сигнал сброса (перезапуска), то в счетчике команд устанавливается значение «0000Н»; ЦПУ считывает команду, код которой записан в ячейке с адресом 0000Н и начинает ее выполнять А<с. 5.6. Приведение ЦПУ в состояние готовности осуществляется по сигналу сброса (перезапуска) 109
1 5. Программы микрокомпьютера —............... •— - -=а Когда на вход RESET ЦПУ приходит сигнал сброса «О», проис- ходит считывание содержимого ячейки с адресом 0000Н. С коман- ды, записанной по этому адресу, начинается выполнение програм- мы. Затем ЦПУ по порядку выполняет все остальные команды, за- писанные каждая по своему адресу. Следовательно, программа, вве- денная в микрокомпьютер, должна быть занесена в память начиная с нулевого адреса, то есть с адреса 0000Н. ОБОБЩЕНИЕ ГЛАВЫ ~~ 1. Все компьютеры выполняют программы, составленные исключи- тельно на языке машинных команд данного компьютера. Програм- ма, написанная на любом другом языке, например на языке Форт- ран, выполняется после компилирования — преобразования ее в по- следовательность машинных команд. 2. Язык ассемблера позволяет представить команды машинного языка в компактном, удобном для запоминания виде. На примере текстов программ на языке ассемблера можно проследить, как происходит обмен данными между ЦПУ и портами ввода-вывода и т. д. 3. Работа ЦПУ осуществляется путем многократного повторения одно- типных операций (считывание команды из памяти, расшифровка команды, подготовка к ее выполнению, выполнение команды), об- разующих машинный цикл (Рис. 5.5). 4. Основными операциями при выполнении команды являются: опе- рация чтения + операция расшифровки (декодирования) + опера- ция выполнения. Практические задания 1) Объясните, какую роль при выполнении программы играет счетчик ко- манд (PC), являющийся одним из регистров ЦПУ. 2) Какое значение будет занесено в счетчик команд, если на ЦПУ подать сигнал сброса (перезапуска)? Что это означает? 3) Операторы языка ассемблера взаимно-однозначно соответствуют ко- мандам машинного языка. Объясните структуру языка ассемблера. 4) Чем определяется время, требуемое для выполнения конкретной ко- манды? 110
6 ВВЕДЕНИЕ В МАШИННЫЙ ЯЗЫК Взаимопонимание начинается с контакта В этой главе мы рассмотрим содержание и принцип выполнения наиболее часто употребляемых команд ЦПУ Z80. Машинные команды выполняются с использованием регистров процессора. Чтобы понять, как осуществляется этот процесс, необ- ходимо ознакомиться с назначением и устройством регистров ЦПУ. 6,-|. На Рис. 6.1 показаны ре- НАЗНАЧЕНИЕ гистры ЦПУ Z80, использу- РЕГИСТРОВ ЦПУ емые при выполнении ко- манд программы. Каждый из регистров A, F, В, С, D, Е, Н и L имеет 8 разря- дов, а регистры IX, IY, SP и PC — 16-разрядные. Кроме того, пары регистров Ви С, D и Е, Н и L можно использовать в качестве 16-разрядных реги- стров. В процессоре Z80, кроме главных регистров A...L, есть дополнительные регистры A Для того чтобы научиться составлять программы, необходимо изу- чить свойства и возможности регистров и правильно их использовать. Регистры А и F, предназначенные для хранения результатов вычислений Регистр А — наиболее часто используемый из всех регистров ЦПУ. При выполнении арифметических и логических операций с ^-разрядными числами одно из них всегда помещается в регистр А. 111
6. Введение в машинный язык Основные регистры Регистр флагов Аккумулятор (признаков) Q А(8) | ч-------------J Si к 3 s | В(8) HZcQOll I р(8) НИРП || | Н(8) Дополнительные регистры (j А'(8) | | F’(8) |) В'(8) Н~ С'(8) | | D'(8) | Н'(8) ЮЩ Число в скобках обозначает разрядность регистра 1Х(16) Специальные регистры 1У(16) Индексные регистры I SP(16) | Указатель стека I РС(16) | Счетчик команд I 1(8) | Регистр прерываний (используется для обслуживания прерываний, назначение станет ясным из следующих глав) Рис. 6.1. Регистры ЦПУ Z80 Восьмиразрядное число, являющееся результатом вычисления, вы- полненного АЛУ, как правило, также помещается в регистр А. Свойства регистра А, часто называемого аккумулятором, показаны на Рис. 6.2. Перед выполнением арифметической операции сложения пер- вое слагаемое помещается в регистр А. Число, которое прибавляют к содержимому аккумулятора, вызывается по заданному в команде адресу или считывается из указанного в команде регистра. Резуль- тат операции также помещается в регистр А. Следовательно, дан- ные в регистре А до вычисления и после него различны. Регистр F называют регистром «флагов» или «признаков». Он содержит 6 флагов, описывающих признаки результатов действия различных команд. Содержимое каждого из флагов, представлен- ное двоичными цифрами «О» или «1», определяет одну из особенно- стей результата. Структура регистра F показана на Рис. 6.3. 112
6.1. Назначение регистров ЦПУ Рис. 6.2. Регистр А — аккумулятор Регистр флагов (признаков) F Запоминает особенности результата выполнения команды f2 fl f0_ _ ( Надо бы ' запомнить 1 назначение флагов С, Zu S z H P/V Флаг нуля. Значение флага «I», если результат равен О Флаг четности' /переполнения. Флаг половинного переноса Флаг знака. Результат положительный или отрицательный ? Если отрицательный — «1» Флаг вычитания. Если выполняется вычитание, то в этом разряде уста- навливается «1» Флаг переноса. Если был перенос из старшего разряда при сложении или заем разряда при вычитании, то в этом разряде устанавливается «1» : неиспользуемые разряды /j : флаги специального назначения f1 Ч________f4 N s Рис. 6.3. Регистр F (регистр флагов) 113
6. Введение в машинный язык Нулевой разряд, называемый флагом С (флагом переноса), при- нимает значение «1», если при вычислении был перенос из старше- го разряда (например, в операции сложения), и значение «О», если переноса не было. Шестой разряд (7-й по порядку), называемый флагом Z (флагом нуля), принимает значение «1», если 8-разряд- ный результат операции, находящийся в регистре А, равен 0, и при- нимает значение «О», если этот результат отличен от 0. Помимо этих флагов, в регистре есть флаг N, который указывает, какая операция — сложение или вычитание — была выполнена, и флаг S, указыва- ющий знак результата. Содержимое регистра признаков сохраняется до следующей операции сложения, вычитания или сравнения. Есть команды, которые не изменяют содержимое регистра F, равно как и такие, результат действия которых зависит от содержимого регистра F. Поэтому мы каждый раз должны учитывать возможность измене- ния содержимого регистра F в результате выполнения той или иной команды. Регистры общего назначения — «записная книжка» процессора К регистрам общего назначения относятся регистры В, С, D, Е, Н, L (все 8-разрядные). Их основная функция — служить «записной книжкой» ЦПУ для временного хранения проме- жуточных результатов операций. Поскольку эти регистры находятся в самом процессоре, считы- вание и запись их содержимого осуществляется быстрее, чем при обращении к ЗУ. Каждая пара регистров Ви С, D и Е, Н и L образует 16-разряд- ный регистр. Шестнадцатиразрядные регистры ' могут, например, потребоваться для временного хранения адресов. Кроме того, ЦПУ Z80 произво- дит операции с 16-разрядными числами. В этом случае пара регистров Н-L выполняет функцию аккумулятора. Регистр В используется в качестве счетчика, задающего число повторений какой-либо операции (см., например, описание коман- ды DJNZ, приведенное ниже). Регистр С обычно применяется в качестве указателя адреса пор- та при выполнении команды ввода-вывода. 114 .= = ==. =. = ---------- ---------------------
6.1. Назначение регистров ЦПУ Пара регистров Н-L часто используется для указания косвенно- го адреса, то есть содержит 16-разрядный адрес. Например, коман- да сложения «ADDA, (HL)» означает, что содержимое ячейки памя- ти с адресом, указанным в сдвоенном регистре Н-L прибавляется к содержимому регистра А. Таким образом, существует определенная дифференциация ре- гистров общего назначения. И если правильно использовать свой- ства регистров, составление программы во многих случаях значи- тельно упрощается. Дополнительные регистры — «дублеры» главных регистров В ЦПУ Z80 имеется еще одна группа регистров, аналогичных ре- гистрам A, F, В, С, D, Е, Н и L. Их называют дополнительными ре- гистрами и обозначают с помощью символа «'». При этом имеется в виду, что нельзя одновременно использовать и главные регистры (A...L), и дополнительные (А7...!/) так же, как нельзя одновременно выпустить на сцену актера и его дублера. В В процессе выполнения программы, когда происходит переход На программу обработки прерывания или на подпрограмму, бывают случаи, когда необходимо на время «спрятать» содержимое главных регистров в дополнительные регистры. Для этого предусмотрены 115
6. Введение в машинный язык команды обмена, с помощью которых происходит взаимный обмен содержимого главных и дополнительных регистров. Например, по команде «ЕХ AF, AF'» содержимое пары регистров A-F меняется на содержимое соответствующих дополнительных регистров A'-F'. Команда «ЕХХ» одновременно производит взаимную замену дан- ных, содержащихся в регистрах общего назначения В, С, D, Е, Н и L, на данные, хранящиеся в соответствующих дополнительных ре- гистрах. Все остальные команды обмена, кроме двух указанных, ра- ботают только с основными регистрами. Регистры — указатели адреса IX и IY 16-разрядные регистры IX и IY называются индексными регистра- ми. Они выполняют одну и ту же функцию и применяются при кос- венной адресации для хранения адреса памяти. Например, если в па- мяти хранится таблица данных, то в индексный регистр заносится ад- рес «вершины таблицы», а адреса остальных данных указываются от- носительно вершины таблицы. Например, команда «ADD A, (IX+3)» означает, что к содержимому регистра А прибавляется содержимое ячейки памяти с адресом, равным сумме: адрес регистра IX + 3. Счетчик команд (PC) и указатель стека (SP) Счетчик команд (PC) и указатель стека (SP) — это 16-разрядные регистры, каждый из которых выполняет только одну-единствен- ную функцию. Из предыдущей главы мы знаем, что счетчик ко- манд — это регистр, указывающий в памяти адрес очередной ко- манды, выполняемой ЦПУ. Обычно при выполнении программы двоичное число, содержа- щееся в счетчике команд, при переходе к следующей команде увели- чивается на 1. Соответственно по возрастающей изменяется и адрес очередной команды. Однако если при выполнении программы тре- буется переход на другую программу, то непосредственно перед этим переходом содержимое счетчика команд должно измениться. Когда в процессе выполнения программы происходит переход на подпрограмму или на программу обработки прерывания, то после выполнения этих программ необходимо вернуться в исходную про- грамму. Следовательно, при выходе из исходной программы мы должны занести в память адрес возврата в программу. Адрес ячейки памяти, куда заносится адрес возврата, помещается в 16-разрядный 116
6.2. Команда загрузки данных (LOAD) регистр, называемый указателем стека. Более подробно функции указателя стека мы рассмотрим в разделе 6.6, когда будем знако- миться с назначением команд, с помощью которых организуется ра- бота подпрограмм. Итак, мы узнали наименования и познакомились с назначением регистров ЦПУ Z80. Следующий раздел посвятим рассмотрению основных команд. 6.2. КОМАНДА ЗАГРУЗКИ ДАННЫХ (LOAD) Перенос данных, находящихся в па- мяти или регистре ЦПУ, в другой ре- гистр или другую ячейку памяти назы- вается загрузкой данных. Команда за- грузки (Load) является одной из основ- ных команд и применяется чаще других. Она имеет вйд, представ- ленный на Рис. 6.4. Команда загрузки LD а, Данные источника b транслируются в приемник а ] I-----Источник I ) Операнды --------- Приемник J -------------Сокращение слова Load (загрузить)...Мнемокод Источник Ь: регистр, константа, (регистр), (константа) Приемник а: регистр, (регистр), (константа) Скобки обозначают адрес. На самом деле, нельзя переслать данные непосредственно из одной ячейки памяти в другую Лгс. 6.4. Структура команды загрузки (LD) Операнды а и b обозначают соответственно источник данных (место, откуда считываются данные) и приемник (место, куда запи- сываются данные). Источник и приемник представляют собой ре- гистр или константу, либо регистр или константу, заключенные в скобки. В последнем случае константа или содержимое регистра яв- ляются адресом. Например, (0100Н) означает содержимое памяти по адресу 0100Н; (HL) — содержимое ячейки памяти, значение адреса 117
6. Введение в машинный язык которой указано парой регистров Н-L. После выполнения команды загрузки содержимое приемника изменяется, а данные, которые со- держались в источнике до выполнения команды, сохраняются. В зависимости от комбинации типов операндов (источника и при- емника) оператор загрузки производит пересылку данных различны- ми способами, за исключением прямой пересылки данных из одной ячейки памяти в другую. Сначала содержимое ячейки памяти пересы- лается в регистр А, а затем данные из аккумулятора А пересылаются в ячейку памяти по указанному адресу приемника. То есть в этом случае команда загрузки D выполняется дважды. В Табл. 6.1 представлены различные типы команд загрузки на языке ассемблера и соответствующие им машинные коды ко- манд. В таблице также дано описание операций и указано коли- чество импульсов тактовой частоты, необходимое для их выпол- нения. Таблица 6.1. Примеры команд загрузки Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты LDB, А 47 (1-байтовая команда) Содержимое регистра А пересылается в регистр В 4 LD D, 0А5Н 16 А5 (2-байтовая команда) Константа А5 (шестнадцате- ричное число) загружается в регистр D 7 LDC, (HL) 4Е " ' 1 г Содержимое памяти по адресу, указанному парой регистров Н-L, пересылается в регистр С 7 LDA, (2001Н) ЗА 01 20 (3-байтовая команда) Содержимое ячейки памяти 2001Н пересылается в регистр А 13 LD (8000Н), А 32 00 80 J т Содержимое регистра А пересылается в ячейку памяти 8000Н 13 LDE,(IX+03H) DD 5ЕОЗ Содержимое ячейки памяти с адресом, равным сумме значения содержимого регистра IX и 3, пересылается в регистр Е 19 118
6.3. Команды арифметических операций Как видно из таблицы, машинные коды команд загрузки значи- тельно отличаются друг от друга (вообще их более 100 видов). Сравне- ние требуемого количества импульсов тактовой частоты показывает, что пересылка данных между регистрами требует значительно меньше времени, чем обмен данными между ЦПУ и устройством памяти. Команды сложения и вычитания , В языке ассемблера используются че- КОМАНДЫ АРИФМЕТИЧЕСКИХ ТЫре ввда команд сложения и вычита- ОПЕРАЦИЙ ния’ К0Т0Рые выполняют арифметичес- кие действия с двоичными числами, хра- нящимися в регистрах или ячейках памяти. Эти 8-разрядные ко- манды представленны в ТЬбл. 6.2. Таблица 6.2. Команды сложения и вычитания Команда языка ассемблера Выполняемые операции Сокращенные обозначения операций ADDA, S Прибавить S к A (Add S to А) А<—A + S ADCA, S Сложение с переносом (Add S to A with Сапу) А<- А + S + С SUB A, S Вычесть S из A (Subtract S from А) A<-A-S SBCA, S Вычитание с переносом (Subtract S from A with Carry) A<-A-S-C Источник S: константа, регистр, содержимое памяти, (HL) и т. д. Перенос С: значение флага переноса (в 0-м разряде регистра F). Слагаемое и уменьшаемое, а также результат операций сложения и вычитания всегда помещаются в регистр А (Рис. 6.2). Буква С в обозначении команд сложения и вычитания с перено- сом («ADC» и «SBC») — это сокращение выражения «with Carry» (с Переносом). Если перед выполнением команды ADC произошел Перенос разряда, то в разряде С регистра признаков устанавливает- ся значение «1». В этом случае при сложении по команде ADC к сумме операндов добавляется 1. i Команды сложения и вычитания с переносом применяются,; Когда разрядность двоичных чисел больше восьми. Такие числа Разбиваются на части по 8 разрядов. Тогда, например, при сложе- нии 8 старших разрядов учитывается, был или нет перенос разряда При суммировании 8 младших разрядов. 119
6. Введение в машинный язык В Z80 посредством команды ADD возможно также выполнение операции сложения 16-разрядных чисел. В этом случае роль акку- мулятора выполняет пара регистров H-L. В Табл. 6.3 приведены примеры команд сложения и вычитания с применением операторов ADD и SUB. Таблица 6.3. Примеры команд сложения и вычитания Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты ADDA 1FH C61F Константа 1F (шестнадцатеричное число) прибавляется к содержимому регистра А результат помещается в регистр А 7 ADDA (HL) 86 Содержимое ячейки памяти с адресом, указанным в регистрах H-L, прибавляется к содержимому регистра А результат помещается в регистр А 7 SUB А в 90 Из содержимого регистра А вычитается содержимое регистра В, результат помещается в регистр А 4 ADD HL, ВС 09 Сложение 16-разрядных чисел. К содержимому регистра H-L прибавляется содержимое регистра В-С, результат помещается в регистр H-L И ADD A A 87 Содержимое регистра А удваивается 4 SUB A, A 97 Содержимое регистра А обнуляется 4 При выполнении команд сложения и вычитания содержимое ре- гистра признаков меняется в соответствии с результатом вычисления. Например, когда происходит перенос разряда при сложении или заем разряда при вычитании, флаг переноса принимает значение «1». Команды увеличения (INC) и уменьшения (DEC) на 1 В случаях, когда вычисления повторяются (например, данные из ячеек памяти последовательно загружаются в память), для подсчета числа выполняемых операций часто требуется увеличение или уменьшение некоторой переменной на 1. В этом случае обычно ис- пользуют команды INC (увеличение) или DEC (уменьшение), в ре- зультате которых содержимое памяти или регистра соответственно увеличивается или уменьшается на 1. В Табл. 6.4 приведены приме- ры команд с операторами INC и DEC. 120 =— —=—°— - —=====
6.3. Команды арифметических операций Таблица 6.4. Примеры команд с операторами INC и DEC Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты INCA ЗС К содержимому регистра А прибавляется I 4 INC (HL) 34 К содержимому ячейки памяти с адресом, указанным в сдвоенном регистре H-L, прибавляется I 11 DEC HL 2В Из содержимого пары регистров H-L (16-разрядное число) вычитается 1 6 «INC» — сокращение слова Increment (увеличение), «DEC» — сокращение слова Decrement (уменьшение). В результате применения операторов INC и DEC содержимое флага переноса С не меняется. Команда сравнения (СР) При составлении программы достаточ- но часто возникает необходимость срав- нить значения двух переменных и, в зави- симости от результата, выполнить те или иные действия. Команда сравнения (Compare) путем вы- читания одного числа из другого сравнивает содержимое регистра А с содержимым друго- го регистра или ячейки памяти. Результат сравнения помещается в регистр флагов. Команда сравнения (Табл. 6.5) выполняет вычитание по фор- муле «А — и». Отличие команды сравнения от команды вычитания «SUB и» состоит в том, что в результате применения оператора СР содержимое регистра А не меняется. Использование оператора сравнения в комбинации с оператором условного перехода позво- ляет осуществить, например, следующее действие: «если содержи- мое регистра А больше некоторого значения, перейти на другой адрес». В Табл. 6.6 приведены примеры применения оператора сравнения. 121
6. Введение в машинный язык 6.4. Команды логических операций Таблица 6.5. Команда сравнения Команда языка ассемблера Выполняемая команда Действие Регистр флагов СР л Сравнить Ас п (Compare A with п). п — константа, регистр, (Н-L) и т. д. А - л. Содержимое регистра А не меняется Если А > л, то С = 0, Z = Q если А - л, то Z = I; если А < л, то С = I Таблица 6.6. Примеры команд сравнения Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты СРВ В8 Содержимое регистра А сравнивается с содержимым регистра В 4 СР64Н FE 64 Содержимое регистра А сравнивается с константой 64Н 7 СР (HL) BE Содержимое регистра А сравнивается с содержимым ячейки памяти по адресу, указанному в сдвоенном регистре H-L 7 Отличия команды сравнения и команды вычитания Обе команды «СР п» и «SUB л» производят операцию вычитания А - п, но: при выполнении [ содержимое регистра А не меняется, команды сравнения 1 Результат сравнения помещается в регистр [ флагов ’ результат вычитания помещается в регистр А, при выполнении ( команды вычитания- содержимое флага Nрегистра признаков изменяется 6.4. КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ Как мы уже говорили в третьей главе, мик- рокомпьютер может выполнять операции с ло- гическими переменными, такие как, напри- мер, логическое умножение «И», логическое сложение «ИЛИ», «Исключающее ИЛИ» и т. п- Эти операции поразрядно выполняются над 8-разрядными числа- ми, одно из которых находится в регистре А. Результат логической операции также помещается в регистр А. Аналогичная операция вычисляет дополнительный код числа, находящегося в регистре А. Команды «И», «ИЛИ», «Исключающее ИЛИ» Как видно из Табл. 6.7, структура логических операторов «И» (AND), «ИЛИ» (OR), «Исключающее ИЛИ» (XOR) одна и та же. Таблица 6.7. Операторы «И», «ИЛИ», «Исключающее ИЛИ» Команда языка ассемблера Действие ANDS ORS XORS Поразрядно выполняется логическое умножение, логическое сложение, «Исключающее ИЛИ» между двоичными кодами, находящимися в регистрах А и S. Результат помещается в регистр А S — константа, регистр, адрес ячейки памяти, хранящийся в сдвоенном регистре H-L и т. п. Оператор «И» часто используется для того, чтобы выборочно ос- тавить неизменным содержание определенных разрядов регистра А, обнулив остальные разряды (Рис. 3.11). Например, если мы хотим сохранить 2-й и 3-й разряды числа, находящегося в регистре А, а ос- тальные разряды обнулить, то производим логическое умножение на 8-разрядное двоичное число, второй и третий разряды которого равны «1», а остальные — «О». В этом случае мы применяем коман- ду «AND ОСН», где шестнадцатеричное число «ОС» равно двоично- му числу «00001100». Оператор «ИЛИ» используют, например, для выборочной уста- новки значения «1» в определенных разрядах двоичного числа (Рис. 3.9), или для проверки равенства нулю содержимого пары ре- гистров. Так, проверка равенства нулю 16-разрядного числа, содер- жащегося в сдвоенном регистре H-L, осуществляется с помощью оператора «ИЛИ». Его применяют к двум 8-разрядным числам, на- ходящимся в регистрах Н и L. Результат операции равен 0 лишь в том случае, если содержимое обоих регистров равно «0». Следует иметь в виду, что нельзя выполнить какую-либо логическую опера- цию непосредственно над содержимым регистров Н и L. Поэтому содержимое регистра Н сначала нужно перенести в регистр А и 122 123
1 6. Введение в машинный язык 1 1 —1 ........... -а, только после этого с помощью оператора «ИЛИ» выполнить опера, цию между числами, находящимися в регистрах А и L. Оператор «Исключающее ИЛИ» (XOR) каждому разряду регист- ра А присваивает значение «О», если данный разряд равен одно- именному разряду операнда S, и значение «1», если цифры в одно- именных разрядах различны. Команда «XOR А» применяется, на- пример, когда требуется обнулить содержимое регистра А. Команды инверсии (CPL) и изменения знака (NEG) Как было отмечено в разделе 3.1, для получения дополнительного кода числа следует поразрядно инвертировать значения составляющих его цифр и к полученному таким образом числу прибавить 1. Инверсия всех разрядов числа производится с помощью оператора CPL. А закан- чивается операция преобразования этого числа в дополнительный код путем изменения знака с помощью оператора NEG. Обе операции вы- полняются над содержимым регистра А Результат также помещается в регистр А Запись этих команд на языке ассемблера содержит только мнемонические символы операторов CPL и NEG (без операндов). Пусть в регистре А содержится число 00110101 = 35Н. В результа- те выполнения операторов «СРЬ» или «NEG» в регистре А останет- ся соответственно число 11001010 = 0CAH или 11001011 = 0CBH. В Табл. 6.8 приведены примеры записи команд логических операций. Таблица 6.8. Примеры команд логических операций Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты AND 02Н Е6 02 Логическое умножение содержимого регистра А на константу 02Н (маска разряда) 7 OR02H F6 02 Логическое сложение содержимого регистра А и константы 02Н (установка разряда) 7 OR (HL) В6 Логическое сложение содержимого регистра А и содержимого ячейки памяти по адресу, указанному в сдвоенном регистре H-L 7 XOR А AF Обнуляется содержимое регистра А 4 CPL 2F Инверсия каждого из разрядов регистра А 4 NEG ED 44 Изменение знака содержимого аккумулятора А 8 124
6.5. Команды перехода 6.5. КОМАНДЫ ПЕРЕХОДА Как нам уже известно, команды, из которых состоит программа, считываются ЦПУ из памяти начиная с адреса 0000Н и последовательно вы- полняются. Следовательно, порядок выполнения команд определяется последовательностью их расположения в па- мяти процессора. Однако часто, в зависимости от конкретного со- держания задачи, которую выполняет программа, требуется изме- нить последовательность выполнения операций. В этом случае программа имеет разветвленную структуру, и ход ее выполнения 'зависит от различных условий. Изменить последовательность вы- полнения команд можно с помощью команд перехода. Команды безусловного перехода (JP, JR) Команды безусловного перехода осуществляют переход по ука- занному адресу без проверки каких-либо условий. В зависимости от способа указания адреса перехода различают два типа операторов — JP (Jump) и JR (Jump Relative). В Табл. 6.9 приведено описание дей- ствий, выполняемых командами с этими операторами. Таблица 6.9. Команды безусловного перехода (операторы JP и JR) Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты JP 1т СЗт/ (3-байтовая команда) Переход по адресу 1т (указание прямого адреса). 1т — 2-байговое число, представляющее адрес перехода 10 JR п 18 л (2-байтовая команда) Переход на п адресов вперед или назад (указание относительного адреса). п — 1-байтовая константа со знаком 12 Счетчик команд (PC) внутри ЦПУ всегда указывает адрес сле- дующей команды, которую процессор должен считать из памяти. Действие команды перехода сводится к следующему: текущее зна- чение адреса команды в счетчике команд заменяется значением адреса, указанного командой перехода. То есть при выполнении Команды с оператором JP осуществляется замена «РС <- 1т», а при выполнении команды с оператором JR — замена «РС РС+л». 125
6. Введение в машинный язык Предположим, например, что команда перехода записана в ячейке с адресом 0200Н. Давайте подумаем, как осуществить пере- ход по адресу 0250Н. Если использовать оператор JP с указанием аб- солютного адреса, то получим следующую запись: JP 0250Н (ма- шинный код команды — СЗ 50 02). Ту же самую операцию можно осуществить с помощью команды с оператором JR, в которой указывается относительный адрес перехода: JR 4ЕН (машинный код команды — 18 4Е). Внимательный читатель мог заметить, что шестнадцатеричное число 4Е (в десятичной системе — 80), указанное в качестве констан- ты оператора JR, не равно разности адресов 0250Н и 0200Н (десятич- ное число 78). На самом деле ошибки здесь нет. Действительно: опе- ратор JR соответствует 2-байтовой команде «18 4Е» (Рис. 6.5), поэто- му занимает две ячейки памяти с адресами 0200Н и 0201Н. Таким об- разом, к моменту, когда ЦПУ полностью считает эту машинную ко- манду, в счетчике команд будет установлен адрес 0202Н. То есть зна- чение константы указано верно (250Н — 202Н = 4ЕН). Область памяти Команда «JR п» меняет содержимое PC следующим образом: РС<—РС+л {Так определяется параметр п Адрес перехода ....0250Н Адрес команды, 1 ...0202Н следующей за «JR п» J Адрес Содержимое ячейки ячейки 0000Н 0200 020 1 0202 Переход '0 250 4ЕН Рис. 6.5. Команда JR с указанием относительного адреса Число п, указывающее дистанцию до адреса перехода, является константой со знаком, значение которой ограничено диапазоном от -128 до 127 в десятичной системе счисления. 126
6.5. Команды перехода Команды условного перехода Довольно часто возникает необходимость из- менить последовательность выполнения команд программы в зависимости от выполнения или не- выполнения некоторого условия. При этом ис- пользуются операторы условного перехода. Про- верка выполнения условия осуществляется по со- стоянию регистра флагов ЦПУ. В Табл. 6.10 приве- дены наиболее часто применяемые команды ус- ловного перехода. Таблица 6.10. Команды условного перехода Команда JP с указанием абсолютного адреса Команда JR с указанием относительного адреса Действие JP Z, Im JRZ, n Проверяется значение флага Z; если оно равно 0, осуществляется переход JPNZ,/т JRNZ, л Проверяется значение флага Z; если оно не равно 0, осуществляется переход JP С, Im JRC, n Проверяется значение флага С; если был перенос разряда, осуществляется переход JP NC, Im JRNC, и Проверяется значение флага С; если не было переноса разряда, осуществляется переход Помимо перечисленных условий, в командах типа JP могут также использоваться переходы по знаку содержимого регистра А. При этом проверяется значение флага S регистра признаков. Как видно из таблицы, в командах условного перехода JP может указываться Как абсолютный, так и относительный адрес. Следует упомянуть еще °б одном, весьма полезном в некоторых случаях, операторе условно- го перехода — DJNZ (Decrement Jump Non-Zero). Запись команды с ЭТИМ оператором имеет следующий вид: «DJNZ п». При выполнении этой команды из содержимого регистра В вычитается 1. Если резуль- тат окажется отличным от 0, то выполняется переход по указанному адресу. Поместив в регистр В требуемое число повторений некото- рой последовательности операций (не более 256 повторений), с по- мощью одного лишь оператора DJNZ можно задать момент останов- ки этого процесса (Рис. 6.6). 127
6. Введение в машинный язык | Метка | : | Мнемокод | | Операнд | „--Пример записи LD В, OAH-^J В регистр В \ загружено число 10 Рис. 6.6. Пример применения команды DJNZ В данном примере символьная константа LOOP, записанная в качестве константы команды DJNZ, означает адрес команды, обо- значенной меткой LOOP. В этом случае каждый раз после выполне- ния последовательности команд программы, начиная от команды с меткой LOOP до команды DJNZ, из содержимого регистра В вычи- тается 1. Этот цикл повторяющихся операций продолжается до тех пор, пока значение числа, содержащегося в регистре В, не станет равным 0. Поскольку в данном примере в регистр В посредством команды LD загружено число ОАН (равно десятичному числу Ю)> последовательность команд, записанных между командой с меткой LOOP и командой DJNZ, будет произведена 10 раз. Прием с использованием метки довольно часто используется при программировании на языке ассемблера. Не огорчайтесь, если 128 ==^=—
6.6. Команды вызова подпрограммы и возврата из подпрограммы (CALL, RET) из предыдущего примера вам не совсем ясен его смысл. У вас еще будет возможность основательно разобраться в этом, поскольку мы еще не раз обратимся к этому приему в конкретных программах. 6.6. КОМАНДЫ ВЫЗОВА ПОДПРОГРАММЫ И ВОЗВРАТА ИЗ ПОДПРОГРАММЫ (CALL, RET) Знакомо ли читателю слово «подпро- грамма»? Тот, кому доводилось програм- мировать на языках типа Фортран, Кобол, Паскаль и др., хорошо себе пред- ставляет, о чем идет речь. Внутри программы, представляю- щей собой последовательность команд, часто встречаются отдельные фрагменты, выполняющие некото- рые самостоятельные задачи. В подобных случаях эти фрагменты оформляются в виде отдельных программ, которые в нужном мес- те основной программы вызываются с помощью специального оператора. Такая программа, выполняющая самостоятельную задачу и оформленная соответствующим образом, называ- Х~'"' X СТОЯ подпрограммой. Вызов подпрограммы ИЗ ОС- \ подпрограмм, тем I новной (главной) программы осуществляет пР°гРш*°у команда CALL (вызвать). Обратный переход из ~ подпрограммы в главную программу происходит с помощью команды RET (Return — вернуться). Допустим, в программе управления некото- рым механическим устройством предусмотрен многократный запуск электродвигателя. В целях сокращения записи мы оформляем ту часть про- граммы, которая управляет запуском электродвигателя в виде под- программы (назовем ее «MOTOR»). Подпрограмма помещается в Память после метки MOTOR. Теперь каждый раз после выполне- ния команды «CALL MOTOR» происходит переход к подпрограм- ме (Рис. 6.7). Подпрограмма запускает электродвигатель в нужное время, а затем по команде RET, записанной в конце подпрограммы, снова Передает управление процессом в главную программу. Выполне- ние главной программы продолжается начиная с команды, запи- санной после оператора CALL. В данном случае слово «MOTOR» 129
6. Введение в машинный язык Команда CALL | | Команда RET Главная программа CALL MOTOR CALL MOTOR CALL MOTOR Подпрограмма Адрес Команда MOTOR --------------- Группа команд, запускающая двигатель в нужное время RET «MOTOR» — это символический адрес (метка) первой команды подпрограммы Рис. 6.7. Главная программа и подпрограмма используется в качестве метки, то есть символической константы, численное значение которой равно адресу первой команды под- программы. Приведенный выше пример показывает, как с помощью подпро- грамм можно сократить главную программу, если она содержит мно- гократно выполняемую последовательность однотипных операций. Второе не менее важное преимущество состоит в том, что представ- ление одной большой программы в виде блоков, выполняющих са- мостоятельную задачу, помогает «структурировать» главную про- грамму, то есть обозначить логику взаимодействия ее отдельных ча- стей. С такой программой удобнее и приятнее работать, а выявление ошибок не составляет особого труда. Итак, мы знаем, что при выполнении главной программы может происходить переход к подпрограмме, осуществляемый посредсТ' вом команды CALL, а после ее выполнения — обратный переходв главную программу по команде RET. 130
6.6. Команды вызова подпрограммы и возврата из подпрограммы (CALL, RET) Давайте посмотрим, как происходит обработка соответствующих команд в ЦПУ. В памяти микрокомпьютера есть специальная область, в которой хранится адрес возврата из подпрограммы (адрес команды, следующей за командой CALL). Эта область памяти называется обла- стью стека. Обратимся к Рис. 6.8. Программа микрокомпьютера обычно загружается в память с адреса 0000Н и выполняется в порядке возрастания адресов команд. Напротив, загрузка в стек происходит с конца области стека, причем в порядке уменьшения адресов. В то время как счетчик команд определяет адрес следующей по порядку команды, выполняемой ЦПУ, указатель стека показывает, где именно в области стека находится адрес возврата из подпро- граммы, выполняемой в настоящий момент. Попробуем более подробно разобраться в том, как выполняются команды CALL и RET, как работают счетчик команд (РС) и указа- тель стека (SP), а также что представляет из себя область стека. Память ^Ис- 6.8. Указатель стека и область стека 131
6. Введение в машинный язык Выполнение команды CALL: 1. ЦПУ считывает команду «CALL 1т» в машинных кодах (CD т Г). В этот момент в счетчике команд (PC) находится адрес команды, следующей за командой CALL. 2. По адресу SP—1 загружается первый байт (8 старших разрядов) из счетчика команд, по адресу SP—2 — второй байт из счетчика команд. Таким образом, указатель стека принимает значение (SP—2). Эта операция называется «загрузкой в стек» (PUSH). 3. Значение счетчика команд устанавливается равным 1т, то есть адресу первой команды подпрограммы. Выполнение команды RET: 1. ЦПУ считывает команду RET в машинных кодах (С9). В этот момент счетчик команд показывает адрес команды, следую- щей за командой RET. 2. Содержимое памяти по адресу, находящемуся в указателе стека SP загружается во второй (8 младших разрядов) байт счетчика команд, а содержимое ячейки с адресом SP+1 — в первый байт счетчика команд. Указатель стека принимает значение SP+2. Эта операция называется «извлечением из стека» (POP). Команда вызова подпрограммы (CALL) может применяться не только для вызова из главной программы. Она часто используется в подпрограмме для вызова других подпрограмм. Так в примере, приведенном на Рис. 6.9, из главной программы вызывается Подпрограмма 1, в свою очередь Подпрограмма 1 вызы- вает Подпрограмму 2. На рисунке показано состояние указателя стека SP и соответствующие области стека при выполнении каждой из программ. В приведенном примере 0102Н и 0512Н — это адреса команд, следующих за каждым из операторов CALL, то есть адреса возвра- та из соответствующих подпрограмм в главную программу. Указа- тель стека следит за тем, чтобы после выполнения какой-либо под- программы всегда можно было безошибочно вернуться в нужное место исходной программы. Область стека —- это область в памяти для загрузки адреса коман- ды, которая будет выполнена после возврата из подпрограммы, вы- полняемой в настоящий момент. Поскольку команды, загружаю' щие и считывающие адреса из стека, оперируют с 16-разрядныМ11 132
6.6. Команды вызова подпрограммы и возврата из подпрограммы (CALL, RET) Главная программа Подпрограмма I Подпрограмма 2 Значение указателя стека в данный момент времени ф C>2FFE 2FFF ©С>3000 Память Адрес возврата в Подпрограмму 1 Адрес возврата в главную программу Рис. 6.9. Пример выполнения программы, вызывающей подпрограммы числами, под область стека отводятся 16-разрядные регистры или пары регистров В-С, D-Е, Н-Ьи т.д. Побайтовое занесение адресов указателя в 16-разрядный регистр, выполняющий функцию стека, осуществляется посредством команд PUSH и POP. Пример «PUSH HL» PUSH: загрузка данных в стек г Содержимое регистра Н загружается по адресу SP-I, содержимое регистра L — по адресу SP-2, указатель стека принимает значение SP-2 «POP ВС» РОР: считывание данных из стека у Содержимое ячейки памяти с адресом SP загружается в регистр С, содержимое ячейки с адресом SP+1 — в регистр В, указатель стека принимает значение SP+2 133
6. Введение в машинный язык бочному адресу. 6.7. КОМАНДЫ ВВОДА И ВЫВОДА (IN, OUT) В тексте программы, использующей подпрограмму, необходимо записать оба оператора PUSH и POP, следующие один за другим Здесь нужно быть особенно внимательным. В противном случае произойдет ошибка при загрузке или считывании стека, и возвра из подпрограммы в исходную программу может произойти по оши Перейдем к рассмотрению команд, обеспечивающих обмен данными меж- ду микрокомпьютером и внешними уст ройствами. Из предыдущих глав мы знаем, что обмен данными между микрокомпьютером и внешним,: устройствами осуществляется только через порты ввода-вывода. По команде ввода ЦПУ обращается к порту ввода, чтобы счи- тать данные, доставленные с внешнего устройства, и помещает их в регистры. По команде вывода данные из ЦПУ пересылаются в порт вывода. Структура команд ввода-вывода представлена в Табл. 6.11. IN, OUT — это сокращенная запись английских слов Input (ввод) и Output (вывод). Адрес порта микрокомпьютера указывается в обла- сти, соответствующей десятичным числам 0...255, поэтому п пред- ставляет собой 1-байтовое двоичное число. Так, ЮН соответствует де- сятичному числу 16, а ОАОН — числу 160. Сами же команды ввода и вывода — 2-байтовые команды. Рассмотрим порядок их выполнения Таблица 6.11. Команды ввода-вывода Команда языка ассемблера Машинный код команды Описание операции Требуемое число импульсов тактовой частоты IN А, (п) DBn Содержимое порта ввода, имеющего адрес п, загружается в регистр А 11 OUT (л), А D3n Содержимое регистра А пересылается в порт вывода по адресу п 11 Цикл считывания данных из порта ввода Последовательность выполнения ЦПУ команды «IN А, (и)» шинный код — DB п) представлена на Рис. 6.10. 134
6.7. Команды ввода и вывода (IN, OUT) Выполнение «IN А, (я)» _ Машинный (машинный код — DB я) цикл Требуемое число = д импульсов тактовой + Цикл чтения + из памяти + 3 + Цикл чтения из портов ввода-вывода 4 Первый байт команды «DB» считывается в ЦПУ Второй байт «п» считывается в ЦПУ Выполнение команды Рис. 6.10. Последовательность выполнения команды «IN А, (л)» В течение первого машинного цикла (Рис. 5.5), занимающего вре- мя, равное 4 периодам тактовой частоты, считывается 1-й байт ма- шинного кода «DB». По этому коду ЦПУ «узнает» команду ввода, по- средством которой в регистр А записываются данные из порта ввода. Чтобы определить адрес порта, из которого нужно транслировать данные, ЦПУ осуществляет второй цикл считывания из памяти, для чего требуется еще 3 импульса тактовой частоты. Расшифровав таким образом 2-байтовую команду ввода, ЦПУ переходит к циклу записи Данных из порта ввода в регистр А (4 импульса тактовой частоты). В процессе передачи сигналов ЦПУ, управляющих вводом дан- ных из порта ввода, используются шина адреса (8 младших разря- дов указывают адрес порта), шина данных, сигнал запроса ввода- вывода (IORQ) и считывания данных (RD). На Рис. 6.11. показано, как происходит синхронизация этих сигналов в цикле чтения из порта ввода. В течение первого такта работы ЦПУ в младших разрядах (Ао...А7) шины адреса устанавливается адрес порта п. После оконча- ния 1-го такта посылаются сигналы 10RQ и RD. По этим сигналам происходит выбор адреса порта и осуществляется подготовка порта ввода, расположенного по адресу п, к передаче данных (данные, хранящиеся в порте ввода, выводятся на шину данных). В послед- нем такте (Т4) ЦПУ открывает шину данных, подключается к ней и принимает данные из порта ввода, установленные на шине данных, в регистр А. 135
6. Введение в машинный язык Циклограмма операции чтения из портов ввода-вывода Импульсы тактовой частоты Шина адреса (младшие разряды Адрес порта устанавливается на шине адреса Сигнал IORQ Сигнал RD Шина данных (Do...D7) Определяется адрес порта; код данных устанавливается на шине данных «О» Шина данных и выход схемы ЦПУ находятся в высокоомном (Z) состоянии Команда ввода Г Попробуем ' проследить, как изменяются сигналы ч во времени J ЦПУ открывает шину данных и считывает информацию из порта ввода Рис. 6.11. Временная диаграмма операции считывания данных из порта ввода Цикл записи в порт вывода Команда вывода «OUT (и) А» соответствует 2-байтовой машин- ной команде, аналогичной команде ввода. Временная диаграмма операции записи в порт вывода показана на Рис. 6.12. При записи в порт вывода ЦПУ посылает сигналы управления IORQ и WR. Сначала на шине адреса устанавливается адрес порта 136
6.7. Команды ввода и вывода (IN, OUT) Циклограмма операции записи в порты ввода-вывода Рис. 6.12. Временная диаграмма операции записи в порт вывода вывода. Затем на шине данных устанавливается двоичное число, равное числу, находящемуся в регистре А (пользуясь жаргоном про- граммистов, на шину данных «выставляется» содержимое регистра А). По сигналу IORQ и адресу на шине адреса устанавливается связь с портом вывода, а по сигналу WR в порт вывода записывает- ся число, установленное на шине данных (оно, как мы знаем, в этот Момент равно числу, хранящемуся в регистре А). Ранее мы выяснили, что время выполнения операций ввода и вывода, осуществляющих прием и передачу данных из портов ввода-вывода в регистры ЦПУ и наоборот, определяются такто- вой частотой процессора (для ЦПУ Z80 — 2.5 МГц). Обмен дан- ными между ЦПУ и внешними устройствами сопряжен с опреде- ленными техническими проблемами. Речь идет о быстродействии Внешних устройств. Так, при низкой скорости считывания дан- ных внешним устройством из порта вывода возникают ошибки 137
6. Введение в машинный язык при передаче данных из ЦПУ через порт вывода, поскольку внеш- нее устройство не успевает за процессором. В этом случае, если нет возможности применить быстродействующие внешние уст- ройства, необходимо предпринять меры для коррекции работы ЦПУ с учетом технических характеристик имеющегося внешнего устройства. При этом очередная команда вывода данных должна подаваться, когда есть полная уверенность в том, что предыдущая «порция» данных благополучно считана соответствующим внеш- ним устройством. Один из самых простых способов — это подавать команды выво- да с интервалом, заведомо большим, чем требуется для приема дан- ных внешним устройством. Используя программные средства, мож- но этого добиться, например, методом «квитирования», смысл ко- торого подробно изложен в восьмой главе. К техническим методам следует отнести выбор быстродействующего внешнего устройства или модернизацию имеющегося. Сказанное относится также и к внешним устройствам, подклю- ченным к портам ввода. Быстродействие внешнего устройства, с которого считываются сигналы, также должно соответствовать при- меняемому ЦПУ. В противном случае следует использовать соот- ветствующие программные средства. Так или иначе, при выполне- нии команд ввода/вывода необходимо синхронизировать между со- бой работу микрокомпьютера и внешних устройств с учетом такто- вой частоты микрокомпьютера. В этой главе мы рассмотрели основные наиболее часто исполь- зуемые команды ЦПУ Z80. На самом деле таких команд, позволяю- щих существенно упростить процесс составления программ, гораз- до больше. Авторы, однако, считают, что к освоению других команд следует переходить постепенно, по мере того как вы приобретете достаточный опыт применения основных команд. Те сведения от- носительно языка ассемблера, которые изложены в настоящей гла- ве, вполне достаточны для того, чтобы вы сами могли приступить к составлению программ. 138
6. Введение в машинный язык обобщение главы_____________________________________________ 1. При выполнении действий с 8-разрядными двоичными числами первые восемь разрядов результирующего числа помещаются в ре- гистр А, а нулевой разряд регистра флагов устанавливается в состоя- ние, по которому можно определить, произошел ли перенос разряда при вычислениях. 2. При помощи команд ADD и ADC 8-разрядное ЦПУ может склады- вать 16-разрядные и даже 32-разрядные двоичные числа (команда ADC отличается от команды ADD тем, что в случае переноса разря- да прибавляет 1 к результату сложения). 3. Флаг С (перенос) регистра признаков служит для выполнения ко- манд ADC, SBC; флаг Z (ноль) — для выполнения команды сравне- ния (СР); флаг S (знак) наиболее часто используется при выполне- нии команды условного перехода. 4, Счетчик команд (PC) представляет собой 16-разрядный регистр ЦПУ, который показывает адрес следующей команды, выполняемой ЦПУ. Как правило, число, находящееся в счетчике команд, увеличи- вается каждый раз на 1. При выполнении команды перехода в счет- чик команд загружается адрес перехода. При выполнении команд вызова подпрограммы в счетчик команд загружается первый адрес подпрограммы. 5, Указатель стека (SP) — это 16-разрядный регистр ЦПУ, указываю- щий адрес ячейки в области стека, в которой содержится адрес воз- врата из подпрограммы. 6. Область стека — это область памяти, отведенная для загрузки 16-раз- рядного адреса возврата из подпрограммы. Данные в нее заносятся в две стадии побайтно в порядке уменьшения адресов. 7. Каждая из команд ввода или вывода выполняется за время, равное 11 периодам тактовой частоты. Для обеспечения надежной работы контроллера необходимо учитывать быстродействие устройств вво- да-вывода. Практические задания 1) Составьте программу на языке ассемблера, в результате работы которой сумма 16-разрядного числа 1055Н с содержимым регистра С помещает- ся в пару регистров D-Е (достаточно фрагмента программы). 139
6. Введение в машинный язык 2) Объясните, каким образом ЦПУ выполняет команду перехода JP 1т (с указанием абсолютного адреса) и команду перехода JR е (с указанием относительного адреса). 3) Значение указателя стека (SP) в начале программы устанавливается равным сумме последнего адреса памяти ОЗУ и 1. Объясните, почему 4) Пусть во время выполнения главной программы значение указателя стека равно 8001Н. Посредством команды CALL 2000Н, находящейся по адресу 0800Н, выполнение передано подпрограмме. Какой адрес возврата из подпрограммы? По какому адресу загружен этот код? 5) Составьте временную диаграмму операции считывания данных из пор- та ввода при выполнении команды ввода и временную диаграмму про- цесса записи в порт вывода при выполнении команды вывода.
СОСТАВЛЕНИЕ ПРОГРАММ Главное — соблюдать синхронность В этой главе, чтобы поупражняться в применении основных ко- манд языка ассемблера, мы попробуем составить несколько про- грамм для управляющего микрокомпьютера. Рассмотрим достаточ- но простые задачи, решение которых не потребует глубоких знаний и опыта и вместе с тем позволит новичкам быстро войти в курс дела. 7.1. ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ МИКРОКОМПЬЮТЕРА (АППАРАТНЫЕ СРЕДСТВА) Прежде чем приступить к реше- нию какой-либо практической за- дачи, необходимо представлять се- бе технические возможности того микрокомпьютера, для которого составляется программа. ~ Параметры микрокомпьютера ~ ЦПУ: Z80 ЦПУ (тактовая частота — 2.5 МГц). Устройство памяти: ПЗУ, объем 2 Кбайт (область адресов с 0000Н по 07FFH); ОЗУ, объем 2 Кбайт (область адресов с 0800Н по 0FFFH). Порты ввода-вывода: 8-разрядный порт ввода (адрес ОАОН); 8-разрядный порт вывода (адрес 0А1Н). Порты построены на регистрах-защелках. 141
7. Составление программ Мы имеем дело с ЦПУ типа Z80, работа которого синхронизирует- ся генератором тактовой частоты 2.5 МГц. Общее ЗУ программ и дан- ных состоит из ПЗУ программ объемом 2 Кбайт с областью адресов от 0000Н до 07FFH и ОЗУ данных точно такой же емкости (2 Кбайт) с ад- ресами от 0800Н до 0FFFH. Кроме того, имеются 2 порта ввода-выво- да, построенные на 8-разрядной схеме типа защелки (см. Рис. 4.17). Один из портов имеет адрес ОАОН и используется как порт ввода, дру- гой — порт вывода — имеет адрес 0А1Н. Теперь можно приступать к составлению программ для микро- компьютера, исходя из тех операций, которые он должен выпол- нять в ходе конкретной задачи. 7.2. ЗАДАЧА № 1 - ПООЧЕРЕДНОЕ ВКЛЮЧЕНИЕ СВЕТОДИОДОВ Давайте сначала точно оп- ределим, в чем состоит зада- ние, которое предстоит вы- полнить микрокомпьютеру. - Задача № 1 - После замыкания контактов выключателя поочередно парами загораются 16 симметрично расположенных светодиодов (по 8 с каждой стороны). После того как все диоды загорятся, они должны одновременно погаснуть. При повторном замыкании контактов выключателя все операции повторяются. Если контакты выключателя остаются в разомкнутом состоянии, светодиоды не горят. В данном примере входными и выходными устройствами микро- компьютера, выполняющего функцию контроллера, являются вы- ключатель и светодиоды (Рис. 7.1). Посмотрите на схемы подключения выключателя к порту ввода и светодиодов — к порту вывода. Как показано на Рис. 7.2, выклю- чатель соединен с выводом 10 (0-м разрядом) порта ввода. Светоди- оды подключены парами к восьми выводам порта вывода. Для того чтобы надежно зафиксировать НИЗКИЙ уровень логи- ческого сигнала на входе 10 порта ввода, соединенного с выключа- телем, между соответствующим выводом микросхемы и общим вы- водом подключен резистор, обеспечивающий смещение потенциа- ла на этом входе при разомкнутом выключателе до уровня логичес- 142
7.2. Задача Ns 1 При нажатии кнопки выключателя контакты замыкаются, в свободном состоянии — размыкаются Выключатель Рис. 7.1. Выключатель и светодиоды 7.2. Подключение выключателя и светодиодов к портам ввода-вывода Кого «О» (см. Рис. 4.7). Соответственно, если выключатель перевес- ти в замкнутое состояние, напряжение на входе 10 поднимется до Уровня логической «1». 143
7. Составление программ К каждому из 8 выходов (D0...D7) 8-разрядного порта вывода по- средством логических элементов «НЕ» присоединена группа из двух светодиодов. При таком способе подключения пара светодиодов за- горается, когда сигнал на соответствующем выводе (Dn) равен «1». Теперь, когда мы достаточно хорошо изучили схему, можно перейти к составлению программы. Программирование «по частям» Учитывая конкретное содержание данной задачи, можно раз- бить ее на две самостоятельные процедуры — процедуру определе- ния состояния выключателя и процедуру поэтапного включения светодиодов. В соответствии с этим целесообразно составить про- грамму из двух частей, а затем объединить их в одно целое. На Рис. 7.3 представлены схема алгоритма и соответствующая ей программа определения состояния выключателя. Схема алгоритма Программа в мнемокодах LOOP1: IN А, (ОАОН); © AND О1Н ; @ IP Z.LOOPl ; ф ~ Задача, выполняемая данной программой - Проверяем состояние выключателя, ожидаем момента замыкания контактов (фиксируем состояние «включено») Рис. 7.3. Программа определения состояния переключателя 144
7.2. Задача № 1 Посредством команды ввода содержимое из порта, имеющего адрес АО, загружается в регистр А. Затем выполняется логическая операция «И», в результате которой все разряды регистра А, кроме 0-го, обнуляются. Если после выполнения этой операции содержи- мое регистра А не равно 0, это означает, что контакты выключателя замкнуты. Если содержимое регистра А равно 0, контакты выклю- чателя разомкнуты. При размыкании контактов содержимое регис- тра А становится равным 0. Если контакты разомкнуты, переходим к команде ввода и повторяем описанную операцию определения со- стояния контактов. Эта последовательность операций повторяется до тех пор, пока контакты переключателя не замкнутся. На Рис. 7.4 проиллюстрирован принцип организации последо- вательного включения светодиодов и приведена соответствующая программа. Последовательный поразрядный ввод «1» в 8-разрядное число X ... > Циклическая последователь- ность операций Программа 00000000 Л Умчпжяемчя? .. XOR А ; «Обнуляем» регистр А 00000001' 0000001Г 0000011 г • 01111111 1111111Г и прибавляем 1 У ) : 5 К д Умножаем на 2 j и прибавляем 1 (последовательное включение всех светодиодов) LOOP2: ADD А, А ; 1NC А ; OUT (ОА1Н),А ; СР OFFH ; JP NZ, LOOP2 ; Содержимое регистра А умножаем на 2 К содержимому регистра А прибавляем 1 Включаем диод Повторяем цикл до тех пор, пока не включатся все светодиоды После включения 1 всех светодиодов ц они одновременно р-5*’ выключаются XOR А ; «Обнуляем» регистр А OUT (ОА1Н ) А ; Выключаем светодиоды Рис. 7.4. Программа процедуры последовательного включения светодиодов 145
7. Составление программ В соответствии со схемой включения пар светодиодов 1(1'; 2 (2Z)...8 (8Z), представленной на Рис. 7.1, задача сводится к последо вательной замене нулей 8-разрядного числа 00000000 единицами начиная с 0-го разряда, и пересылки полученных чисел (00000000... 11111111) в порт вывода. Поэтапное заполнение разрядов исходного числа «единицами осуществляется путем удвоения предыдущего результата и при бавления к нему 1. Программа дополнена операцией одновремен ного выключения светодиодов, после того как все они буду включены. Однако, если вспомнить, с какой скоростью ЦПУ выполняет ко манды, в программе, представленной на Рис. 7.4, можно обнару жить один «изъян». В ней не хватает модуля задержки, без которого все светодиоды после замыкания контактов выключателя загорятся практически одновременно. Эту проблему решает подпрограмм;! задержки, представленная на Рис. 7.5. Подпрограмма «заставляет» ЦПУ «тянуть» время в перерывах между циклами выполнения опе- раций управления светодиодами. ~ Проблема ~ > Когда мы говорим, что светодиоды зажигаются «последовательно», учитываем ли мы при этом, с каким интервалом они должны зажигаться. Если управлять светодиодами по программе, представленной на Рис. 7.4, то мы не увидим последовательного процесса включения светодиодов. Они загораются слишком быстро для того, чтобы человек мог заметит последова- тельность включения. Что нужно сделать, чтобы светодиоды включались с интервалом 0.1 или 1 сек? Для этого в интервалах между операциями включения нужно «отвлечь» ЦПУ на выполнение других операций, чтобы «убить» время (подпрограмма задержки) Поскольку генератор тактовой частоты работает непрерывно, ЦПУ не может остановиться. Следовательно, чтобы организовать задержку, ЦПУ нужно дать какую-нибудь задачу, на выполнение которой потребуется достаточно продолжительное время. В каче- стве такой задачи подпрограмма предлагает ЦПУ «сосчитать», на- 146
7.2. Задача № 1 © Смысл задачи, решаемой подпрограммой: заставляем ЦПУ затрачивать определенное время путем постепенного (на единицу за один цикл) уменьшения числа 8000Н до О HL<—8000Н © © © © DELAY: LD HL,8000H© LOOP3 : DEC HL © LD A, H I © OR L J JP NZ, LOOP3 © Выполняем операцию «ИЛИ» над содержимым регистров Ни L. Содержимое HL равно 0, если результат равен О RET © Время выполнения подпрограммы можно регулировать, изменяя число (в нашем случае 8000Н), загруженное в пару регистров HL (блок 1) Рис. 7.5. Подпрограмма задержки пример, до 32768. Вообще время, требуемое для подсчета, опреде- ляется тем, какое число загружено в сдвоенный регистр Н-L до на- чала подсчета. Рассмотрим структуру подпрограммы задержки. Сначала под- считаем время выполнения подпрограммы. Число тактовых им- пульсов, требуемых для выполнения одного цикла подпрограммы, равно сумме импульсов, необходимых для выполнения каждой из команд цикла (от метки LOOP3 до команды безусловного перехода JP). Это число равно: 6 + 4 + 4+ 10 = 24. Если в сдвоенный регистр Н-L загружено число 8000Н, то указанный цикл будет повторяться 8000Н раз (в десятичной системе счисления — 32768 раз). Так как Длительность периода тактовой частоты (2.5 МГц) равна 0.4 мкс, время выполнения подпрограммы примерно равно 0.3 с. Точный Расчет производится следующим образом: Время выполнения подпрограммы = число импульсов х число Повторений х период = 24 х 32768 х 0.4 х 10’6 с = 0.3 с 147
7. Составление программ Если в сдвоенный регистр загружено число 5000Н, время выпол- нения подпрограммы равно 0.2 с. Вызов подпрограммы задержки из главной программы произво- дится с помощью оператора «CALL DELAY», где DELAY — это мет- ка языка ассемблера, представляющая собой адрес первой команды этой подпрограммы, заданный в виде символической константы. При трансляции операторов языка ассемблера в коды машинных команд устанавливается числовое значение адреса, соответствую- щее данной символической константе. Компоновка единой программы Итак, мы составили программы для решения отдельных задач (определение состояния контактов переключателя, последователь- ное включение светодиодов с их последующим одновременным вы- ключением, задержка момента включения очередной пары светоди- одов). Теперь объединим эти программы в единое целое. При этом сле- дует обратить особое внимание на то, как изменяется содержимое регистров, используемых в нескольких программах. Например, во всех программах используется регистр А. Если при объединении программ содержимое регистра А в каждом конкретном случае бу- дет отличается от того, каким оно было при раздельном выполне- нии данной части программы, то программа будет работать непра- вильно. Поэтому, перед тем как содержимое регистра А будет изме- нено другой программой, необходимо «спрятать» текущее значение в другом регистре. Объединенная программа, составленная с учетом этого обстоятельства, приведена на Рис. 7.6. В процедуру последовательного включения диодов введен опе- ратор CALL, вызывающий подпрограмму задержки. При возвраще- нии из подпрограммы задержки содержимое регистра А всегда рав- но 0. Поэтому на время выполнения подпрограммы содержимое ре- гистра А записывается в регистр В. Запись содержимого регистра А в регистр В перед командой вызова подпрограммы, а также считы- вание оттуда сохраненного значения этого числа обратно в регистр А после выполнения подпрограммы осуществляется посредством оператора загрузки LD. Первая команда программы «LD SP 1000Н» устанавливает началь- ное значение указателя стека 1000Н, тем самым указывая область сте- 148 - ------ ------------ - -.... - '
1.2. Задача Na 1 ^процедуры — 1,2 и 3 объединяем в одну программу | LOOP1: LOOP2: DELAY: LOOP3: LD SP, Ю00Н IN A, (OAOH) AND 01H JP Z, LOOPI . XOR A ADD A, A INC A OCT (OA1H),A LD B, A CALL DELAY LD A, В -<• CP OFFH JP NZ, LOOP2 XOR A OUT (0A1H), A . JP LOOPI LD HL, 8000H ' DEC HL LD A, H OR L JP NZ, LOOP3 RET Указатель стека загружается в ячейку ОЗУ с адресом, равным последнему адресу программы +1 Ждем замыкания контактов переключателя Содержимое регистра А «прячем» в регистре В j Вызываем подпрограмму задержки^ Содержимое регистра В возвращаем в регистр A j © Через каждые 0.3 с зажигается очередная пара светоиодов. После того как загорелись все диоды, происходит их одновременное выключение Чтобы определить состояние контактов, переходим на метку LOOPI Считаем до 32768, чтобы «убить» время •Рис. 7.6. Объединенная программа выполнения задачи № 1 ка (см. Рис. 6.8). Хотя это не имеет явного отношения к выполняемой задаче, указывать область стека в начале программы необходимо. Программа в машинных кодах и на языке ассемблера Если сравнить тексты программы, записанной на ассемблере и в Машинных кодах (Рис. 7.7) начиная с адреса 0000Н, можно заметить некоторые различия. 149
7. Составление программ [Начальные адреса ( Программа в мнемокод [ программы ORG оооон [—Программа в PORT! EQU ОАОН Лоресл машинных кодах ’ 1 J P0RT2 EQU 0А1Н ах ] Директивы 0000 31 00 10 LD SP, 1000Н 0003 DB АО LOOP1: IN A, (PORT1) 0005 Е6 01 AND 01Н 0007 СА 03 00 JP Z, L00P1 000А AF XOR А 000В 87 LOOP2: ADD А, А 000С. ЗС INC А 000D D3 Al OUT (PORT2),A 000F 47 LD В, A 0010 CD IF 00 CALL DELAY 0013 78 LD A, В 0014 FE FF CP OFFH 0016 C2 0B 00 JP NZ, L00P2 0019 AF XOR A 001A D3 Al OUT (PORT2),A 001C C3 03 00 JP LOOP1 001F 21 00 80 DELAY: LD HL, 8000H 0022 2B LOOP3: DEC HL 0023 7C LD A, L 0024 B5 OR L 0025 C2 22 00 JP NZ, LOOP3 0028 C9 RET д END Директива В каждой строке программы в области, заключенной в рамку, команда в машинных кодах соответствует команде в мнемокодах Рис. 7.7. Программа в машинных кодах и на языке ассемблера 150
7.2. Задача № 1 Действительно, в программе, записанной в машинных кодах, в некоторых строках отсутствуют команды, соответствующие опера- торам языка ассемблера. Речь идет о трех первых (команды ORG и EQU) и о последней (команда END) строчках программы. Эти ко- манды, называемые «директивами», объявляют начало программы. Поскольку они не имеют «двойников» в машинных кодах, то они и не выполняются. Директива ORG (сокр. от англ. Origin) объявляет адрес первой команды — в соответствии с этой командой программа будет по- следовательно загружаться начиная с адреса ООООН. Следователь- но, первая команда программы «LD SP 1000Н» (машинный код — 31 00 10) загружается начиная с адреса ООООН. Загрузка первой ко- манды происходит следующим образом: сначала по адресу ООООН загружается код ЗШ, затем по адресу 0001Н — код ООН, наконец, по адресу 0002Н — код ЮН. Директива EQU (сокр. от англ. Equate) объявляет числовое зна- чение какой-либо символической константы, используемой в про- грамме. В нашей программе это константы PORT1 и PORT2. В ча- стности, команда «PORT1 EQU ОАОН» означает, что идентификато- ру PORTI ставится в соответствие числовая константа (код) ОАОН. Таким образом, с помощью директивы EQU можно присвоить какому-либо идентификатору числовое значение и использовать в программе этот идентификатор вместо записи соответствующего числового значения. Такая замена упрощает работу с программой, так как вместо «отвлеченного» числа программист получает воз- можность оперировать обозначениями, в которые он вкладывает вполне понятный для него смысл. Директива END на языке ассемблера объяв- ляет конец программы. В программе, представ- ленной на Рис. 7.7, метки «LOOP1», «LOOP2», «DELAY», «LOOP3» представляют собой симво- лические адреса. Как вы уже хорошо знаете, при трансляции программы на язык машинных ко- манд символьные обозначения заменяются на соответствующие им числовые значения. Так, I команда «LOOP1: IN A, (PORT1)» находится по i адресу 0003 Н. Это означает, что метка LOOP1 151
7. Составление программ используется в программе в качестве символического адреса, со- ответствующего числовому адресу 0003Н. Следовательно, запись «JP Z, LOOP1» в данном случае эквивалентна записи «JP Z, 0003Н». При трансляции в машинные коды символьное обозна- чение метки адреса LOOP1 преобразуется в числовой код 0003Н. Таблица соответствия адресов, представленных символическими константами, используемыми в данной программе, числовым адре- сам приведена на Рис. 7.8. Сравнив обе программы (см. Рис. 7.7), легко убедиться в том, что таблица составлена правильно. Метка (символический адрес) | Символический адрес на ассемблере — это «зашифрованный» с помощь букв числовой адрес команды в машинных кодах При трансляции команды в машинные коды метка преобразуется в число LOOP1 Адрес команды IN сф> ОООЗН LOOP2 Адрес команды ADD 000BH DELAY Адрес команды «LD HL» czj/ 001FH LOOP3 Адрес команды DEC 0022Н Рис. 7.8. Соответствие меток, используемых в программе, числовым адресам Мы знаем, что при выполнении программы компилятор языка ассемблера последовательно «переводит» команды на язык машин- ных кодов. Таким образом, программы, приведенные справа и сле- ва на Рис. 7.7, — это соответственно исходный текст и перевод зада- ния, которое программист составил для микрокомпьютера. Если бы не было компилятора языка ассемблера, нам пришлось бы самим выполнять функции «переводчика», каждый раз обраща- ясь к списку команд, приведенному в Приложении 2, чтобы «объяс- нить» микрокомпьютеру смысл очередной строчки. Например, переведем в машинные коды команду «JP Z, LOOP1»- Из списка команд следует, что оператору «JP Z, 1т» соответствует машинный код «СА т I». Затем, преобразовав символический адрес LOOP1 в 0003Н и установив соответствие: I = 00, т = 03, получим полный код машинной команды: «СА 03 00». При этом мы должны 152
7.3. Задача №2 быть предельно внимательными, чтобы не перепутать порядок старших и младших байтов (/ и т) 2-байтовой константы адреса (на языке машинных команд он обратный!). Составленная нами программа размещается в памяти микропро- цессора, начиная с адреса 0000Н по адрес 0028 Н, то есть занимает 41 (28Н + 1) байт. 7.3. ЗАДАЧА № 2 - ЗАПОМНИТЬ ПОСЛЕДОВАТЕЛЬНОСТЬ АКТИВИЗАЦИИ СИГНАЛОВ И ВОСПРОИЗВЕСТИ ЕЕ (ВАРИАНТ 1) В этом разделе рассмотрим следующую задачу. Сначала, чтобы уточнить за- дачу, обратимся к схеме подклю- чения входных и выходных уст- ройств к портам микрокомпью- тера (Рис. 7.9), например выклю- чателей и реле. ~ Задача № 2 ~ Сигналы подаются с помощью 6 выключателей, подключенных к порту ввода. Последовательность подачи сигналов с контактов выключателей из порта ввода заносится в память. Через порт вывода контакты шести реле в той же последовательности воспроизводят сигналы контактов выключателей. При воспроизведении сигналов осуществляется задержка (приблизительно 0.5 сек) между командами замыкания реле. Начало и окончание записи сигналов задаются посредством отдельных выключателей. На схеме показано 6 выключателей PS^.-PSg, подключенных со- ответственно ко входам 11..Лб и задающих последовательность сиг- налов, которую предстоит запомнить микрокомпьютеру. Момент начала записи последовательности сигналов определяется состоя- нием контактов выключателя SW0, соединенного с выводом 10, пор- та ввода. Окончание записи сигналов и начало их воспроизведения микрокомпьютер будет определять по состоянию контактов вы- ключателя SW7 в цепи входа 17 порта ввода. При замыкании контак- тов этого переключателя прекращается запись сигналов, а при раз- мыкании начинается их воспроизведение. Воспроизведение записанной последовательности сигналов бу- дет осуществляться путем замыкания контактов шести реле, под- 153
7. Составление программ Рис. 7.9. Схема подключения внешних устройств к портам ввода-вывода ключенных к выходам Dp..De порта вывода. Кроме того, к выходу Do порта вывода подключен светодиод, который должен гореть во время воспроизведения записанной микрокомпьютером последо- вательности сигналов. Теперь, ознакомившись со схемой и четко представляя себе задание, можно перейти непосредственно к со- ставлению программы. Всю процедуру можно разбить на две самостоятельные задачи: «запомнить последовательность подачи сигналов» и «воспроизвес- ти записанную последовательность». Как и в предыдущем случае, начинать надо с составления программ для каждой из двух частей, чтобы потом объединить их в единую программу. 154
7.3. Задача Ns 2 Процедура записи в память последовательности подачи сигналов Как всегда при решении подобных задач, построим схему алго- ритма процедуры «запомнить последовательность подачи сигна- лов» (Рис. 7.10). Записываем в память содержимое порта ввода Последнее состояние на входе порта ввода заносится в память Ф © Рис. 7.10. Алгоритм процедуры «запомнить последовательность подачи сигналов» 155
7. Составление программ Первый блок изображенной на Рис. 7.10 схемы алгоритма точ- но такой же, как и в предыдущем примере. Это проверка состоя- ния контактов выключателя SW0. Если контакты замкнуты, пере- ходим ко второму блоку — загрузке в память содержимого порта ввода. Загрузка осуществляется следующим образом. Сначала с помощью команды ввода содержимое порта ввода считывается в регистр А, а затем посредством команды загрузки содержимое ре- гистра А записывается по указанному адресу. На Рис. 7.11 показа- но, как определяется адрес ячейки памяти для записи очередного числа из регистра А. Рис. 7.11. Порядок загрузки данных в память Для того чтобы организовать последовательную запись данных, поступающих из порта ввода, в ОЗУ ЦПУ необходимо занести адре- са ячеек памяти, в которые будет производиться запись. Согласно описанию технических характеристик ЦПУ Z80, приведенному в начале этой главы, область оперативной памяти микрокомпьютера включает в себя ячейки с адресами от 0800Н до 0FFFH. В качестве указателя адресов, по которым будет производиться последователь- ная загрузка данных, используем сдвоенный регистр H-L. 156 - . ' —............................ — .
7.3. Задача № 2 Указатель адреса работает следующим образом. Вначале в сдвоен- ный регистр Н-L загружается число 0800Н. Это число и будет пер- вым адресом области памяти, в которую загружаются данные. Затем после каждой очередной загрузки данных по адресу, указанному в паре регистров Н-L, содержимое этой пары регистров увеличивает- ся на 1 (команда «INC HL»). Таким образом, содержимое указателя (пары регистров Н-L) будет всегда соответствовать адресу ячейки памяти, отведенной для загрузки очередной «порции» данных. Блок 3 схемы алгоритма программы (Рис. 7.10) проверяет, изме- нилось ли состояние контактов хотя бы одного из шести выключа- телей PS1...PS6. Для этого данные предыдущей операции считыва- ния из порта ввода, предварительно записанные, например, в ре- гистр В, сравниваются с текущим состоянием на его входах (опера- тор условного перехода). В блоке 4 проверяется состояние выключателя SW7 (сигнализа- тора окончания записи сигналов). Если этот выключатель находит- ся в положении «выключено», то повторяются операции, представ- ленные на схеме блоками 2 и 3. Блок 5 схемы обозначает запись в память результатов последне- го считывания из порта ввода, когда контакты выключателя SW7 оказываются в замкнутом состоянии. Данные, считанные в этом цикле, используются в процедуре воспроизведения как информа- ция о последнем сигнале. Если описанный выше алгоритм записать в мнемокодах, то по- лучим программу, представленную на Рис. 7.12. Попробуйте самостоятельно разобраться в структуре програм- мы. Чтобы облегчить себе эту задачу, ориентируйтесь по цифрам Е..5, которые соответствуют номерам блоков на схеме алгоритма, представленного на Рис. 7.10. Процедура воспроизведения последовательности сигналов Воспроизведение должно начаться после окончания процедуры записи команд по сигналу, поступившему с выключателя SW7, в мо- мент размыкания его контактов. Данные, представляющие собой по- следовательность записанных команд, загружены в память начиная с адреса 0800Н. При воспроизведении они побайтно считываются и по- очередно транслируются в порт вывода с определенным интервалом. 157
7. Составление программ [Главная программа] [ Подпрограмма j ORG 0000Н Задание PORT1 EQU ОАОН значений PORT2 EQU 0А1Н символических адресов DATAM EQU 0800Н Константа, LD SP 1000Н 1 Подготовка: задающая ’ L установка областей /т\ время задержки LD HL, DAT AM J стека и данных \| SWOCHK: IN A, (PORT1) DCHNG: LD DE, 2500Н END 01Н © CALL DELAY JP Z, SWOCHKJ IN A, (PORT1) IN A, (PORT1) СР В DATAIN: LD (HL), A JR Z, DCHNG INC HL RET LD B,A J CALL DCHNG LD C, A AND 80H LD A, C JP Z, DATAIN - LD (HL), A ' Подпрограмма, проверяющая содержимое 1 порта ввода. Сравниваем содержание регистра В, в котором записано предыдущее состояние, с кодом на входах порта ввода. Константа времени задержки задана таким образом, чтобы продолжительность цикла проверки порта составляла 0.1с ) DELAY: DEC DE LD A, D OR E JR NZ, DELAY RET ft , Подпрограмма задержки та же, что и в предыдущем разделе. Используется пара k регистров D-E J Рис. 7.12. Программа процедуры «запомнить последовательность подачи сигналов» 158
7.3. Задача № 2 Схема алгоритма этой процедуры и соответствующая ей про- грамма на ассемблере приведены на Рис. 7.13. Блок 1 периодически проверяет состояние контактов выключателя SW7 в ожидании мо- мента, когда они перейдут из положения «замкнуто» в положение «разомкнуто». © © © SW7CHK: ©' (2) REPEAT: Г DTOUT: IN A, (PORT1) AND ЗОН JP NZ, SW7CHK LD HL, DATAM LD A, (HL) OUT (PORT2), А INC HL LD В, А LD DE, 0800Н CALL DELAY LD A, В AND 80H Константа времени задержки JP Z, DTOUT, ___________JP Операция воспроизведения повторяется сначала REPEAT Рис. 7.13. Алгоритм и программа процедуры воспроизведения Блок 2: в пару регистров H-L заносим первый адрес памяти (0800Н), начиная с которого были загружены данные в процессе за- писи последовательности сигналов из порта ввода. Блок 3: используя пару регистров H-L в качестве указателя, по- очередно считываем данные из памяти и пересылаем их в порт вывода. 159
7. Составление программ Блок 4 осуществляет задержку на некоторое установленное вре- мя между циклами пересылки данных в порт вывода. Здесь исполь- зуется та же подпрограмма (метка DELAY), что и в программе «за- помнить последовательность подачи команд». Можно регулировать длительность интервала, изменяя константу времени задержки. Функция блока 5: определять момент окончания процедуры вос- произведения. Если 7-й (старший) разряд числа, считанного из па- мяти, равен «1», операция воспроизведения считается законченной. Последняя команда «JP REPEAT» обеспечивает повторение с само- го начала процедуры воспроизведения. Объединив обе части программы, получим программу, показан- ную на Рис. 7.14. Директива ORG указывает первый адрес (ООООН) загрузки про- граммы в память микрокомпьютера. Между этим оператором и оператором «JP REPEAT» располагается текст главной программы. ORG оооон — P0RT1 EQU ОАОН LD (HL), A SW7CHK: IN A, (PORTl) - JP • REPEAT DCHNG: IN A, (PORTl) ' RET DELAY: DEC DE RET END Указание первого адреса, по которому загружается программа Главная программа «запомнить последовательность сигналов» Программа воспроизведения сигналов Подпрограмма отслеживания состояния порта ввода Подпрограмма задержки Мнемокод окончания программы Рис. 7.14. Программа процедуры записи последовательности сигналов и последующего воспроизведения с заданным интервалом времени 160
г gg- — ' - — — ' — — 7.4. Задача № 3 Ниже следуют две подпрограммы (метки DCHNG и DELAY), к ко- торым в ходе выполнения обращается главная программа. После- довательность расположения подпрограмм не имеет значения. По- следний оператор (END) отмечает окончание программы. Составленная нами программа с помощью шести реле воспроиз- водит последовательность сигналов, заданную шестью выключате- лями на входе контроллера. Воспроизведение команд осуществля- ется через определенный интервал времени. Изменяя константу времени задержки (число, загружаемое в пару регистров D-Е, см. блок 4 программы, Рис. 7.13), можно изменить скорость операции воспроизведения. Кроме того, если заменить последнюю команду «JP REPEAT» главной программы на команду «JP SWOCHK» (см. Рис. 7.12), то после выполнения операции воспроизведения система будет воз- вращаться в состояние ожидания ввода новой последовательности сигналов. Подобная программа управления устройством, воспроизводя- щим порядок изменения входных сигналов, применяется, напри- мер, в контроллере печатного устройства, в частности, печатной ма- шинки. Порядок нажатия клавиш печатной машинки загружается в микрокомпьютер при вводе в него текста с клавиатуры, а затем мо- жет быть воспроизведен (причем с гораздо более высокой скоро- стью) в процессе вывода текста на печать. 7 4 В предыдущем разделе мы рас- ЗАДАЧА № 3 — смотрели программу, воспроизводя- ЗАПОМНИТЬ шую только порядок смены состоя- ПОСЛЕДОВАТЕЛЬНОСТЬ ния контактов выключателей. Те- СИГНАЛОВ перь давайте усовершенствуем со- И ВОСПРОИЗВЕСТИ ЕЕ ставленную ранее программу. «На- (ВАРИАНТ 2) учим» ее запоминать и в точности воспроизводить также и интервалы времени между моментами замыкания контактов соответствующих выключателей. Запоминаем последовательность подачи сигналов В этом случае задача несколько усложняется, потому что, поми- мо информации о состоянии контактов шести выключателей (замк- - — — — 161 6-2970
7. Составление программ - Задача № 3 ~ Последовательность подачи сигналов, задаваемая с помощью шести выключателей, из порта ввода заносится в память с учетом интервала времени между ними. Посредством контактов шести реле, подключенных к порту вывода, эта последовательность воспроизводится с соблюдением интервалов между сигналами. Схема подключения выключателей к порту ввода, а также светодиодов и реле к порту вывода такая же, как и в предыдущей задаче (см. Рис. 7.9) нуты/разомкнуты), необходимо занести в память время, прошед- шее с момента изменения состояния контактов соответствующего выключателя. Существует несколько способов подсчета времени. Проще всего определить интервал времени между двумя какими-либо события- ми как число, до которого «успеет сосчитать» ЦПУ, начав, скажем, с числа 0. ЦПУ практически мгновенно может сосчитать от 0 до 255 (то есть перебрать в памяти все 8-разрядные двоичные числа). Если выполнить следующие действия, то число, содержащееся в регист- ре А, последовательно «пробежит» все значения от 0 до 255. XOR А ; обнуляем регистр А LOOP: ADD А, 01Н ; к содержимому регистра А прибавляем 1 (7 тактовых импульсов) JR LOOP ; переходим на метку LOOP (12 тактовых импульсов) Если при А = 255 к А еще раз прибавить 1, то содержимое регис- тра А будет снова равно 0. Время, необходимое для изменения со- держимого А от 0 до 255, равно: (7 + 12) х 256 х 0.4 х 10~6 с = 1.95 мс В этой повторяющейся последовательности в момент сложения 255 и единицы происходит перенос разряда. Разряд переноса в ре- гистре признаков (F) становится равным «1», а регистр А обнуляет- ся. Поскольку один раз (из 256) разряд переноса регистра призна- ков принимает значение «1», то для определения числа, до которо- го «досчитал» ЦПУ, необходимо знать не только состояние регист- ра А, но и сколько раз разряд переноса принимал значение «1». 162
7.4, Задача № 3 Подпрограмма для определения интервала времени представлена ла Рис. 7.15. Она подсчитывает число повторений счетного цикла от момента запуска до момента изменения содержимого порта ввода. Подпрограмма DTCHK А Цикл подсчета продолжается до изменения содержимого порта ввода. После чего подсчитанное число заносится в память, и управление передается в главную программу © Обнуляем регистры C,DuE DTCHK: LD С, ООН Требуемое число ? LD D.00H ф импульсов К содержимому регистра С прибавляем 1 in г оои тактовой LD Е, ООН частоты COUNT: LD А, С 1 4 i © Если в предыдущей операции был перенос разряда, то к содержимому регистра D прибавляем 1 ADD А, 01Н @ 7 LD С,A J 4 LD A, D 4 ADC А, ООН @ 7 LD D,A 4 Если в предыдущей операции был перенос разряда, то к содержимому регистра Е прибавляем 1 LD А, Е 4 ADC А, ООН • ® 7 LD Е, А 4 IN A, (PORT1) © 11 ® Данные считываются из порта ввода в регистр А СР В 14 JP Z. COUNT J 10 ® / равенства <Г содержимого регистров s' и нет; ДА LD (HL), С Всего 70 INC HL LD (HL), D INC HL U LD (HL), E Содержимое регистров C-D-E (число, до которого INC HL RET ® s досчитал процессор) побайтно заносится в память . Z Z+ Z -Л Возврат в главную программу Подпрограмму DCHNG, описанную в предыдущем разделе, нужно заменить на эту подпрограмму Рис. 7.15. Подпрограмма для записи в память числа повторений счетного цикла в виде 3-байтового числа 163
7. Составление программ Для хранения 3-байтового числа повторений необходимо ис- пользование трех 8-разрядных регистров. В приведенном примере это регистры С, D и Е. При каждом проходе цикла к содержимому регистра С прибавляется 1; в регистры D и Е заносится число пере- носов разряда. Подпрограмма состоит из 7 блоков (см. Рис. 7.15). Блок 1: обнуление содержимого регистров С, D, и Е. Блок 2: к содержимому регистра С прибавляется 1. Все вычисле- ния выполняются в регистре А, поэтому, чтобы увеличить содержи- мое регистра С на 1, содержимое этого регистра пересылается в ре- гистр А, а результат сложения (А + 1) возвращается в регистр С. Можно было бы выполнить операцию С + 1 с помощью команды «INC С». Однако поскольку при выполнении этой команды разряд переноса в регистре F не меняется, то мы не можем реализовать описанный выше алгоритм. Блок 3: если при выполнении операций блока 2 был перенос раз- ряда, то к содержимому регистра D прибавляется 1. Для этого ис- пользуется оператор сложения с переносом «ADC А, ООН». При сло- жении с нулем единица к содержимому регистра А прибавляется только в том случае, если разряд переноса регистра F равен «1». Блок 4: если был перенос разряда при сложении с помощью ко- манды ADC в блоке 3, то к содержимому регистра Е прибавляется 1. Блоки 5 и 6 выполняют те же функции, что и в предыдущем раз- деле: данные считываются из порта ввода и сравниваются с содер- жимым регистра В, в который загружены ранее введенные данные. Если значение числа, принятого портом, не изменилось, то подсчет продолжается. Если это значение изменилось, то осуществляется переход в блок 7: содержимое регистров С, D и Е последовательно загружает- ся из ячеек с адресами, содержащимися в паре регистров H-L. Программа (см. Рис. 7.15) начинается с команды, обозначенной меткой DTCHK (сокр. от англ. Date Check). Если применить ее как подпрограмму, то можно без каких-либо изменений использовать главную программу предыдущей задачи (см. Рис 7.12). В этом слу- чае подпрограмму проверки состояния порта ввода (DCHNG) сле- дует заменить подпрограммой «DTCHK», которая передает управ- ление главной программе после загрузки в память числа, соответст- 164
Mfr—™' ........ 7.4. Задача № 3 вующего времени задержки данного входного сигнала относитель- но предыдущего. Цифры, записанные в столбик справа от текста программы (см. Рис. 7.15), — это число импульсов тактовой частоты, необходимое для выполнения каждой из команд цикла «COUNT». Просуммиро- вав, получим ровно 70 импульсов тактовой частоты. Таким образом, время выполнения одного прохода цикла равно: 7О...хО.4х 10 6с = 2.8 х 10“ 5с . При использовании трех 8-разрядных регистров С, D и Е макси- мальный интервал времени, который мы можем «отмерить», со- ставляет: (256 х 256 х 256 — 1) х 2.8 х 10“5с = 470 с = 7 мин. 50 с. Следовательно, эту подпрограмму можно использовать, если временной интервал между сигналами на входе порта ввода не пре- вышает 7 минут 50 секунд. Максимальное число шагов последовательности подачи сигна- лов определяется объемом ОЗУ — памяти, работающей на считыва- ние и запись. ОЗУ нашего микрокомпьютера имеет объем 2 Кбайта (2x1024). Чтобы сохранить данные, полученные в процессе одного цикла записи, требуется 4 байта памяти: 1 байт для загрузки состоя- ния переключателей и 3 байта для хранения интервала времени. Ис- ходя их этих данных, можно вычислить максимальное число пол- ных циклов программы: 2x1024 4 (Объем ОЗУ)/(число байтов для запоминания одного полного Цикла) = максимальное число запоминаемых циклов. Однако следует вспомнить, что несколько байтов, начиная с Последнего адреса оперативной памяти, отводится под область стека, в которой хранятся адреса возврата из подпрограммы. По- этому в приведенной выше формуле объем ОЗУ необходимо Уменьшить на величину области стека. С учетом этой поправки Максимальное число циклов записи сигналов в ЦПУ Z80 прибли- зительно равно 500. 165
7. Составление программ Воспроизводим последовательность сигналов, соблюдая времен- ные интервалы В предыдущей задаче изменение состояния контактов выключа- телей воспроизводилось через одинаковые промежутки времени. Для этого главная программа, представленная на Рис. 7.13, вызыва- ла подпрограмму задержки (блок 4): „ [LDDE,O8OOH 4 < (CALL DELAY Эту часть алгоритма следует изменить следующим образом: из числа, полученного в процессе подсчета интервала времени между двумя последовательными сигналами, каждый раз вычитаем 1. По- вторяем эту операцию до тех пор, пока не получим 0. После этого переходим к воспроизведению очередного записанного сигнала. Подпрограмма этой процедуры представлена на Рис. 7.16. Она состоит из 5 блоков. Блок 1: последовательно считываем из памяти 3 байта числа, вы- ражающего соответствующий интервал времени и загружаем их в 3 регистра — С, D и Е. Блок 2: из содержимого регистра С вычитаем 1. Если в результате вычитания был перенос разряда, то переходим в блок 3: из содержимого регистра D вычитаем 1. Если при этом произошел перенос разряда, переходим в блок 4: из содержимого регистра Е вычитаем 1. Затем повторяем операции начиная с блока 2 до тех пор, пока не выполнится условие, сформулированное в блоке 5 (равенство нулю содержимого всех трех регистров — С, D и Е). Проверка этого условия осуществляется путем двукратного применения логической операцию / тактовой частоты для ) ' Г, / [циклов DTCHK и DCOUNT «ИЛИ» (сначала между содержимым регистров \ нужно сделать ) Е и D, а затем между результатом первой опера- ции и содержимым регистра С). Если конечный 4 /ГлЬ результат равен 0, то это означает, что содержи- Wjj мое каждого из регистров С, D и Е равно 0. Справа от текста программы, представлен- iZj/ ной на Рис. 7.16, цифрами обозначено количе- ИГ ство импульсов тактовой частоты, которое тре- 166
7.4. Задача № 3 Подпрограмма подсчета LD INC LD INC LD INC LD SUB LD LD SBC LD LD SBC LD SUB OR OR JP RET С, (HL) HL Требуемое D, (HL) число ' импульсов тактовой HL E, (HL) HL частоты A, C 01H C, A A, D A, OOH D, A A, E A, OOH E, A OOH D C 4 @ 7 4 4 ® 7 4 4 ® 7 4 7 ® 4 4 NZ, DCOUNT 10 (6) Всего 70 Эта подпрограмма используется вместо подпрограммы задержки из предыдущего параграфа Рис. 7.16. Подпрограмма воспроизведения временного интервала 167
7. Составление программ буется для данной команды цикла, а внизу дана их сумма начиная от метки DCOUNT. Для того чтобы эта сумма равнялась ровно 70 (то есть сумме тактовых импульсов соответствующего цикла програм- мы, представленной на Рис. 7.15), нам пришлось добавить так на- зываемый «холостой» или «пустой» оператор «SUB ООН», выполне- ние которого требует 7 импульсов тактовой частоты (именно столь- ко не хватало до 70). Составленную ранее программу воспроизведения последова- тельности сигналов (Рис. 7.13) нужно модернизировать в соответст- вии с новой задачей, изменив в ней блок 4. А именно заменить опе- ратор «CALL DELAY» оператором «CALL TIMER», вызывающим подпрограмму, представленную на Рис. 7.16. Полный текст программы для задачи № 3 представлен на Рис. 7.17. Она отличается от программы, рассмотренной нами в преды- дущем разделе, тем, что в ней метки DCHNG и DELAY заменены соответственно на метки DTCHK и TIMER. Эту программу можно применить для того, чтобы поручить мик- рокомпьютеру осуществлять последовательность манипуляций по управлению какими-либо механизмами или установками вместо оператора (Рис. 7.18). Записав в память микрокомпьютера последовательность опера- ций управления какой-либо системой, можно в точности воспроиз- вести эту последовательность. А изменив временной масштаб цик- ла воспроизведения, мы имеем возможность в несколько раз увели- чить скорость воспроизведения заданной последовательности опе- раций управления. На базе контроллера, в память которого загружена аналогичная программа, можно спроектировать музыкальный инструмент (на- пример, фортепиано) с функцией записи и воспроизведения. Давайте теперь вместе подумаем, как решить одну техническую проблему, связанную с особенностями работы устройств ввода, ис- пользуемых в задачах № 1 и № 3. Речь идет о механических выклю- чателях (в том числе кнопочных). Радиолюбителям хорошо извест- но, что переход механических контактных устройств из состояния «включено» в состояние «выключено» и наоборот, часто сопровож- дается явлением, получившим образное название «дребезг». Рас- смотрим подробнее, в чем оно состоит и как с ним бороться. 168
7.4. Задача № 3 Программа к задаче №3| * OR.G 0000H COUNT: LD A, C PORTl EQU ОАОН ADD A, 01H PORT2 EQU 0А1Н LD C, A DATAM EQU 0800Н LD A, D ADC A, OOH LD SP, lODDH LD D, A LD HL, DATAM LD A, E SWOCHK: IN A, (PORTl) ADC A, OOH AND 01H LD E, A JP Z, SWOCHK IN A, (PORTl) IN A, (PORTl) CP В DATAIN: LD (HL), A JP Z, COUNT INC HL LD (HL), C LD B,A INC HL CALL DTCHK LD (HL), D INC HL LD C, A LD (HL), E AND 80H INC HL LD A, C RET JP Z, DATDIN LD (HL), A TIMER.: LD C, (HL) INC HL SW7CHK: IN A, (PORTl) LD D, (HL) AND 80H INC HL JP NZ, SW7CHK LD E, (HL) INC HL REPEAT: LD HL, DATAM DTOUT: LD A, (HL) DCOUNT: LD A, C OUT (PORT2), A SUB 01H INC HL LD C, A LD B,A LD A, D SBC A, OOH CALL TIMER LD D, A LD A, В LD A, E AND 80H SBC A, OOH JP Z, DTOUT LD E, A JP REPEAT SUB OOH OR D DTCHK: LD C,00H OR C LD D, OOH JP NZ, DCOUNT LD E, OOH RET Продолжение справа вверху END Рис. 7.17. Программа воспроизведения последовательности сигналов и интервалов между ними 169
7. Составление программ Пример применения программы к задаче № 3 | Концевые выключатели Рычаг управления ~ Кнопки Со-, управ- Ji g S 5 Внешние устройства ввода команд, подаваемых оператором Порт ввода Программа, воспроизводящая последовательность подачи команд оператора Порт вывода о ~:S 5 Электро- § g § магнитный § “ и клапан я 1 Электро- двигатель Объекты управления контроллера Исполнительные устройства и механизмы Рис. 7.18. Контроллер абсолютно точно воспроизводит манипуляции, ранее произведенные опытным оператором Коррекция ошибок ввода состояния переключателей (устранение «дребезга») В момент изменения состояния механического переключателя (включение/выключение) его контакты вибрируют, многократно ка- саясь друг друга. Мы не замечаем этого, когда включаем или выклю- чаем какой-либо прибор, так как весь этот процесс (Рис. 7.19) проте- кает в течение всего нескольких миллисекунд. Этот «танец» контак- тов при смене состояния переключателя и называется дребезгом. Дребезг контактов переключателя вполне может стать причиной ошибок в работе микрокомпьютера. Например, при загрузке в па- мять последовательности сигналов выключателей по программе, приведенной на Рис. 7.17, в случае возникновения дребезга контак- тов выключателя компьютер может ошибочно принимать их много- кратное замыкание как ввод новых данных. Таким образом, после- довательность сигналов будет записана неправильно. 170
7.4. Задача № 3 Замыкание Размыкание Входной i _________I «1» сигнал [|||| ППД «О» Контакты «дребезжат» в течение нескольких миллисекунд Время Рис, 7.19. Дребезг контактов переключателя Для борьбы с дребезгом разработано много способов. Мы пред- лагаем применить для этого RS-триггер, построенный на логичес- ких элементах «И-НЕ» (например, ТТЛ серии SN 7400). Если соединить два вентиля «И-НЕ», как показано на Рис. 7.20, то получим RS-триггер, то есть триггер с раздельной установкой со- стояния «0» и «1» на выходе. Название этой разновидности тригге- ров происходит от первых букв английских слов Reset (сброс) и Set (установка). Таблица соответствия сигналов на входах (А и В) и выходе (X) RS-триггера представлена на Рис. 7.20. Мы знаем, что на выходе вентиля «И-НЕ» сигнал соответствует «0» только в том случае, ког- да на обоих входах сигнал равен «1». Согласно таблице, если в на- чальный момент сигнал на входе А триггера равен «0», а на входе В и на выходе X — «1», то даже если на входе А произойдет инверсия сигнала с «0» на «1», а затем с «1» на «0», на выходе X все равно со- хранится предыдущее состояние, то есть «1». Принцип действия схемы подавления дребезга контактов пере- ключателя, использующей это свойство RS-триггера, проиллюст- рирован на Рис. 7.21. Давайте попробуем разобраться в том, как она работает. 171
7. Составление программ Схема RS-триггера на вентилях «И-НЕ» (Состояние на выходе равно О только в том случае, когда на обоих входах вентиля «И-НЕ» присутствует «1») Таблица истинности Ценное свойство А В X 0 0 1 0 1 1 1 0 0 1 1 * Состояние на выходе X не изменяется при изменении состояния на входах А и Вс «10» или «01» на «11» * Сохраняется предыдущее состояние Рис. 7.20. RS-триггер на элементах «И-НЕ» +5 В К выводу порта ввода м икрокомп ьютера OFF~* ON ON— OFF И Время Рис. 7.21. Пример схемы устранения дребезга 172
7.5. Задача № 4 7.5. ЗАДАЧА № 4 — ПРОГРАММА С ИСПОЛЬЗОВАНИЕМ ТАБЛИЦЫ ДАННЫХ Когда подвижный контакт 3-контактного переключателя нахо- дится в среднем положении, не касаясь неподвижных контактов, на обоих входах А и В триггера сигнал равен «1», так как на них через ре- зисторы подается напряжение +5 В от источника питания. При пере- мещении подвижного контакта к одному из неподвижных контактов будет наблюдаться дребезг именно на этой паре контактов, что при- ведет к многократному чередованию сигналов «О» и «1». Так как при этом на разомкнутом контакте сигнал равен «1», на выходе X сохра- нится то состояние, которое установилось в момент первого замыка- ния этой пары контактов, то есть влияние дребезга на выходе схемы не обнаруживается. Если выход X такой схемы подсоединить к порту ввода микрокомпьютера, изменение состояния контактов переклю- чателя будет вводиться в микрокомпьютер безошибочно. Поддерживать оптимальное со- стояние какого-либо сложного объ- екта управления на основе его мате- матической модели, то есть исполь- зуя систему уравнений, описываю- щих поведение объекта при воздей- ствии на него различных факторов, — достаточно трудная задача. Даже если мы, в совершенстве овладев теорией, составим «идеаль- ный» алгоритм управления, то из-за чрезмерной сложности про- граммы может многократно возрасти нагрузка на микрокомпьютер. Соответственно время вычислений увеличится, и работа контрол- лера станет неэффективной. В подобных случаях, не прибегая к усложнению алгоритма про- граммы, можно обеспечить достаточно высокую эффективность сис- темы управления путем применения метода поправок, вносимых в ра- боту объекта управления, зависящих от величины и знака отклонения некоторого набора контролируемых параметров. Эти поправки опре- деляются опытным путем и оформляются в виде таблиц, в соответст- вии с которыми микрокомпьютер формирует сигналы управления. Так, в контроллере системы впрыска двигателя автомобиля, рас- смотренной нами в первой главе (Рис. 1.6), управление осуществля- ется путем впрыска дополнительной порции топлива, объем кото- рой определяется в зависимости от сигналов различных датчиков 173
7. Составление программ (температуры охлаждающей жидкости, числа оборотов двигателя, разряжения во впускном коллекторе, содержания кислорода в вы- хлопных газах и т. д.). При этом длительность импульса впрыска топлива корректируется в соответствии с занесенными в память процессора таблицами, которые разработаны с учетом технических характеристик конкретного типа двигателя. В качестве простого примера управляющей программы, исполь- зующей таблицу данных, рассмотрим следующую задачу. - Задача № 4 - Задана таблица соответствия между 4-разрядными входными данными и временем свечения светодиода. При замыкании переключателя считываются входные данные и зажигается светодиод. Время в секундах, в течение которого он светится, равно произведению соответствующего значения из таблицы на 0.1 Чтобы понять смысл задачи, давайте сначала разберемся в ра- боте схемы, представленной на Рис. 7.22. На схеме показаны пор- ты ввода-вывода микропроцессора. К 7-му разряду порта ввода (адрес ОАОН) присоединен кнопочный выключатель, с помощью которого подается сигнал начала процедуры управления. На вхо- ды порта ввода, соответствующие разрядам с 0-го по 3-й, подают- ся входные данные (4-разрядные двоичные коды). К выходу 0-го разряда порта вывода (адрес 0АШ) через инвертор подключен светодиод, который загорается, когда сигнал на выходе этого раз- ряда равен «1». Теперь, когда мы ознакомились со схемой подключения цепей внешних устройств к портам ввода-вывода, можно сформулировать задачу для микрокомпьютера, которая состоит в том, чтобы уста- навливать продолжительность свечения светодиода в зависимости от сигнала на входах 1О..Т3. Эта зависимость задана с помощью таб- лицы (Табл. 7.1), в первой колонке которой даны числовые значе- ния сигнала на входе порта ввода, а во второй — соответствующие им временные множители, определяющие продолжительность ра- боты светодиода. Время свечения светодиода (в секундах) должно быть равно зна- чению множителя, приведенного во второй колонке таблицы, ум- 174
7.5. Задача № 4 Рис. 7.22. Подача и считывание данных из портов ввода-вывода Таблица 7.1. Таблица данных 4-разрядный входной сигнал (двоичное число) Множитель (шестнадцатеричное число) 0(0000) 100 (64) 1 (0001) 95 (5F) 2 (0010) 90 (5А) 3(0011) 75 (4В) 4(0100) 65 (41) 5(0101) 60 (ЗС) 6(0110) 55 (32) 7(0111) 40 (28) 8 (1000) 35 (23) 9(1001) 30 (1Е) 10(1010) 25 (19) 11(1011) 20(14) 12(1100) 18(12) 13(1101) 16 (10) 14(1110) 14 (0Е) 15(1111) 12 (ОС) Неженного на 0.1. Загрузку табличных значений временных множи- телей в память микрокомпьютера будем производить начиная с не- которого адреса в той же последовательности, в которой они приве- дены в Табл. 7.1 (100, 95, ..., 14, 12). 175
7. Составление программ Таким образом, значение временного множителя, соответствую- щее некоторому двоичному числу на входе порта ввода, будет раз- мещаться по адресу, равному сумме этого числа и начального адре- са таблицы. В программе нужно указать, начиная с какого адреса за- гружается таблица. Схема алгоритма управления светодиодом, состоящая из 9 бло- ков, изображена на Рис. 7.23. Блок 1: проверка состояния контактов кнопочного выключате- ля, замкнутое состояние которых должно стать сигналом к началу процедуры. Блок 2: из порта ввода считываются входные данные. Блок 3: в пару регистров H-L, используемых в качестве указате- ля, заносится начальный адрес таблицы данных. Блок 4: к текущему значению адреса прибавляется содержимое порта ввода. Блок 5: содержимое ячейки памяти (временной множитель) по адресу, полученному в результате операции сложения и записанно- му в парный регистр H-L, загружается в регистр В. Блок 6: подается команда на включение светодиода. Блок 7: отработка цикла задержки 0.1 с. Блок 8: из содержимого регистра В вычитается 1. Если в резуль- тате операции вычитания содержимое регистра В не стало равно 0, повторяется цикл задержки с последующим вычитанием 1 из содер- жимого регистра В. Поскольку в регистр В был загружен временной множитель (соответствующий данной комбинации входных сигна- лов порта ввода), количество циклов задержки будет равно значе- нию временного множителя. Блок 9: отработка команды выключения светодиода и возврат в со- стояние ожидания замыкания контактов кнопочного выключателя. Текст программы на языке ассемблера, соответствующей рассмот- ренному алгоритму, представлен на Рис. 7.24. Фигурными скобками с цифрами, как и ранее, обозначены соответствующие блоки алгоритма. В этой программе много функциональных блоков, идентичных тем, которые мы рассматривали в предыдущих задачах. Поэтому вам не составит особого труда разобраться в ней. Однако будет не- лишним сделать несколько пояснений. Команда «AND 0FH» в блоке 2 нужна для того, чтобы, сохранив значения четырех млад- ших разрядов введенных данных, обнулить все остальные разряды. 176
7.5. Задача № 4 Рис. 7.23. Схема алгоритма к задаче № 4 177
7. Составление программ ORG 0000Н PORTl EQU ОАОН PORT2 EQU 0А1Н DELAY: LD DE, 28B0H LD SP, Ю00Н L00P1: DEC DE LD A, D SW7CHK: IN A, (PORTl) OR E I® AND A, 80H Ф jR nz, L00P1 JR Z.SW7CHK RET IN A, (PORTl) 1 ® AND OFH J TABTOP: DEFB 64H, 5FH, 5AH, 4BH LD HL, TABTOP @ DEFB 41H, ЗСН, 32H, 28H ADD A’L DEFB 23H, 1EH, 19H, 14H LD L’A DEFB 12H, ЮН, OEH, OCH LD A, H ® у ADC A, OOH END X LD H,A // LD B, (HL) (5) LD A, 01H 1 (gs OUT (PORT2),A J ° LOOP: CALL DELAY ® DJNZ LOOP (8) XOR A 1 OUT (PORT2), A J JP SW7CHK Символический адрес TABTOP, указывающий начальный адрес таблицы временных множителей, расположен за последней командой программы (командой RET) Рис. 7.24. Текст программы к задаче № 4 Символическая константа TABTOP в блоке 3 определяет началь- ный адрес, по которому загружены числовые значения из второй колонки таблицы данных. В блоке 4 к содержимому пары регист- ров Н-L, представляющему собой 16-разрядное число, прибавляет- ся число, находящееся в регистре А. Сначала суммируется содер- жимое регистров А и L, и если был перенос разряда, то к содержи- мому регистра Н прибавляется 1. Так выполняется сложение 16' разрядного и 8-разрядного чисел. Для того чтобы реализовать за- держку, соответствующую временному множителю, загруженному в регистр В (блок 5), в блоке 8 применяется команда «DJNZ». По команде «DJNZ» из содержимого регистра В вычитается 1 и, если результат отличен от 0, производится процедура задержки «DELAY». На ее выполнение процессору Z80 требуется время 0.1 с 178
7.5. Задача № 4 (см. Рис. 6.6). В блоке 9 по команде «XOR А», знакомой нам по пре- дыдущим задачам, производится логическая операция «Исключа- ющее ИЛИ». При этом в качестве обоих операндов выступает одно и то же число, содержащееся в регистре А, в результате чего регистр А обнуляется. Последние в тексте программы команды, начиная с команды «TABTOP: DEFB 64Н, ... », означают последовательную загрузку 1-байтовых чисел, равных временным множителям таблицы данных, в память ЦПУ, начиная с адреса, указанного меткой TABTOP. Коман- да «DEFB» — это директива ассемблера, не имеющая «двойника» сре- ди машинных команд. Если требуется разместить в памяти 16-разряд- ные данные (2-байтовые числа), применяется директива «DEFW». - Операторы DEFB и DEFW - [ Директивы j Оператор DEFB (сокр. от англ. Define Bytes) размещает в памяти 1-байтовые данные. Пример — ТАВ1: DEFB 64Н, 5FH, 5АН. Последовательно размещает в памяти 1-байтовые данные 64Н, 5FH и 5АН, начиная с адреса, выраженного символической константой «ТАВ1» Оператор DEFW (сокр. от англ. Define Words) последовательно размещает в памяти 2-байтовые данные. Сначала размещается младший байт, а затем старший. Пример — ТАВ2: DEFW 2000Н, 2FEDH. Этой команде соответствует следуюшее размещение данных в памяти, начиная с адреса ТАВ2: ООН, 20Н, OEDH, 2FH Итак, мы рассмотрели простой пример программы, в которой соот- ношение между 4-разрядными входными данными и временем свече- ния светодиодов задано в виде таблицы. Этот принцип построения программы часто используется при вводе данных с разнообразных дат- чиков, например, когда нужно изменить число оборотов двигателя. Этот прием можно применять и тогда, когда по введенному числу мы хотим выполнить обработку данных разными программами. В этом случае мы задаем в виде таблицы соотношение между вводимым чис- лом и начальным адресом программы, соответствующей этому числу. 179
7. Составление программ 7.6. ЗАДАЧА № 5 - УПРАВЛЕНИЕ ШАГОВЫМ ДВИГАТЕЛЕМ Шаговый двигатель, называемый также импульсным двигателем, — это двигатель, у которого угол поворота вала пропорциона- лен числу электрических импульсов. При подаче одного управляющего импульса вал шагового двигателя поворачивается на один и тот же угол независимо от нагрузки. Благодаря этому свойству уп- равление двигателем не требует применения схемы обратной связи. Простота и надежность объясняют большую популярность ша- говых двигателей у разработчиков микрокомпьютерных контрол- леров для электромеханических устройств. Вполне вероятно, что и читателю представится возможность оценить их достоинства. Предлагаем вам простейшую программу управления шаговым двигателем. - Задача № 5 - При замкнутых контактах выключателя вал шагового двигателя равномерно поворачивается на 180° по часовой стрелке, а затем таким же образом на 180° против часовой стрелки. Эта процедура повторяется многократно. Поворот в одну сторону производится за 2 сек. Как управлять шаговым двигателем Прежде чем перейти непосредственно к составлению програм- мы управления шаговым двигателем, давайте уточним, чем, собст- венно, мы собираемся управлять. Внешний вид шагового двигателя с блоком управления показан на Рис. 7.25. Шаговый двигатель работает только в паре с блоком управления, на который необходимо подать напряжение питания двигателя (на- пример, 15 В), питание схемы управления (5 В), управляющие им- пульсы и сигнал, задающий направление вращения. Амплитуда уп- равляющих импульсов и сигнала, задающего направление враще- ния, хорошо согласуется с уровнями сигналов TTL. Поэтому их можно сформировать на выходах порта вывода микрокомпьютера и использовать для передачи непосредственно в блок управления ша- говым двигателем. 180
7.6. Задача № 5 Блок управления Эти 2 сигнала подаются с микрокомпьютера \ Напряжение у блока упра Напряжение питания двигателя питания управления Импульсы управления Сигнал направления вращения Технические данные Напряжение питания Потребляемый ток в импульсе Напряжение питания схемы управления Угол поворота вала на 1 импульс Частота импульсов управления Длительность импульса управления Длительность фронта импульса управления Уровни сигнала управления 60 В (max) 4.5 A (max) 5В 1.8° 0...300Гц 3 мкс (min) 2 мкс (max) ТТЛ Рис. 7.25. Шаговый двигатель и блок управления Согласно техническим данным двигателя, представленного на Рис. 7.25, при подаче одного импульса управления его вал повора- чивается на угол 1.8°. Следовательно, полный оборот вала (360°) осуществляется в результате воздействия 200 таких импульсов. Час- тота импульсов управления для двигателей данного типа не должна превышать 300 Гц. Предположим, требуется обеспечить поворот ва- ла двигателя на 180° примерно за 2 с. Так как для поворота вала на 180° требуется подать 100 импульсов управления, их частота должна быть приблизительно равна 50 Гц. Завод-изготовитель гарантирует стабильность работы двигателя, если длительность импульса управления составляет не менее 3 мкс. Шаговый двигатель данного типа совершает один шаг поворота вала по отрицательному (спадающему) фронту импульсов управления. Схема подключения шагового двигателя и кнопки включения к портам ввода-вывода показана на Рис. 7.26. Составим программу 181
7. Составление программ Рис. 7.26. Конфигурация портов ввода-вывода таким образом, чтобы сигнал направления вращения подавался с нулевого разряда порта вывода, а импульсы управления — с перво- го разряда этого порта. Импульсы управления Для того чтобы за 2 с вал двигателя повернулся на 180°, нужно, чтобы за это время было подано 100 управляющих импульсов. То есть период следования импульсов должен быть равен 20 мс. На Рис. 7.27 показана временная диаграмма сигнала, который нужно подать на блок управления шаговым двигателем. Длительность импульса управления выбрана равной 1 мс, что значительно превышает минимально допустимое значение этого параметра (3 мкс). Таким образом, чтобы программно реализовать эту последовательность импульсов, нужно в первом разряде порта вывода в течение 1 мс сохранять состояние логической «1», а затем в течение 19 мс — состояние «0». Эту последовательность требуется повторить 100 раз. Описание программы Будем считать прямым такое направление вращения двигателя, когда на блок управления с выхода 10 порта вывода подается сигнал «0». Соответственно при подаче сигнала «1» будет происходить об' 182
7.6. Задача Ns 5 Такую последовательность импульсов должен сформировать микрокомпьютер , Импульсы управления | ВЫСОКИЙ («1») НИЗКИЙ(«0») Период импульса 1 мс 19 мс - Время Если 100 таких импульсов подать на блок управления, то двигатель повернется на 180'за 2 с Рис. 7.27. Временная диаграмма сигнала управления шаговым двигателем ратное вращение. Внимательно изучив схему алгоритма решения данной задачи, представленную на Рис. 7.28, несложно понять на- значение ее блоков, которые обозначают соответствующую после- довательность операций, необходимую для выполнения задачи. Те- перь, чтобы понять, как работает программа, сравним текст про- граммы со схемой алгоритма. Команды программы, соответствующие блокам 1 и 2 схемы ал- горитма, мы уже разбирали ранее, поэтому не будем останавли- ваться на них. Блок 3: число 100 (64Н), равное количеству им- пульсов, которые нужно подать на блок управления, чтобы повер- нуть вал двигателя на 180°, загружается в регистр В. Блок 4: ко- манда «OR 02Н» поразрядно выполняет логическую операцию «ИЛИ» с содержимым регистра А и двоичным числом 00000010 (°2Н), после чего второй разряд числа, представляющего резуль- тат логического сложения (он находится в регистре А), устанавли- Вается в «1» (операция установки разряда, см. Рис. 3.9). Блок 5: 8Ыполняется цикл процедуры задержки (1 мс). Так как время за- держки сравнительно невелико, эта процедура организована с по- ^°Щью оператора DJNZ. Для отсчета времени используется ре- Тйстр В, поэтому, чтобы сохранить содержимое этого регистра 183
7. Составление программ j Начало J <^^нажата? © ДА| ORG ООООН PORTl EQU ОАОН PORT2 EQU 0А1Н LD SP, 1000H SWOCHK: IN A, (PORTl) AND A, 01H © JR Z, SWOCHK XOR A ® ROTATE: LD В, 64H ® LOOP: OR 02H 1 OUT (PORT2),A J PUSH BC Регистр А устанавливается в «0» г ® В регистр В загружается код числа импульсов — 100 (64Н) LD В, OCOH ] PULSE: DJNZ PULSE J ® POP BC AND OFDH 1 /74 OUT (PORT2),A CALL DELAY © DJNZ LOOP © XOR 01H © JR ROTATE DELAY: LD HL,07A0H 1 LOOP1: DEC HL LD A, H [ © OR L JP NZ, LOOP1 J RET am операции г мп В-1равен0? Формирование нарастающего фронта импульса © Задержка 1 мс 1 Формирование спадающего фронта импульса i “ © Задержка 19 мс ^^Ц1ЕТ ДА] вычитания Направление вращения меняется на противоположное . Рис. 7.28. Программа и схема алгоритма к задаче № 5 184
7. Составление программ (заданное число импульсов управления) перед входом в блок 5 и после выхода из него, выполняются соответственно команды «PUSH ВС» и «РОР ВС» (содержимое пары регистров В-С снача- ла загружается в стек, а после выполнения цикла задержки снова выгружается в регистр В). Блок 6: команда «AND 0FDH» выпол- няет операцию, обратную команде «OR 02Н», а именно, сбрасы- вает в «О» значение второго разряда регистра А (см. Рис. 3.12). Блок 7: вызов подпрограммы задержки (метка DELAY), аналогич- ной той, которую мы уже неоднократно применяли. В данном случае время задержки составляет 19 мс. Блок 8: команда DJNZ, которая еще раз применяется к содержимому регистра В, прове- ряет, было ли выдано 100 импульсов управления. Блок 9: форми- руется команда изменения направления вращения вала. Для это- го посредством команды «XOR 01Н» инвертируется первый раз- ряд регистра А, то есть происходит замена «0» на «1» или наоборот (см. Рис. 3.15). В рассмотренном выше примере осуществляется управление вращением вала шагового двигателя с постоянной скоростью на 180°. Можно произвольно задавать угол поворота вала двигателя, для чего в тексте программы, приведенной на Рис. 7.28, изменить число (64Н) подаваемых импульсов (блок 3). Чтобы изменить ско- рость вращения, нужно задать другое значение константы (07А0Н), определяющей время задержки (блок 7). При этом единственным ограничением является заявленная заводом-изготовителем пре- дельная частота импульсов управления для данного типа шагового двигателя. Итак, в этой главе на примере простого микропроцессора мы ознакомились с принципами составления программ, предназна- ченных для выполнения различных наиболее часто используемых операций по управлению электрическими и механическими уст- ройствами. I------------------
7. Составление программ ОБОБЩЕНИЕ ГЛАВЫ 1. Практическое освоение принципов программирования для управля- ющих микрокомпьютеров следует начинать с составления программ, выполняющих простейшие процедуры, например отработку сигна- лов включения светодиодов, поступающих на вход (задача №1). 2. Решение задач по программированию микрокомпьютера требует не только освоения программных средств, но и знания основ схемотех- ники. В частности, программист должен хорошо себе представлять, каким образом осуществляется взаимодействие портов ввода-вывода с внешними устройствами. ' 3. Если содержимое регистров ЦПУ, которые были задействованы пе- ред вызовом подпрограммы, используется программой и после воз- вращения в главную программу, необходимо учитывать, меняется ли их содержимое после выполнения подпрограммы. Если да, то перед выполнением подпрограммы содержимое этих регистров необходи- мо сохранить в дополнительных регистрах или ЗУ, а после выполне- ния подпрограммы загрузить в регистры сохраненные данные. 4. Время выполнения некоторого количества команд программы мож- но определить, умножив общую сумму импульсов тактовой частоты ПЗУ, требуемых для выполнения этих команд, на длительность пери- ' ода тактового сигнала. ' Практические задания 1) К входу 10 порта ввода, имеющего адрес ЗОН, присоединен выключа- тель. Зная, что состоянию «включено» соответствует логический сиг- нал «1», а состоянию «выключено» — сигнал «О», составьте программу на ассемблере для загрузки в память ЦПУ значений интервалов време- ни между моментами смены состояний переключателя («выключено» — «включено» — «выключено»). Вычисления производить с точностью 1 мс. Тактовая частота ЦПУ — 2.5 МГц, время нахождения переключа- теля в состоянии «включено» не превышает 60 с. 2) При вводе в микрокомпьютер сигналов «включено»/«выключено» по- средством механического переключателя часто возникают ошибки счи- тывания из-за дребезга контактов. Объясните, как можно устранить это явление. 186
8 ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА УПРАВЛЯЮЩЕГО МИКРОКОМПЬЮТЕРА Иногда бывает нужен перерыв в работе... В начале этой главы мы рассмотрим характеристики широко применяющихся БИС параллельного интерфейса портов ввода-вы- вода, а также БИС счетчиков-таймеров. Значительную часть главы посвятим аналого-цифровым и цифро-аналоговым преобразовате- лям (АЦП и ЦАП), без которых невозможен обмен ЦПУ с внешни- ми устройствами, которые используют аналоговые сигналы для их управления или преобразования различных физических величин в электрические сигналы. В разделе описания БИС портов ввода-вы- вода мы затронем очень важную и достаточно сложную тему — кон- цепцию «прерывания»; рассмотрим на конкретных примерах, как с помощью программы обработки прерывания можно значительно повысить эффективность работы ЦПУ микрокомпьютера. 8.1 До сих пор мы имели дело с микропро- БИС ПОРТОВ цессором Z80, у которого порты ввода-вы- ВВОДА-ВЫВОДА вода построены на основе 8-разрядной схе- мы защелки. При этом способ подключения внешних устройств к ЦПУ в каждом конкретном случае определял И назначение порта (ввод или вывод). Для решения ряда техничес- ких задач по управлению различными устройствами вполне можно ограничиться внутренними портами ввода-вывода микросхемы 280. Однако иногда возникает необходимость применения допол- нительных ИС, выполняющих функции портов ввода-вывода. Та- кие микросхемы, дающие возможность программировать их как 187
8. Периферийные устройства управляющего микрокомпьютера порты ввода-вывода, в настоящее время представлены на рынке электронных компонентов в большом ассортименте. По сравнению с регистрами, построенными по типу схемы защелки, внешние БИС портов ввода-вывода обеспечивают более эффективный об- мен данными ЦПУ с внешними устройствами. В числе БИС портов ввода-вывода, которые целесообразно при- менять совместно с рассматриваемым нами процессором Z80, мож- но упомянуть периферийный адаптер интерфейса (PIA) для ЦПУ 68, 8255; перепрограммируемый параллельный интерфейс ввода- вывода (PPI) для ЦПУ Z80, а также параллельный контроллер ин- терфейса ввода-вывода (РЮ) для ЦПУ Z80. Все они реализуют ана- логичные функции. В этой главе мы подробно остановимся на па- раллельном контроллере интерфейса ввода-вывода (РЮ), в даль- нейшем называя его просто «параллельный интерфейс» или ПИ. Первая буква аббревиатуры ПИ, как вы понимаете, обозначает слово «параллельный». Параллельными называют такие порты вво- да-вывода, в которых ввод и вывод данных (в данном случае 8-раз- рядных) осуществляется одновременно. ПИ может функционировать в одном из четырех режимов, уста- навливаемых программными средствами. В зависимости от кодов управления, загруженных из ЦПУ в регистр управления ПИ, можно установить режим 8-разрядного порта ввода, 8-разрядного порта вы- вода, 8-разрядного порта ввода-вывода или режим поразрядной ус- тановки функций порта ввода-вывода, когда любой разряд регистра может быть запрограммирован либо на ввод, либо на вывод данных. - Режимы работы ПИ - Коды установки режима Режим «О»: режим вывода 0FH Режим «1»: режим ввода 4FH Режим «2»: режим ввода-вывода 8FH Режим «3»: режим поразрядного 0CFH программирования ввода-вывода Режимы работы ПИ устанавливаются программно путем загрузки соответствующих управляющих кодов Можно запрограммировать любой разряд порта как на ввод, так и на вывод данных 188
8.1. БИС портов ввода-вывода Кроме того, набор функций ПИ включает дополнительные опе- рации, такие как указание первого адреса программы обработки прерывания и порядок выполнения операций при обработке пре- рывания. О том, что такое обработка прерывания и как она осуще- ствляется, мы поговорим в следующем разделе. Обратимся к Рис. 8.1, чтобы более подробно ознакомиться с ус- тройством и техническими характеристиками параллельного ин- терфейса . Как видно из Рис. 8.1, ПИ — это 40-выводная БИС того же размерного стандарта, что и ЦПУ Z80. Сигналы управления ПИ юКо- Сигналы I прерывания [ Выводы Г питания [ В/Л С/D —' INT* 1EL IEO — V, 37 35 36 4 6 5 23 24 22 25 26 Шина данных а а d4 Ds D6 D7 19 20 40 39 38 3 2 15 14 13 12 10 9 8 7 18 16 27 28 29 30 31 32 33 34 21 17 А° л' л2 А-3 л4 А$ А. А? ARDY ASTB . в3 в4 н BRDY1 BSTB J Шина порта A Сигналы квитирования порта А Шина порта В Сигналы квитирования порта В S С °2 Рис. 8.1. Назначение выводов ПИ Z80 Параллельный интерфейс состоит из двух 8-разрядных портов с Раздельной установкой режимов работы каждого из них. Например, Можно использовать порт А как порт вывода (режим «О»), а порт В в качестве порта ввода (режим «1»), ^Выводы сигналов управления параллельного интерфейса М,, RD, IORQ (Рис. 8.1), соединяются с одноименными выводами сигналов системного управления ЦПУ. Схема ПИ приводится в ак- тивное состояние, когда на вход СЕ (Chip Enable — активизация Микросхемы) подан сигнал «О». Для записи кода управления на вход C/D (Control word/Data) подается сигнал «1», а при сигнале «О» на 189
8. Периферийные устройства управляющего микрокомпьютера этом входе происходит пересылка входных или выходных данных. Сигнал «1» на выводе В/A (порт В/порт А) означает вызов порта В, — а сигнал «О» — порта А. С помощью этих трех сигналов (СЕ , C/D, В/A) указывается адрес порта ПИ. При обращении ЦПУ к портам ввода-вывода этот адрес внутреннего порта ПИ устанавливается на 8 младших разрядах (Aq...A7) шины адреса ЦПУ. Схема подключе- ния ПИ к разрядам Aq...A7 шины адреса ЦПУ показана на Рис. 8.2, ПИ имеет 4 последовательно расположенных адреса установки режима. Если 0-й разряд (АО) находится в состоянии «О», то указывается адрес порта ввода-вывода, если «1» — адрес для записи управляющего кода Рис. 8.2. Схема адресации ПИ Нулевой разряд (Ао) шины адреса ЦПУ соединяется с выводом С/D параллельного интерфейса. Когда значение сигнала в разряде Ао равно «О», производится выбор порта А или В, а когда Ао нахо- дится в состоянии «1», производится запись управляющего кода- Разряд А] шины адреса ЦПУ соединяется с выводом В/A. Для того чтобы выбрать портА, нужно подать на этот вывод сигнал «О», Д®1 выбора порта В значение разряда А] должно быть равно 1. Если ши- ну адреса Aq...A7 ЦПУ подключить к выводу СЁ через схему деши- фратора адреса (см. ниже), то можно одновременно определять ад- реса обоих портов ПИ. Установка режимов работы портов А и В, соединенных с ЦПУ110 рассмотренной выше схеме, осуществляется программно. Чтобы уста- новить нужный нам режим работы порта А, необходимо с помошЫ0 команды вывода записать в ПИ управляющий код этого режима. 190 - — ' ....- — ' '
8.1. БИС портов ввода-вывода - Пример - Чтобы установить в ПИ адрес порта А равным ОАОН, нужно построить схему дешифратора таким образом, чтобы на вход /СЕ ПИ подавался «О» в том случае, когда в шести старших разрядах (А7...А2) шины адреса установлен двоичный код 101000 (ОАОН) Адрес данных порта А : ОАОН Адрес управляющего кода порта А: 0А1Н О. ~ Пример ~ Установка порта А в режим вывода, а порта В — в режим ввода осуществляется следующим образом: [ Программа установки режима ПИ j LD A, OFH ;0FH Управляющий код режима вывода OUT (0А1Н),А ;0А1Н Адрес управляющего кода порта А LD A, 4FH ;4FH Управляющий код режима ввода OUT (0A3H), А ;0АЗН Адрес управляющего кода порта В Если программно установить режим работы ПИ, как показано в Приведенном выше примере, то порт А будет функционировать как Порт вывода с адресом ОАОН, а порт В — как порт ввода с адресом 0А2Н. В процессе выполнения программы можно изменить режим Работы обоих портов. ^Теперь рассмотрим назначение выводов ARDY, ASTB и BRDY, ®$Тв (см. Рис. 8.1). Сигналы RDY (Ready) и STB (Strob) называ- ется сигналами «стробирования» или «квитирования». Посредст- 191
8. Периферийные устройства управляющего микрокомпьютера вом сигналов квитирования ЦПУ при обмене данными с внешни- ми устройствами подтверждает направление передачи данных и синхронизирует работу регистров. Например, когда порт А функ- ционирует в режиме вывода, сигнал ARDY сообщает внешнему устройству, что на выводах (Ао ... А7) порта А в ЦПУ (Рис. 8.1) ус- тановлены выходные данные. Сигнал ASTB сообщает ПИ, что внешнее устройство приняло данные и можно переходить к пере- даче очередного пакета данных. Назначение сигнала STB, ис- пользуемого при обработке прерывания, мы обсудим в следую- щем разделе. Третий режим работы ПИ (режим «3») позволяет каждому раз- ряду портов ввода-вывода назначить любую из двух функций (при- ем или передачу), при этом за счет оптимальной загрузки портов можно повысить эффективность передачи данных по сравнению с режимами, в которых все восемь разрядов одновременно использу- ются либо для приема, либо для передачи. Чтобы активизировать режим «3» ПИ, следом за кодом установки режима «3» в регистр уп- равления загружается код установки разрядов, в соответствии с ко- торым каждый из разрядов порта программируется на ввод или вы- вод. Код установки разряда представляет собой 8-разрядное число. Если мы хотим, чтобы данный разряд работал на прием данных, то в соответствующей позиции кода установки разряда нужно запи- сать «1». Соответственно разрядам, программируемым на вывод данных, нужно присвоить код «О». Пример кода установки разрядов в режи- ме «3» представлен на Рис. 8.3. Режим «2» работы ПИ — это режим ввода-вывода с использова- нием только порта А. В этом режиме шина данных (Aq...A7) порта А используется как для ввода, так и для вывода, подобно шине данный микрокомпьютера. Этот режим используется, например, при обме- не данными с внешними устройствами, имеющими двунаправлен- ную шину данных. В этом разделе неоднократно встречалось выражение «обработ- ка прерывания» без какого-либо объяснения его смысла. В следу- ющем разделе мы постараемся подробно разобраться в этом во- просе. 192 ---------------и ......—-------------=---------
8.2. Обработка прерывания Режим « 3»: программа поразрядной установки режима ПИ | Программа устанавливает порт А в режим «3» и определяет назначение разрядов, как показано на рисунке LD A, 0CFH 1 Установка OUT (0А1Н), Aj режима LD А, 94Н 1 Установка л. тт /л»1 m * г назначения OUT (OA1H),AJ разрядов Следом за кодом установки режима загружается управляющий код (94Н) назначения разрядов Рис. 8.3. Пример поразрядной установки режима ПИ g 2. Понятие прерывания ОБРАБОТКА Слово «прерывание» в бытовом плане ассо- ПРЕРЫВАНИЯ циируется в нашем сознании с чем-то раздра- жающим (наподобие рекламных пауз, мешаю- щих досмотреть развяку телевизионного детектива). В вычисли- тельной технике этим словом обозначают временную задержку выполнения основной программы для решения каких-либо сроч- ных задач. Чтобы было проще представить себе, для чего нужно прерыва- ние, обратимся к примеру из повседневной жизни. Допустим, вы еще накануне вечером построили план на весь рабочий день. Од- нако по своему опыту вы знаете, что довольно часто возникает не- обходимость срочно выполнить дело, которое вы не планировали. Например, позвонит начальник и вызовет в свой кабинет, чтобы Дать какое-нибудь «архиважное» задание. И вот вам приходится, Прервав запланированную работу, идти «на ковер». Случаются и чисто технические перерывы. То лампочка перегорит в настоль- ной лампе, то картридж в принтере нужно заменить. В общем, как бы тщательно ни был продуман план, жить строго по плану не по- лучается. 7-2970 193
8. Периферийные устройства управляющего микрокомпьютера То же самое можно сказать и о работе микрокомпьютера. В нор- мальных условиях ЦПУ выполняет загруженную в него программу в которой указано, какие операции он должен произвести. Однако неисправность внешнего устройства или перебой в подаче электро- питания могут нарушить этот хорошо продуманный программис- том процесс. К счастью, перебои в сети электропитания или неис- правности внешнего устройства возникают нечасто, поэтому посто- янный контроль посредством программы всех факторов, способ- ных нарушить выполнение задачи, невыгоден с точки зрения про- изводительности микрокомпьютера. Только в случае возникнове- ния ситуации, требующей немедленного вмешательства, целесооб- разно, прервав основную программу, выполнить необходимые срочные действия. Сигнал, сообщающий ЦПУ о возникновении ситуации, когда необходимо прервать выполнение программы, на- зывается сигналом прерывания (Interrupt). Программа, посредст- вом которой ЦПУ, прервав выполнение текущей задачи, выполняет предусмотренные для этого случая операции, называется програм- мой обработки прерывания. Если на ЦПУ подан сигнал прерывания, как показано на Рис. 8.4, выполнение программы, выполнявшейся до этого момента, времен- но останавливается, и ЦПУ переходит к выполнению программы обработки прерывания, размещенной в памяти, начиная с опреде- ленного адреса. После завершения операций, программой обработки прерывания, ЦПУ про- должает выполнение прерванной программы. Функция прерывания ЦПУ используется не только в тех случаях, когда требуется срочно отреагировать на какие-либо экстренные ситу- ации. С помощью прерывания обычно осуще- ствляется взаимодействие быстродействующе- го ЦПУ с более «неповоротливыми» перифе- рийными устройствами, а также одновремен- ное выполнение нескольких программ, что позволяет значительно повысить производи- тельность компьютера (см. Рис. 8.5). предусмотренных Прерывая ' программу... повышаем производительность \ ЦПУ?! J 194
8.2. Обработка прерывания Обработка прерывания | Память ф Выполнение главной программы @ ЦПУ получило сигнал прерывания ф Переход к программе обработки прерывания ф Выполнение программы обработки прерывания ф Возврат в основную программу © Выполнение команд прерванной программы Рис. 8.4. Последовательность процедуры выполнения прерывания Прерывание используют в следующих случаях Управляющий микрокомпьютер Синхронизация с внешним устройством прерывание Принятие мер при возникновении ситуации Оптимальное использование ЦПУ производительности Запланированное экстренной Рис. 8.5. В каких случаях применяется прерывание Сигнал прерывания Два входа ЦПУ Z80 используются для сигналов запроса преры- вания: INT (Interrupt) и NMI (Non-Maskable Interrupt) (см. Рис. 2.4). 195
8. Периферийные устройства управляющего микрокомпьютера Сигнал NMI — сигнал принудительного запроса прерывания который невозможно «замаскировать» программно. Когда на вывод NMJ ЦПУ подается «О», ЦПУ прерывай выполняемую программу и переходит к выполнению команды, загруженной по адресу 0066Н. Поэтому в случае использования сигнала NMI необходимо заранее загрузить по адресу 0066Н программу обработки прерывания. Можно разрешить или запретить прерывание, включив в текст программы операторы, с помощью которых на выводы NMI и ENT подаются соответствующие сигналы. Оператор «Е1» (Enable Interrupt) разрешает прерывание, оператор «DI» (Disable Interrupt) запрещает его. Машинные коды операций, выполняемых операторами «Е1» и «DI», показаны в Табл. 8.1. Таблица 8.1. Операторы EI и DI Оператор языка ассемблера Машиппые команды Выполняемая операция Требуемое число импульсов тактовой частоты EI (Enable Interrupt) F3 Разрешает прерывание по сигналу INT в процессе выполнения программы 4 DI (Disable Interrupt) FB Запрещает прерывание по сигналу INT в процессе выполнения программы 4 Различают три режима («О», «1», «2») работы ЦПУ в случае пре- рывания по сигналу INT в зависимости от способа указания адреса программы обработки прерывания. Мы знаем, что для активизации функции прерывания ПИ следует использовать в режиме «2». Чтобы установить режим «2» обработки прерывания, в текст программы на ассемблере нужно добавить команду «1М 2» (Interrupt Mode 2). В этом случае в момент, когда по сигналу на выводе INT в ЦПУ вводится запрос прерывания, происходит считывание двух байтов информации из ячейки по адресу, который хранится в реги- стре V (Vector — вектор) внутри ПИ и регистре I ЦПУ. Считанное таким образом число будет адресом 1 -й команды программы обра- ботки прерывания. Получив команду прерывания, ЦПУ начинает выполнять программу, записанную в его памяти, начиная именно с этого адреса. Пример организации работы ЦПУ в режиме прерыва- ния схематично показан на Рис. 8.6. 196
8.2. Обработка прерывания Рис. 8.6. Так формируется адрес программы обработки прерывания Пусть программа обработки прерывания загружена в область па- мяти начиная с адреса 0800Н. Если в регистре I ЦПУ содержится число ОЗН, а в регистре V ПИ — ООН, то в этом случае содержимое регистров V и I образует 16-разрядное число 0300Н. Следовательно, по двум последовательным адресам 0300Н и 0301Н должно хранить- ся число 0800Н, указывающее первый адрес программы обработки прерывания (не забывайте, что при загрузке в память 16-разрядно- го числа 0800Н сначала записывается младший байт). Если микрокомпьютер запрограммирован, как описано выше, то, получив сигнал INT, ЦПУ прервет выполняемую программу и приступит к выполнению команд программы обработки прерыва- ния, записанной в памяти, начиная с адреса 0800Н. В свою очередь, этот адрес находится в ячейке памяти по адресу 0300Н (и следую- щей за ней ячейке), заданному регистрами I и V. Когда выполнение Программы обработки прерывания закончится, ЦПУ продолжит выполнение прерванной программы. 197
8. Периферийные устройства управляющего микрокомпьютера Программирование ПИ на обработку прерывания Чтобы ЦПУ выполнило прерывание после получения сигнала INT из ПИ, в регистр V ПИ заранее загружается младший байт ад- реса ячейки памяти, в которой находится первый адрес программы обработки прерывания. Число, загруженное в этот регистр, называ- ют вектором прерывания. Q <£> ~ Вектор прерывания - Это младший байт адреса, по которому находится адрес первой команды программы обработки прерывания р7 ] Р61Р51Р4 j D3 j Р2 j Dj | Ро 0-й разряд установлен в «0» В качестве вектора прерывания могут быть заданы, например, числа ООН, 04Н, ОАН, 80Н Для программирования ПИ нужно по адресу управляющего ко- да портов ввода и вывода (в примере предыдущего раздела — 0А1Н, ОАЗН) с помощью команды OUT последовательно загрузить вектор прерывания и код установки режима (0FH или 4FH). В момент по- лучения от внешнего устройства сигнала STB ПИ посылает в ЦПУ сигнал INT, который запускает «механизм» выполнения програм- мы обработки прерывания. Рассмотрим на примере, как можно оптимизировать работу ми- крокомпьютера с помощью функции обработки прерывания. Допу- стим, внешнее устройство, соединенное с ПИ, посылает сигнал STB, требуя выполнения процессором процедуры прерывания лишь в тот момент, когда оно готово к следующему сеансу обмена данными с ЦПУ. В свою очередь, ЦПУ запускает программу обра- ботки прерывания только на время, необходимое для того, чтобы получить данные из внешнего устройства и дать ему новое задание- Очевидно, такой режим «общения» ЦПУ с внешним устройством позволяет повысить производительность микрокомпьютера. Дейст- вительно, проведя кратковременный сеанс связи с внешним уст- 198
g=- - 1 " .— 8.2. Обработка прерывания ройством, ЦПУ может выполнять другие задачи, пока внешнее уст- ройство отрабатывает команды, полученные из ЦПУ или готовит очередной пакет данных. На Рис. 8.7 приведена схема работы ЦПУ в режиме прерыва- ния при пересылке данных на внешнее устройство вывода (на- пример, принтер), а также показано направление сигналов RDY, STB, и INT. Прерывание в режиме вывода ПИ | С помощью сигнала квитирования и сигнала INT ЦПУ синхронизирует работу внешнего устройства ЦПУ о том, что данные ПИ о том, что приняты внешним устройством данные приняты Рис. 8.7. Использование ПИ в режиме прерывания при выводе данных Аналогичным образом осуществляется синхронизация работы ЦПУ и внешнего устройства ввода при обмене данными через ПИ. Теперь посмотрим, как происходит обработка прерывания, когда установлен «3» режим работы ПИ, позволяющий одновре- менно обслуживать несколько источников сигналов. В этом слу- чае при программировании ПИ следом за загрузкой вектора пре- рывания, кода установки режима и кода установки назначения разрядов необходимо загрузить в регистры ПИ еще 2 управляю- щих кода — код управления прерыванием и маску прерывания (оба — 8-разрядные числа). Структура и содержимое этих кодов показаны на Рис. 8.8. 199
8. Периферийные устройства управляющего микрокомпьютера Управление прерыванием | Р7 Р6 Р5 Р4 Р3 Р2 Di Рр 1 AND /OR H/L 1 0 1 1 1 Код управления прерыванием @ Производится маскиро- вание (если в этом разряде «О», то маска игнорируется) _ Вызывается прерывание (если в этом разряде «О», то прерывание не вызывается) ж высокий/низкий Указывает «полярность» сигнала вызова прерывания (если установлена «1», то прерывание вызывается по сигналу «1», если «О», то — по сигналу «О») © И/ИЛИ Установка логической функции прерывания ( «1» — «И», «О» — «ИЛИ») Пример: Если код управления прерыванием равен 11110111 (F7H), то прерывание возникает при подаче «1» на все входы источников прерывания, если код управления прерыванием — 10010111 (97Н), то прерывание возникает при подаче «О» хотя бы на один вход Маска | Разряд 8-разрядного порта, запрограммированный на ввод, будет входом прерывания, если соответствующий ему разряд маски равен «О» Рис. 8.8. Код управления прерыванием и маска прерывания Для программирования ПИ в режиме «3» следует, используя ко- манду вывода, загрузить 5 управляющих кодов, как показано на Рис. 8.9. Как видно из рисунка, для установки режима необходимо после- довательно загрузить следующие коды: младший байт (вектор преры- вания) адреса, по которому помещен первый адрес программы обра- ботки прерывания, код 0CFH, устанавливающий ПИ в режим «3», код установки соответствующих разрядов в режим ввода, код управления прерыванием, определяющий условия возникновения прерывания, и маску прерывания — код, определяющий входы прерывания. 200
_ — - - = 8.2. Обработка прерывания к. 8.9. Порядок установки кодов управления для выполнения прерывания в режиме «3» ПИ В Теперь рассмотрим пример системы управления, использующей прерывание в указанном режиме. | Задача № 6 — программа контроля механической системы I Взгляните на Рис. 8.10, на котором представлена схема взаимо- действия ЦПУ и ПИ, работающего в режиме «3». Назначение выво- дов приведено на рисунке. Сначала определим структуру управляющих кодов. Соответст- венно назначению разрядов порта управляющий код установки со- держит «0» в тех разрядах, которые будут использоваться для выво- Еда данных, и «1» — в тех разрядах, которые предназначены для вво- да данных. Таким образом, для разрядов Ао...А7 получим значение 1-01010100 (в шестнадцатеричной системе — 54Н). Код управления |прерыванием в этой задаче вызовет прерывание, если хотя бы на ед- ином из трех входов появится сигнал «1». Поэтому из Рис. 8.8 возь- 201
8. Периферийные устройства управляющего микрокомпьютера ~ Задача № 6 ~ Если во время работы системы механизмов, которыми управляет микрокомпьютер, какой-то из переключателей принимает состояние «1», это означает неисправность системы. При этом напряжение питания отключается, двигатель останавливается, а ЦПУ прекращает работу Адрес данных порта А : ОАОН Адрес управляющего кода: 0А1Н Сигнал включения напряжения питания Команда запуска двигателя Сигнал неисправности в цепи питания Команда включения соленоида Сигнал изменения положения Команда включения обогревателя Сигнал отклонения от температурного режима Команда включения соленоида Рис. 8.10. Соединение внешнего устройства через порт А (ПИ работает в режиме «3») мем OR и Н и получим 10110111 (0В7Н). Для формирования кода маски каждый из 3 разрядов, соответствующих входам, которые мо- гут быть входами прерывания, должен быть установлен в «0». По- этому в нашем случае разряды 2-й, 4-й и 6-й сбрасываются в «0», а остальные разряды устанавливаются в «1», то есть код маски стано- вится равным 10101011 (0ABH). При отключении напряжения питания системы механизмов и остановке двигателя на входах ПИ устанавливается первый адрес программы обработки прерывания (0800Н), осуществляющей оста- новку работы ЦПУ. Пусть значение вектора адреса, указывающего первый адрес программы обработки прерывания, равно 0300Н. Тог- да в регистр I ЦПУ нужно загрузить код 03Н. Соответственно в ПИ в качестве вектора прерывания загружается код ООН. 202
8.2. Обработка прерывания . Осмыслив вышесказанное, давайте разберем программу на язы- ассемблера, представленную на Рис. 8.11. ORG 0000Н LD SP, 1000Н IM 2 LD А, ОЗН LD I, А LD А, ООН OUT (0А1Н),А J LD A, 0CFH ' OUT (0А1Н),А. LD А, 54Н OUT (0А1Н),А . LD А, 0В7Н OUT (0А1Н),А . LD А, ОАВН OUT (0А1Н),А . Е1 Установка режима прерывания «2» Загрузка кода ОЗН в регистр I ЦПУ Установка вектора прерывания «ООН» Программирование порта А ПИ для работы в режиме «3» Установка назначения каждого разряда порта А Установка кода управления прерыванием (Н, OR) Установка маски Разрешение прерывания Выполняется программа управления работой системы механизмов в нормальном режиме ORG ОЗООН DEFW 0800Н ORG 0800Н LD А, ООН OUT (ОАОН), А HALT END Указывают загрузку первого адреса программы отработки прерывания 0800Н по адресу ОЗООН Программа отработки прерывания начинается с адреса 0800Н По команде HALT ЦПУ останавливается ic. 8.11. Программа к задаче № 6 Первая команда программы служит для установки указателя сте- :а. Затем производится установка ПИ в режим прерывания «2». Для •того в регистр 1 ЦПУ загружаются старшие разряды (03 Н) вектора адреса. Затем по команде вывода (OUT) по адресу 0А1Н кода управ- (ения порта А (см. Рис. 8.10) последовательно загружаются 5 кодов 203
8. Периферийные устройства управляющего микрокомпьютера управления. После завершения всех установок выполняется коман- да «Е1», разрешающая прерывание во время выполнения основной программы. После этого начинается выполнение программы управления ра- ботой системы механизмов в основном (нормальном) режиме. Команды «ORG» и «DEFW» (см. программу, представленную на Рис. 8.11) указывают момент загрузки первого адреса программы обработки прерывания (0800Н) по адресу 0300Н. Команда «HALT» — последняя команда в программе обработки прерывания, начина- ющейся с адреса 0800Н, останавливает работу ЦПУ. По команде «HALT» (машинный код 76) работа ЦПУ прекраща- ется до повторного ввода в ЦПУ сигнала RESET. При подаче сигна- ла RESET счетчик команд обнуляется и ЦПУ снова приступает к выполнению программы, начиная с адреса 0000Н. Если при выполнении описанной выше программы хотя бы один из входов, соединенных с переключателями (Рис. 8.10), при- мет состояние «1», то возникнет сигнал прерывания, и ЦПУ перей- дет к программе обработки прерывания. После остановки двигате- ля и отключения напряжения питания системы механизмов ЦПУ выполняет команду «HALT» и прекращает работу. Таким образом, в данном примере после выполнения программы обработки преры- вания ЦПУ не возвращается к прерванной программе. Если необ- ходим возврат к исходной программе после выполнения програм- мы обработки прерывания, в конце программы обработки преры- вания выполняется команда «RET1» (Return from Interrupt (машин- ный код «ED 4D»). Возможно, некоторым читателям рассмотренная выше про- грамма, использующая так называемые средства прерывания, по- кажется слишком сложной. Тем более что без нее вполне можно обойтись. Действительно, достаточно было бы включить в про- грамму периодически повторяющуюся команду «IN». И если хотя бы один из трех входов, отслеживающих сигналы экстренных ситу- аций, перейдет в состояние «1», нужно передать управление по ад- ресу 0800Н, по которому загружена программа, останавливающая систему механизмов. 204
8.3. БИС таймера-счетчика (СТС) Безусловно, в некоторых случаях такой алгоритм вполне прием- лем. Однако довольно часто возникает необходимость как можно быстрее среагировать на внешний сигнал. В этом случае, для того чтобы своевременно обнаружить наличие «аварийного» сигнала, необходимо с помощью команды ввода проверять содержимое пор- тов ввода, многократно выполняя команду «IN» с интервалом заве- домо меньшим, чем минимальный ожидаемый интервал между ава- рийными сигналами, которые мы хотим зарегистрировать. Чем ме- нее регулярно следуют друг за другом эти сигналы, тем менее оправ- дано применение такого метода, так как процессору приходится слишком часто проверять содержимое регистра с пометкой «до вос- требования», «отвлекаясь» от выполнения других операций, преду- смотренных программой. Подключив к порту ввода специальное устройство, в задачу которого входит следить за поступающими сигналами и подавать в ЦПУ сигнал прерывания, мы даем микрокомпьютеру возмож- ность основную часть времени уделять выполнению других необ- ходимых операций, а, следовательно, работать с большей эффек- тивностью. g 3. Часто при выполнении какой-либо БИС программы ЦПУ приходится отмерять ТАЙМЕРА-СЧЕТЧИКА интервалы времени. В этом вы имели (СТС) возможность убедиться на примерах, рассмотренных нами в предыдущей главе. Если помните, для того чтобы осуществить задержку требу- емой продолжительности между определенными операциями, мы «заставляли» ЦПУ демонстрировать свое умение считать двоич- ные числа, то есть мы намеренно ограничивали производитель- ность ЦПУ, используя его в качестве таймера. Разумеется, такое Решение нельзя признать оптимальным. Гораздо целесообразнее было бы применить специализированное устройство, выполняю- щее только одну функцию — отсчет времени. Тогда ЦПУ доста- точно было бы лишь запускать это устройство, а затем получать от Него сигналы об окончании заданного интервала времени. Такие Устройства называются счетчиками или таймерами. 205
8. Периферийные устройства управляющего микрокомпьютера Давайте для примера рассмотрим БИС таймера, специально раз- работанную для работы с микропроцессором Z80 — СТС (Counter Timer Circuit). Это 28-выводная БИС, содержащая регистр, в кото- рый загружается произвольное двоичное число. Это число и опре- деляет длительность отмеряемого отрезка времени. С каждым им- пульсом тактовой частоты из числа, загруженного в регистр тайме- ра при установке заданного интервала времени, вычитается 1. Ког- да значение этого числа становится равным 0, таймер вырабатывает сигналы INT и ZC/TO (zero count/time out). Установка таймера, то есть загрузка соответствующего числа импульсов, выполняется ЦПУ через шину данных. Как показано на Рис. 8.12, таймер сообщает ЦПУ о завершении счета по цепи: вывод INT таймера — вывод INT ЦПУ. Таймер j Осуществляет задержку, определяемую числом прошедших импульсов Подсчитывает импульсы, поданные на вход (это число может быть считано ЦПУ) ( Счетчик j Рис. 8.12. БИС таймера-счетчика (СТС) Для использования данной БИС в качестве таймера, подающе- го сигнал после прохождения заданного числа импульсов, на вход 0 необходимо подать периодическую последовательность импуль- сов. Если в программе запустить таймер, предварительно записав в его регистр число, соответствующее длительности отмеряемого ин- тервала времени, то с приходом каждого очередного импульса на 206
8.3. БИС таймера-счетчика (СТС) вход 0 таймер будет вычитать 1 из содержимого регистра. Когда со- держимое регистра станет равно 0, вырабатывается сигнал INT, оповещающий ЦПУ о том, что установленное время истекло. Сле- довательно, пока из таймера не придет сигнал окончания заданно- го интервала времени, ЦПУ может выполнять другую работу. В состав БИС входят 4-счетные схемы, которые можно запускать по отдельности. Кроме того, таймер можно применять в качестве генератора импульсов, период следования которых задается про- граммно. В этом режиме в регистр счетчика загружается число, со- Ьтветствующее заданному периоду следования импульсов. Как только счетчик закончит обратный отсчет загруженного в него чис- ла, это число снова автоматически загружается в счетчик, и отсчет повторяется. Поэтому на выходе ZC/TO таймера сигнал представ- ляет собой последовательность импульсов с периодом, соответству- ющим числу, загружаемому в счетчик. Например, в рассмотренной нами схеме управления шаговым двигателем скорость вращения вала шагового двигателя определя- лась частотой импульсов, подаваемых на блок управления. Если мы хотим с помощью микрокомпьютера осуществить независимое уп- равление несколькими двигателями, вращающимися с разной ско- ростью, то программа, генерирующая последовательность импуль- сов управления, подаваемых на отдельные блоки управления, будет довольно сложной. Имея в распоряжении БИС таймера, мы можем поручить ему выполнение функции счетчика, отмеряющего интервалы различ- ной длительности. Тогда задача управляющего микрокомпьютера сведется лишь к указанию направления вращения, а также момен- тов запуска и остановки каждого из двигателей. Составление соот- ветствующей программы не составит особого труда даже для начи- нающего программиста. Вообще если речь идет только об управлении шаговыми двигателя- ми, то можно приобрести специально предназначенные для этой це- ли интегральные схемы, что позволит еще более упростить программу, задающую скорость и направление их вращения. При этом ЦПУ по- лучит еще больше времени для выполнения основной программы. Интегральные таймеры часто используются для подсчета непери- одических импульсов, генерируемых какими-либо внешними уст- 207
8. Периферийные устройства управляющего микрокомпьютера ройствами. Так, если подключить ко входу таймера переключатель, то можно узнать, например, сколько раз были замкнуты его контак- ты. Для этого нужно считать из регистра таймера число импульсов, поступивших на его вход с момента обнуления. ИС таймера доволь- но часто используются совместно с различными датчиками, на вы- ходе которых формируются импульсы, частота которых зависит от измеряемого параметра. Некоторые из типов таких датчиков показа- ны на Рис. 8.13. Если импульсы с выхода датчика подать на вход тай- мера, то с помощью несложной программы можно преобразовать число импульсов в значение измеряемой величины. ос — символ пропорцио- нальности двух параметров [ Датчик угла ] (Завихрения] Число импульсов ос углу поворота Датчик расхода жидкости Пьезоэлектрически^^ преобразователь ] [ Контакты датчика]^ Число импульсов ос скорости потока внутри трубы ] Датчик перемещения] Число импульсов ос величине перемещения I Рис. 8.13. Примеры датчиков, генерирующих импульсы 8.4. ПРЕОБРАЗОВАНИЕ ЦИФРОВЫХ И АНАЛОГОВЫХ СИГНАЛОВ Все данные, которыми оперирует ЦПУ микрокомпьютера, представляют собой комбинации электрических сигналов двух уровней, условно называемых «О» и «1», и являются цифровыми сигналами. В то же время практически все физические вели- чины, с которыми мы имеем дело в повседневной жизни (размеры предметов, скорость, температура, масса и т. д.), могут принимать любые значения в непрерывном диапазоне, поэтому сигналы изме- рительных приборов и датчиков, следящих за состоянием различных 208
8.4. Преобразование цифровых и аналоговых сигналов механизмов и систем в быту и на производстве, как правило, явля- ются аналоговыми сигналами. Следовательно, управление такими системами с помощью микрокомпьютера требует применения уст- ройств, выполняющих преобразование аналоговых сигналов в циф- ровые, и наоборот, обеспечивая «взаимопонимание» между ЦПУ и внешними источниками и приемниками аналоговых сигналов. Для того чтобы связь была двухсторонней, применяются преоб- разователи двух типов: аналого-цифровые и цифро-аналоговые (АЦП и ЦАП). Рассмотрением принципа их устройства и функцио- 'нальных возможностей мы и займемся. Цифро-аналоговый преобразователь Начнем с цифро-аналогового преобразователя, преобразующего (как это следует из его названия) комбинации двоичных кодов, вы- рабатываемых микрокомпьютером, то есть цифровой сигнал в ана- логовый электрический сигнал. Внешними устройствами, подключаемыми к микрокомпьютеру и требующими для их управления аналогового сигнала, могут быть I Аналоговые устройства 2-координатный самописец х — символ пропорцио- нальности двух параметров Отклонение пера от начала координат ос входному напряжению Рис. 8.14. Устройства, управляемые аналоговыми сигналами 209
8. Периферийные устройства управляющего микрокомпьютера двигатель постоянного тока, электрический гидравлической кла- пан, самопишущий прибор и т, д. (Рис. 8.14). В любом подобном случае необходимо применение ЦАП. В частности, для управления скоростью вращения ротора двига- теля постоянного тока на его обмотку возбуждения подается посто- янное напряжение, пропорциональное 8-разрядному двоичному числу, которое считывается из порта вывода микрокомпьютера, как показано на Рис. 8.15. Рис. 8.15. Схема управления двигателем постоянного тока с помощью микрокомпьютера Ассортимент ЦАП, представленных на потребительском рынке, включает достаточно большое разнообразие типов. Так, помимо рассматриваемых нами 8-разрядных ЦАП, встречаются 10-, 12-, 16-, 32-разрядные и т. д. Большинство из них рассчитано на стандартное входное напряжение, снимаемое непосредственно с интегральных схем ТТЛ или КМОП. Аналоговый сигнал снимается с выхода ЦАП в виде напряжения или тока, пропорционального значению вход- ного двоичного кода. В зависимости от конкретного подключаемо- го устройства выбирают ЦАП, с требуемым диапазоном выходного напряжения (0...5 В, 0...10 В, -5...5 В, -10...10 Вит. д.). На Рис. 8.16 показана схема простейшего ЦАП с 4-разрядныМ входом (ЦАП на резистивной матрице R-2R). Если составить мно- гоступенчатую цепочку из четырех пар резисторов, сопротивление 210
8.4. Преобразование цифровых и аналоговых сигналов Принцип работы ИЛИ | Выходное аналоговое напряжение 2R D3 Di Do R 2R R 2R R 2R 2R «Лестница», составленная из резисторных «ступенек» D2 4 о чу 8D3+4D2+2D]+Dq Выходное напряжение А = 5 В х - ------—- 16 На входы D3... Do подаются сигналы «О» (О В) или «1» (5 В) Рис. 8.16. Схема простейшего ЦАП на резистивной матрице R-2R которых отличается вдвое, то есть R и 2R, то на ее выходе получим напряжение, пропорциональное 4-разрядному двоичному коду D0...D3, поданному на вход. Напряжение на выходе ЦАП вычисляется по формуле, приве- денной на этом же рисунке. В соответствии с формулой напряжение на выходе ЦАП может ступенчато изменяться от 0 до 4.96 В в зави- симости от величины 4-разрядного двоичного числа, представляю- щего код входного сигнала. Так как с помощью четырех двоичных разрядов можно перебрать все десятичные числа от 0 до 15, выход- ное напряжение данного ЦАП имеет всего 16 градаций. Когда на входах D3...D0 установлено число 0000, напряжение на выходе ми- нимально и равно 0 В. Максимальное значение напряжения (4.96 В) на выходе соответствует входному сигналу «1111». Сопротивление резисторов не имеет принципиального значения. Его нижний пре- дел определяется мощностью, отбираемой от источника питания, а верхний ограничен требуемой помехоустойчивостью схемы. Типо- вые значения сопротивлений резисторов R и 2R равны 10 и 20 кОм или 15 и 30 кОм. Данная схема ЦАП отличается простотой, и ее может собратьлюбой на- чинающий радиолюбитель. Единственное условие, которое необходимо соблюсти, это минимальный разброс сопротивлений резисторов. В против- ном случае трудно рассчитывать на высокую точность преобразования. Рас- 211
8. Периферийные устройства управляющего микрокомпьютера смотренный нами 4-разрядный ЦДЛ позволяет изменять напряжение на выходе со ступенькой 0.31 В. Увеличив число звеньев R-2R изображенной на рисунке цепи, можно повысить разрядность преобразователя и, следова- тельно, обеспечить более плавную выходную характеристику, т. к. ступень- ка пропорционально уменьшается с увеличением разрядности. В числе наиболее распространенных ЦДЛ промышленного изго- товления можно упомянуть интегральную схему DAC 80-CBI-V фир- мы «Micro NetWork» (Рис. 8.17). Схема представляет собой быстро- действующий цифро-аналоговый преобразователь, отличающийся высокой точностью. Это достигается за счет применения тонкопле- ночных высокостабильных резисторов, встроенного прецизионного источника опорного напряжения и операционного усилителя. Число разрядов входных данных Диапазоны выходного напряжения Время установления выходного напряжения Точность преобразования Напряжение питания 12 Путем коммутации выводов можно установить выходное напряжение в диапазонах 0...5 В; 0...10 В; -2.5...2.5 В; -5...5 В; -10...10 В Змкс ±0.3% (0~70°С) +5 В, ±15 В (три напряжения питания) Рис. 8.17. Пример интегральной схемы ЦАП Давайте на конкретном примере рассмотрим, как можно решить одну из наиболее часто возникающих проблем, связанных с приме- нением ЛАП. Предположим, нам нужно использовать 12-разряд- ный ЦАП для преобразования в аналоговую форму управляющих 212
8.4. Преобразование цифровых и аналоговых сигналов сигналов 8-разрядного ЦПУ. Поскольку 8-разрядный ЦПУ не мо- жет одновременно установить на шине данных 12-разрядное число, необходимо дважды применить команду вывода, разделив это чис- ло на две части. Можно, например, сначала вывести 8 младших раз- рядов числа, а затем 4 старших разряда. Однако поскольку невоз- можно выполнить две операции вывода данных за один раз, между загрузкой 8 младших разрядов и следующей загрузкой 4 старших разрядов проходит некоторое время, в чем, собственно, и состоит рассматриваемая нами проблема. Допустим, на входе ЦАП установлено 12-разрядное число 000011111111. При этом на его аналоговом выходе вырабатывается напряжение, соответствующее этому числу. Что произойдет в слу- чае, если следующим числом, которое должен преобразовать ЦАП, будет число 000100000000, отличающееся от предыдущего всего лишь на единицу младшего разряда? В этом случае сразу после вы- полнения команды вывода, загружающей 8 младших разрядов, но до выполнения следующей операции (загрузки 4 старших разрядов) в 12-разрядный ЦАП будет загружено число 000000000000, и напря- жение на аналоговом выходе резко изменится по величине. Если внешнее устройство, подключенное к аналоговому выхо- ду ЦАП, инерционно, то есть время его реакции на изменение уп- равляющего напряжения велико, то его состояние не успеет изме- ниться, прежде чем в 4 старших разряда цифрового входа ЦАП бу- дут- введены новые значения 12-разрядного числа. При этом за- держка ввода второй «порции» данных не окажет на работу внеш- него устройства заметного влияния. Если же время реакции уст- ройства на изменение входного сигнала сравнимо с временем за- держки ввода данных, то в его работе могут возникнуть помехи. Один из способов решения этой проблемы проиллюстрирован с помощью Рис. 8.18. Схема, изображенная на Рис. 8.18, содержит два 8-разрядных регистра (порт А и порт В), выполненных по принципу защелки. Между ЦАП и портом А, на который выводятся восемь младших Разрядов данных, установлена еще одна схема защелки (С), рабо- тающая синхронно с портом В, предназначенным для загрузки че- тырех старших разрядов при выполнении второй команды вывода Из ЦПУ. Синхронизация осуществляется по сигналу на выводе G 213
8. Периферийные устройства управляющего микрокомпьютера Рис. 8.18. Схема подключения микрокомпьютера к 12-разрядному ЦАП схемы защелки С, поступающему с выхода дешифратора адреса порта В. Таким образом, данные, соответствующие восьми млад- шим разрядам кода, передаваемого в ЦАП, задерживаются в порту С до момента передачи данных через порт В (четыре старших раз- ряда). В результате 12-разрядный код одновременно поступает на все 12 входов (Dq.-.Dh) ЦАП, а аналоговый сигнал на его выходе не изменяется до окончания двухтактного цикла ввода данных. Аналого-цифровой преобразователь (АЦП) Чтобы узнать состояние какой-либо системы, являющейся объ- ектом управления, микрокомпьютер анализирует сигналы различ- ных датчиков. Датчики — это приборы, которые преобразуют физи- ческие величины, такие как температура, перемещение, скорость, давление, в электрические сигналы, например — напряжение или ток. Существует целый класс различных датчиков, специально предназначенных для подключения к цифровым приборам, в част- ности, к микропроцессорам. На выходе таких датчиков вырабаты- 214
8.4. Преобразование цифровых и аналоговых сигналов вается тот или иной цифровой код в зависимости от величины из- меряемого параметра. Однако большинство производимых датчи- ков имеет лишь аналоговый выход. Некоторые типы датчиков, вырабатывающих аналоговые сиг- налы, показаны на Рис. 8.19. Для того чтобы сигналы таких дат- чиков стали понятны микрокомпьютеру, необходимо предвари- тельно пропустить их через аналого-цифровой преобразователь (АЦП), в котором напряжение преобразуется в цифровой код. Одновременно АЦП играет роль усилителя сигналов, поскольку датчики, как правило, генерируют довольно слабые электричес- кие сигналы, которые необходимо усилить до уровня порядка не- скольких вольт. Например, в системе управления впрыском топлива автомо- бильного двигателя, с которым мы познакомились в первой главе, [ Манометрический датчик ] _ Сила, давление Давление <и S Пневмоэлек- трический преобразователь Температура S S ( Терморезистор ] Фотопри- емник Потенци- ометр (—-------------------, Угол поворота, I. Датчик перемещения J перемещение Яркость 8.19. Датчики, вырабатывающие аналоговые сигналы 215
8. Периферийные устройства управляющего микрокомпьютера для измерения напряжения аккумулятора, расхода воздуха и темпе- ратуры охлаждающей жидкости используются аналоговые датчики. Прежде чем сигналы этих датчиков попадут в ЦПУ контроллера, они с помощью АЦП преобразуются в цифровой формат. Так как же все-таки работает АЦП? Существуют различные типы АЦП, из которых наиболее распро- странены устройства, в которых используются метод двухтактного ин- тегрирования и метод последовательного приближения. Принцип двухтактного интегрирования заключается в том, что аналоговый сиг- нал на входе АЦП интегрируется в течение заданного интервала вре- мени (происходит зарядка конденсатора). Затем во входную цепь ин- тегратора задается эталонный ток, имеющий направление, противо- положное измеряемому току (например, если измеряемое напряже- ние положительно, то подается отрицательное эталонное напряже- ние). С помощью таймера подсчитывается интервал времени, за кото- рое эталонный ток разрядит конденсатор и напряжение на выходе ин- тегратора станет равным 0, который, в свою очередь, управляет под- счетом эталонных импульсов в счетчике. Полученное таким образом двоичное число с выходов счетчика используется для пересчета в зна- чение измеряемого тока (напряжения). Можно привести весьма на- глядный пример, поясняющий этот принцип измерения. Допустим, требуется измерить расход воды, вытекающей из не- плотного сочленения трубопровода. Можно подставить ведро и собирать вытекающую воду в течение определенного времени. За- тем нужно убрать ведро и с помощью насоса выкачивать воду из ведра до тех пор, пока ведро не станет пустым. Измерив время от- качки воды и зная производительность насоса, можно рассчитать расход воды. Стоимость интегральных схем АЦП, основанных на методе ин- тегрирования, относительно невысока. В тоже время они имеют су- щественный недостаток — низкое быстродействие, обусловленное тем, что для точного измерения величины аналогового сигнала тре- буется достаточно продолжительное время. Теперь рассмотрим принцип работы АЦП, использующих метод последовательных приближений. Упрощенная схема подобного АЦП представлена на Рис. 8.20. В состав преобразователя входят ЦАП, регистр последовательных приближений и компаратор. 216
8.4. Преобразование цифровых и аналоговых сигналов Рис. 8.20. Схема и принцип действия АЦП, работающего по методу последовательных приближений Функция регистра последовательных приближений состоит в следующем. В исходном состоянии во всех разрядах (D7...D0) реги- стра установлено значение «О». Цикл измерения начинается с того, Что старший разряд D7 регистра устанавливается в состояние «1». Затем с помощью компаратора сравнивается напряжение на выходе ЦАП и на входе АЦП. Если напряжение на входе оказывается боль- ше, то значение логического сигнала в разряде D7 сохраняется рав- ным «1». В противном случае старший разряд регистра обнуляется, 217
8. Периферийные устройства управляющего микрокомпьютера а разряд D6 устанавливается в состояние «1». После этого снова про- изводится сравнение напряжений. Этот цикл операций последова- тельно применяется ко всем остальным разрядам регистра. АЦП данного типа отличаются более высоким быстродействием, глав- ным образом за счет уменьшения времени преобразования. Алгоритм работы АЦП этого типа напоминает процедуру взве- шивания предметов на рычажных весах (см. Рис. 8.20). Установив взвешиваемый предмет на левую чашку весов, ставим гири на ле- вую чашку, начиная с самой большой. Если перевешивает правая чашка, то гирю следует заменить на более легкую. Этот процесс продолжается до тех пор, пока обе чашки не уравновесят друг друга. Остается лишь просуммировать массу всех гирь, установленных на правую чашку весов. На Рис. 8.21 показан внешний вид интегральной схемы АЦП од- ной из наиболее популярных серий. Она преобразует аналоговое напряжение на входе в 12-разрядный цифровой сигнал уровня ТТЛ. Сигнал начала Сигнал окончания преобразования Аналоговый входной сигнал 12-разрядный цифровой выход преобразования Число разрядов выходных данных Диапазон входного напряжения Скорость преобразования Точность ^преобразования Напряжение питания 12 Путем коммутации выводов можно выбрать входное напряжение в диапазонах 0...5 В; 0...10 В; -2.5...2.5 В; -5...5 В; -10... 10 В 25 мкс ±0.1% (0...70"С) +5 В, ±15 В (три напряжения питания) Рис. 8.21. Интегральная схема АЦП 218
8.4. Преобразование цифровых и аналоговых сигналов Работа схемы синхронизируется с помощью сигналов начала и окончания цикла преобразования. Время одного цикла преобра- зования для ИС, показанной на Рис. 8.21, составляет 25 мкс. Как нетрудно заметить, процедура преобразования аналогового сиг- нала в цифровой намного сложнее процедуры обратного преобра- зования и требует значительно больше времени. Если аналоговый сигнал на входе АЦП изменяется медленно, то никаких особых проблем при этом не возникает. В противном случае преобразова- ние аналогового сигнала в цифровой происходит с ошибками, тем (юлее существенными, чем выше скорость изменения сигнала на входе АЦП. Попробуем оценить быстродействие АЦП, на вход которого по- дается изменяющийся во времени аналоговый сигнал. Будем счи- тать точность преобразования достаточной, если изменение анало- гового сигнала за весь цикл преобразования не превышает значе- ния, соответствующего половине младшего значащего разряда (МЗР) выходного цифрового сигнала. Для сигнала синусоидальной формы с амплитудой, равной диапазону напряжения на входе АЦП, максимальную частоту входного сигнала, гарантирующую требуе- мую точность преобразования (1/2 МЗР), можно рассчитать по при- веденной ниже формуле. Когда на вход АЦП подается синусоидальный сигнал, мак- симальная частота равна: r = 1 max~2NxnxT [Гц]’ где N — число разрядов АЦП; Т — время цикла преобразования АЦП. Вычислим по этой формуле максимальную частоту входного сигнала АЦП, представленного на Рис. 8.21, Подставляя значения А= 12 и Т= 2.5 х ИГ6 с, получим/max = 3.1 Гц. Таким образом, точ- ность преобразования АЦП гарантируется лишь при условии, что Период изменения входного сигнала намного больше времени пре- образования (в рассматриваемом случае значения этих параметров Равны соответственно 320 и 0.0025 мс). Этот результат мы получили исходя из того, что преобразуемый аналоговый сигнал подается непосредственно на вход АЦП. Из-за 219
8. Периферийные устройства управляющего микрокомпьютера низкого быстродействия АЦП приходится вво- дить ограничение на скорость изменения вход- ного сигнала. А что если для преобразования быстро изменяющегося аналогового сигнала в цифровой запомнить мгновенное значение аналогового сигнала на входе АЦП и сохранять его постоянным в течение всего цикла преоб- разования? Действительно, такой способ широко ис- пользуется в АЦП, в состав которого входит ус- тройство выборки-хранения. Это устройство в указанный момент времени (например, по фронту импульса) выбирает сигнал — выборка, запоминает его — хранение. На Рис. 8.22 показан пример применения устройства выборки- хранения с 12-разрядным АЦП (ADC 80 AG-12, Рис. 8.21). Считывание 12-разрядного цифрового кода на выходе АЦП пор- том ввода-вывода микрокомпьютера осуществляется через парал- лельный интерфейс, порты А и В которого устанавливаются в ре- жим ввода. После считывания в микрокомпьютер очередного паке- та данных на вывод RDY ПИ, установленного в режим ввода, пода- ется сигнал «1», по которому ПИ оповещает внешнее устройство (например, аналоговый датчик) о готовности к приему следующей «порции» данных. Таким образом, по сигналу RDY осуществляется синхронизация работы устройства выборки-хранения и АЦП. Как показано на Рис. 8.22, для того чтобы сформировать сигнал начала преобразования и сигнал выборки-хранения из сигнала ARDY порта А, применяются два одновибратора. Одновибратор вырабатывает одиночный импульс при поступлении на его вход на- растающего или спадающего фронта сигнала. Длительность этого импульса пропорциональна произведению значений сопротивле- ния резистора и емкости конденсатора, образующих цепь задержки. Как показано на схеме, 4 старших разряда (D, i...D8) и 8 младших разрядов (D7...Do) 12-разрядного цифрового выхода АЦП соединены соответственно с выводами данных портов А и В. С помощью вре- менной диаграммы, представленной на Рис. 8.22, рассмотрим поря- док выполнения операций при вводе в ЦПУ аналогового сигнала. 220
8.4. Преобразование цифровых и аналоговых сигналов Первая команда ввода (порт А) Третья команда ввода <ДЦина данных 4с1аршихразряда Вторая команда л ввода <Д11ина данных 8 младших разрядов преобразования ЛЛ Порт А, сигнал RDY Сигнал выборки-хранения Q Сигнал начала преобразования 1 I Выборка Хранение Время выборки 6 мкс определяется типом устройства . выборки-хранения @ 12-разрядные_______ выходные данные (5) Сигнал окончания преобразования Преобразование 25 мкс Выполнение первой команды ввода (из сигнала ARDY вырабатывается сигнал выборки-хранения) Выполнение второй команды ввода (8 младших разрядов считываются из порта В в ЦПУ) ------ Время ______ J преобразован ия |25.мкс определяется типом АЦП Выполнение третьей команды ввода (4 старших разряда считываются из порта А в ЦПУ) Рис. 8.22. Схема ввода аналогового сигнала в микрокомпьютер Сначала для выработки сигнала ARDY выполняется первая команда ввода. Это вспомогательная команда ввода, так как дан- ные, считываемые по этой команде из порта А в ЦПУ, не использу- ются. По нарастающему фронту сигнала ARDY (позиция 1 на вре- менной диаграмме) запускается одновибратор А, вырабатывающий сигнал выборки-хранения (позиция 2). Когда этот сигнал равен «1», устройство выборки-хранения считывает входной аналоговый сиг- нал, когда он равен «О», хранит считанное значение и устанавлива- ет его на выходе. Длительность импульса одновибратора А больше времени, необходимого для выборки (на рисунке — 6 мкс). Для того чтобы одновременно с выходным сигналом устройства выборки-хранения сигнал (3) начала цикла преобразования АЦП 221
8. Периферийные устройства управляющего микрокомпьютера принял значение «1», используется одновибратор В. Время преоб- разования АЦП равно 25 мкс. Поэтому через 25 мкс, после того как значение сигнала 3 станет равным «1», АЦП сформирует и устано- вит на выходе 12-разрядные данные (4). Одновременно с этим сиг- нал окончания преобразования принимает значение «О». По коман- дам ввода (2, 3) ЦПУ считывает эти данные, в результате чего из портов В и А параллельного интерфейса в ЦПУ последовательно вводятся сначала 8 младших разрядов, а затем 4 старших разряда данных. Команда ввода из порта В должна предшествовать команде ввода из порта А. В противном случае будет выработан сигнал ARDY, и следующий цикл преобразования аналогового сигнала начнется, прежде чем будут считаны 8 младших разрядов из порта В. При этом возможны ошибки трансляции данных. В программе должна быть предусмотрена задержка 31 мкс после выполнения первой холостой команды ввода до выполнения ко- манд ввода 2 и 3, считывающих преобразованные данные. Этот вре- менной интервал складывается из времени, необходимого для вы- борки аналогового сигнала с помощью устройства выборки-хране- ния (6 мкс) и времени, в течение которого осуществляется цикл преобразования (25 мкс). С целью эффективного использования ЦПУ обращение к нему из ПИ происходит по сигналу прерывания, который формируется из сигнала окончания цикла преобразова- ния, а в программе обработки прерывания осуществляется считы- вание данных. Описанный выше метод позволяет значительно повысить точ- ность преобразования изменяющегося во времени аналогового сиг- нала и скорость его ввода в ЦПУ. Теперь давайте рассмотрим приве- денную ниже программу и попробуем оценить скорость ввода дан- ных в ЦПУ. Задача № 7 — программа ввода в ЦПУ изменяющегося во времени аналогового сигнала Разберем следующую задачу программирования. Адреса используемых портов ПИ определяются, как показано в Табл. 8.2 (тот же адрес, что и в примере на Рис. 8.2). Оба порта (А и В) ПИ устанавливаются в режим ввода (управляющий код — 4FH). Зададим начальный адрес загрузки данных в области ОЗУ равным 0900Н. 222 ....
8.4. Преобразование цифровых и аналоговых сигналов ~ Задача № 7 ~ С помощью схемы ввода аналогового сигнала, состоящей из устройства выборки-хранения, 12-разрядного АЦП и ПИ, соединенных как показано на Рис. 8.22, изменяющийся аналоговый сигнал считывается с высокой скоростью, и 128 12-разрядных кодов последовательно загружаются в память Таблица 8.2. Адреса ПИ Порт Адрес ПортА Данные — ОАОН Управляющий код — 0А1Н Порт В Данные — 0А2Н Управляющий код — ОАЗН Итак, для того чтобы считать 12-разрядное число, полученное в результате преобразования аналогового сигнала, по схеме, приве- денной на Рис. 8.22, необходимо трижды выполнить команду ввода. Первая команда цикла последовательного считывания преобразо- ванных данных — вспомогательная (см. Рис. 8.23). Посредством следующих двух команд ввода осуществляется считывание первого 12-разрядного числа. Сначала считываются восемь младших разрядов двоичного чис- ла. Последняя в цикле команда ввода считывает четыре старших разряда и вырабатывает сигнал ARDY, указывающий начало следу- ющего цикла преобразования данных. Схема алгоритма рассматриваемой нами задачи и соответствую- щая программа в мнемокодах приведены на Рис. 8.24. Как и в рас- смотренных ранее примерах программ, в колонке справа показано количество импульсов, требуемое для выполнения соответствую- щей команды. В программе не используется функция прерывания. Временная задержка выполняется внутрипрограммно. Содержание этой опера- ции становится очевидным из сопоставления схемы алгоритма с текстом программы. Например, команда «IN A, (APORTD)» выпол- 223
8. Периферийные устройства управляющего микрокомпьютера 8.4. Преобразование цифровых и аналоговых сигналов Команда ввода (порт А) I________ Задержка >31 мкс Команда ввода (порт В) Команда ввода (порт А) ______ I ..... Задержка >31 мкс J Команда ввода (порт В) Команда ввода (порт А) I Задержка >31 мкс Команда ввода (порт В) Команда ввода(порт А) Холостая команда ввода, вырабатывающая сигнал ARDY Считывается первый 12-разрядный код Считывается второй 12-разрядный код Считывается третий 12-разрядный код Рис. 8.23. Порядок выполнения команд ввода при последовательном считывании данных няется за 11 импульсов тактового сигнала, а команда «DJNZ», как мы уже знаем, вычитает 1 из содержимого регистра В. Если резуль- тат вычитания отличен от 0, осуществляется переход. Для выполне- ния этой команды требуется 8 импульсов тактовой частоты, если она совершается без перехода, или 13 импульсов — с переходом. Задержка 32 мкс (блок 5) и 22 мкс (блок 12) реализуется с помо- щью циклически повторяющейся команды «DJNZ». Количество проходов цикла, соответствующее требуемому времени задержки, перед выполнением цикла загружается в регистр В. Давайте под- считаем время, необходимое для выполнения отдельных частей программы. Для этого, как обычно, просуммируем количество им- пульсов тактовой частоты (соответствующие значения приведены на Рис. 8.24). 224 . ............................. .......... Ф 3 7 ( Начало ) Установка указателя стека — 1000Н I Загрузка кода 0900Н в пару регистров H-L I Установка портов А и В ПИ в режим ввода 1 ------------------ Вырабатывается сигнал ARDY I ® Г Задержка 32 мкс 1 7 8 младших разрядов считываются из порта В I Это значение загружается в память по адресу, хранящемуся в H-L ®[ 2 HL^HL + 1 4 старших разряда считываются из порта А I ORG 0000Н APORTD APORTC BPORTD BPORTC EQU ОАОН EQU 0А1Н EQU 0A2H EQU 0A3H LD SP, 1000H ® LD HL, 0900H © LD A, 4FH I OUT (APORTC),A ®т 6 OUT (BPORTC), AJ число IN A, (APORTD) © импульсов LD B,06H (7) L1 DJNZ LI Г (13,8) DATAIN: IN A, (BPORTD)® (11) LD (HL), A ® (7) INC HL © (6) IN A, (APORTD)® (11) LD (HL), A ® (7) INC HL ® (6) LD В, 04H 1X (7) L2 DJNZ L2 (13,8) LD A, L (4) CP OOH (7) JP NZ, DATAINJ (10) END Задержка 22 мкс Это значение загружается в память по адресу, хранящемуся в H-L .........~Т HL <- HL+1 НЕТ Содержимое регистра L = 0? ДА [ Конец ] vc. 8.24. Схема алгоритма и программа для задачи № 7 '—2970 225
8. Периферийные устройства управляющего микрокомпьютера ~ Вычисление времени, необходимого для выполнения отдельных частей программы ~ (1) Время выполнения блока 5 ( wL/www Х мкс ~ 32 мкс Команда LD Команда DJNZ Период импульсов тактовой частоты (2) Время выполнения и тактовая частота блока 12 Число импульсов = 7 + 13x3 + 8 =54 импульса Время выполнения = 54 X 0.4 = 21.6 мкс (3) Время с момента сигнала ARDY, сформированного по команде ввода внутри цикла 9 до считывания данных по команде ввода в блоке 6 (7 + 6 + 54 + 4 + 7 +10 )Х 0.4= 35.2 мкс ® (П) ® © (4) Продолжительность цикла ввода данных (метка DATAIN) {(11 + 7 + 6) X 2 + 54 + 4 + 7 + 10} х 0.4 = 49.2 мкс С момента подачи сигнала ARDY до выполнения команды «1N A, (BPORTD)», осуществляющей ввод восьми младших разрядов, проходит больше 32 мс (3). Это является гарантией того, что АЦП успеет завершить преобразование, и 12-разрядные данные на его выходе будут готовы к вводу в ЦПУ. Далее, как показывают вычис- ления (4), период цикла считывания данных в этой программе со- ставляет 49.2 мкс. Следовательно, в микрокомпьютер можно вво- дить 12-разрядные данные, указывающие значение аналогового сигнала, изменяющегося во времени, через каждые 49.2 мкс. Для синусоидального сигнала можно оценить верхнюю границу часто- ты преобразования АЦП исходя из условия, что производится бо- лее 2 выборок сигнала в течение одного периода синусоиды. Оцен- ка максимальной частоты аналогового сигнала для этого случая производится по следующей формуле: fmax 2хТ 2x49.2x10"6 10 2 кГц’ где Т— период выборки. 226
8. Периферийные устройства управляющего микрокомпьютера Если этот результат сравнить с максимальной частотой в случае непосредственного ввода аналогового сигнала в АЦП, изложенного ранее, то становится понятно, насколько применение устройства выборки-хранения расширило частотный диапазон преобразуемых сигналов. ОБОБЩЕНИЕ ГЛАВЫ 1. Применение портов ввода-вывода БИС ПИ имеет ряд преимуществ • перед использованием штатных портов ЦПУ. Они содержат несколь- ко 8-разрядных регистров ввода-вывода и могут программироваться как на ввод, так и на вывод данных. На их основе реализуется преры- вание. 2. Прерывание необходимо для эффективного использования ЦПУ. Применяя функцию прерывания, по электрическому сигналу, кото- рый посылается из внешнего устройства на ЦПУ, можно внести из- менения в запланированный алгоритм его работы и выполнить про- грамму, заранее подготовленную на этот случай. При выполнении прерывания необходима синхронизация с внешними устройствами обмена данными. 3. Для одновременного ввода в АЦП 12-разрядных данных через 8-раз- рядный порт необходимо разработать соответствующую схему и ал- горитм соответствующей процедуры, для чего требуется определен- ная доля изобретательности (см. Рис. 8.18). 4. Если вы используете АЦП, не забывайте о мерах согласования его быстродействия с максимальной частотой входного аналогового сиг- нала с помощью специальных устройств. Практические задания 1) Составьте схему подключения двух БИС ПИ, изображенных на Рис. 8.25, к ЦПУ Z80 для использования их в качестве портов ввода-вывода. Исходите из того, что адреса портов ПИ1 и ПИ2 равны соответственно 20Н...23Н и24Н...27Н. 2) Объясните, в чем состоит сходство и чем различаются подпрограммы и программы обработки прерывания. 3) Длительность цикла преобразования АЦП равна 25 мкс. Какова макси- мальная частота аналогового сигнала, если продолжительность цикла работы устройства выборки-хранения равна 5 мкс? 227 Н
8. Периферийные устройства управляющего микрокомпьютера ЦПУ а7 а<, As Ад А3 а2 А1 Ао — ПИ1 СЁ А/В C/D ПИ2 СЁ А/В C/D Рис. 8.25. Исходные данные к заданию 1
ПРИЛОЖЕНИЯ 1. Список команд ассемблера ЦПУ Z80 В Табл. 1 указаны мнемокоды и содержание 70 команд ассембле- ра ЦПУ Z80. В тексте книги мы рассмотрели только основные команды. Опи- сание команд блочной пересылки, поиска в блоке памяти, опера- ций с флагами, команд кольцевого сдвига, а также сдвига поразряд- ной обработки и перезапуска можно найти в других источниках. 2. Команды ЦПУ Z80 В Табл. 2, помимо описания выполняемых операций, приведе- ны: требуемое число импульсов тактовой частоты, изменение со- стояния регистра флагов, мнемокоды, машинные коды. Без этой таблицы не обойтись при составлении программ на ассемблере или в машинных кодах. К этой таблице следует обращаться для пра- вильного написания мнемонических кодов и операндов, для опре- деления числа байтов команды, для определения состояния флагов и для подсчета времени выполнения программы. 229
Приложения Таблица 1. Общий обзор команд ассемблера ЦПУ Z80 Команды Мнемокод Выполняемая операция 8-разрядная загрузка LD Загрузка 8-разрядных данных 16-разрядная загрузка LD PUSH POP Загрузка 16-разрядных данных Команды обмена EX EXX Обмен 16-разрядными данными Блочная пересылка LDI LDIR LDD LDDR Данные из одной области памяти пересылаются в другую Поиск в блоке памяти CPI CPIR CPD CPDR Пошаговое сравнение с числом, увеличиваемым на 1 8-разрядные вычисления ADD ADC 8-разрядное сложение SUB SBC 8-разрядное вычитание AND Логическое умножение OR Логическое сложение XOR Исключающее ИЛИ CP Сравнение INC Прибавление 1 DEC Вычитание 1 16-разрядные вычисления ADD ADC 16-разрядное сложение SBC 16-разрядное вычитание INC Прибавление 1 DEC Вычитание 1 Операции с флагами аккумулятора DAA Десятичная коррекция аккумулятора CPL Инвертирование разрядов NEG Изменение знака __ CCF Инвертирование флага переноса __ SCF Флаг переноса устанавливается в 1 Управление ЦПУ NOP Ничего не делает (пустой оператор) ___ HALT Останов ЦПУ DI Запрет прерывания __ El Разрешение прерывания IM Установка режима прерывания 230
Приложения Табл. 1 (окончание) Команды Мнемокод Выполняемая операция Сдвиг, кольцевой сдвиг RL RLC Сдвиг по кольцу влево RR RRC Сдвиг по кольцу вправо SLA SRA SRL Сдвиг каждого разряда вправо, влево RLD RRD Сдвиг на 4 разряда 1 Поразрядная ' обработка BIT SET RES Выборка разряда Установка разряда Сброс разряда i Перезапуск RST Вызов по указанному адресу j Ввод-вывод IN Ввод содержимого порта в регистр INI INIR IND INDR Содержимое порта заносится в память последовательно OUT Вывод содержимого регистра в порт OUTI OTIR OUTD OTDR Содержимое памяти последовательно считывается и посылается в порт Переход JP JR DJNZ Безусловный переход по абсолютному адресу Безусловный переход по относительному адресу Выполняется В - 1, если В Ф 0 — переход Вызов CALL Вызов подпрограммы Возврат RET RETI RETN Возврат из подпрограммы Возврат из программы обработки прерывания 231
Приложения Таблица 2. Команды ЦПУ Z80 (выборка) Команда ассемблера Машинные коды Изменение состояния регистра флагов Число тактовых импульсов Выполняемая операция S Z н р V N с ADCA, п ADCA, А ADC А, В ADCA, С ADCA, D ADCA, Е ADCA, Н ADCA, L ADCA, (HL) ADCA, (IX+л) ADCA, (IY+л) СЕ л 8F 88 89 8А 8В 8С 8D 8Е DD8En FD8En □ □ □ • □ 0 □ 1 7 ' 4 7 19 19 8-разрядное сложение с переносом А<-А+источник+ С(перенос) ADC HL, BC ADC HL, DE ADC HL, HL ADC HL, SP ED4A ED 5А ED6A ED7A □ □ Л • □ 0 □ 15 16-разрядное сложение с переносом HL«-HL+ ИСТОЧНИК+ С (перенос) ADDA, n ADD A, A ADD A, В ADDA, C ADDA, D ADDA, E ADDA, H ADDA, L ADDA, (HL) ADDA, (IX+л) ADDA, (IY+л) Сбл 87 80 81 82 83 84 85 86 DD 86 л FD86n □ □ □ • □ 0 □ 7 > 4 7 19 19 8-разрядное сложение А«-А+источник п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Д — не определен 232
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение с регистра( остояння шагов Число тактовых импульсов Выполняемая операция S Z н р V N С ADD HL, ВС ADD HL, DE ADD HL, HL ADD HL, SP ADD IX, BC ADD IX, DE ADD IX, IX ADD IX, SP ADD IY, BC ADD IY, DE ADD IY, IY ADD IY,SP 09 19 29 39 DD09 DD 19 DD 29 DD 39 FD09 FD19 FD 29 FD 39 • • А • • 0 □ । Н ' 16-разрядное сложение Н Le- Н L+ источник 1Х«-1Х+источник IY^IY+источник ' 15 ' AND л ANDA AND В ANDC ANDD ANDE ANDH ANDL AND (HL) AND (IX+л) AND (IY+л) Е6 п А7 АО А1 А2 АЗ А4 А5 А6 DD А6 п РОАбл □ □ 1 □ • 0 0 t 7 ’ 4 7 19 19 Логическое умножение А«-Алисточник CALL NZ, Im CALL Z, Im CALL NC, Im CALL C, Im CALL PO, Im CALL PE, Im CALL P, Im CALL M, Im С4лг/ СС т 1 D4 ml DC т / Е4 т / ЕС т 1 F4 ml ТС ml • • • • • • • с условиями 17 Без условий 10 Вызов подпрограм- мы без условий и с условиями. При выполнении условий NZ, Z, NC, С, PO, РЕ, Р, М вы- полняется команда CALL 1т n — 8-разрядная константа Im — 16-разрядная константа • — не изменяется □ А — изменяется в соответствии с результатом — не определен 233
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение состояния регистра флагов Число тактовых импульсов Выполняемая операция S z н p V N c CALL 1т CD ml • • • • • • • 17 При невыполнении условий вызова подпрограммы содержимое РС загружается в стек РСМлг СРп СР А СРВ СР С CPD СРЕ СРН CPL СР (HL) СР (1Х+л) СР (IY+n) FE n BF B8 B9 BA BB BC BD BE DD BE л FDBEn □ □ □ • □ 1 □ 1 7 1 4 7 19 19 Сравнение. Выполняется вычитание А - источник. Содержимое А не меняется. Меняется только флаг DECA DEC В DEC С DECD DECE DECH DECL DEC (HL) DEC (IX+л) DEC (IY+л) 3D 05 0D 15 ID 25 2D 35 DD35n FD35 □ □ □ • □ 1 □ i 1 4 11 23 23 Уменьшение 8-разрядного числа на 1(декремент 8-разрядного числа) Источник<- нсточник - 1 DECBC DEC DE DEC HL DEC SP DEC IX DECIY OB IB 2B 3B DD 2B FD2B • • • • • • • • 6 10 10 Уменьшение 16- разрвдного числа на 1 (декре- мент 16-разрядного числа) Источннк*- источник — 1 п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Д — не определен 234
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение состояния регистра флагов Число тактовых импульсов Выполняемая операция S Z н р V N с D1 F3 • • • • • • • 4 Запрет прерывания DJNZ d 10 e • • • • • • • 8 при В = 0, 13 при В^О Уменьшение содержи- мого регистра В на 1 (В«-В-1 декремент В). Если В 0, выполняет- ся переход на адрес, отличный от данного на d; если В = 0, перехода нет EI FB • • • • • • • 4 Разрешение прерывания EX (SP), HL EX (SP), IX EX (SP),IY EXAF.AF' EX DE, HL E3 DD E3 FDE3 08 EB • • • • • • • 19 23 23 4 4 Обмен содержимого источника и содержимого приемника EXX D9 • • • • • • • 4 Обмен содержимого между ВС, DE, HL и ВС', DE', HL' HALT 76 • • • • • • • 4 Останов ЦПУ IMO IM 1 IM 2 ED 46 ED 56 ED 5E • • • • • • • 8 Установка режима пре- рывания 0,1, 2 INCA INC В INCC INCD INCE INCH INCL INC (HL) INC (IX+л) INC (IY+л) 3C 04 ОС 14 1C 24 2C 34 DD34« FD 34 л □ □ □ • □ 0 • < > 4 11 23 23 Увеличение 8-разрядного числа на 1. Источникг- источник + 1 п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Л — не определен 235
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение с регистра ( остояния )лагов Число тактовых импульсов Выполняемая операция S Z н Р V N С INC ВС INCDE INC HL INC SP INC IX INCIY 03 13 23 33 DD23 FD 23 • • • • • • • • 6 10 10 Увеличение 16-разрядного числа на 1 Источнике- источник + 1 INA, (ri) DBn • • • • • • • 11 Ввод. Содержимое пор- та по адресу п пересыла- ется в регистр А JP (HL) JP (IX) JP(IY) JP /ли Е9 DDE9 FDE9 СЗт/ • • • • • • • 4 8 8 10 Безусловный переход по адресу, содержаще- муся в паре регистров. Переход по адресу 1т JPNZ,/m JP Z, Im JPNC,/m JP C, Im JP PO, Im JP PE, Im JP P, Im JP M, Im Clml СА ml Diml DAml Elm I EA ml El ml FA. ml • • • • • • • 10 Условный переход по адресу 1т. Если условие выполнено — переход, если не выполнено — перехода нет JR л 18 n • • • • • • • 12 Безусловный переход по относительному адресу, отличному от п JRNZ, n JRZ, n JR NC, n JRC, n 20 n lin 30 л 38 л • • • • • • • При вы- полнении условий -12. При не выполне- нии — 7 Безусловный переход по относительному адресу. Если условие выполне- но — переход по адресу, отличному от п, если не выполнено — перехода нет n 8-разрядная константа lm 16-разрядная константа * — не изменяется □ — изменяется в соответствии с результатом Л — не определен 236
Приложения Табл. 2 {продолжение) Команда ассемблера Машинные коды Изменение с регистра ( остояния шагов Число тактовых импульсов Выполняемая операция S Z н р V N С LD А, п LDA, А LDA, В LDA, С LDA, D LDA, Е LD А, Н LDA, L LD А, {1т) LDA, (ВС) LDA, (DE) LDA, (HL) LD А, (1Х+л) LDA, (IY+n) ЗЕ п 7F 78 79 7А 7В 7С 7D ЗА ml ОА 1А 7Е DD 7Еи FD7En • • • • • • • 7 1 4 13 | 7 } 19 Загрузка 8-разрядного числа А<-источник LDI, А LD R, А ED 47 ED4F • • • • • • • 9 9 1<-А R<-A LD В, и LD В, А LDB, В LD В, С LD В, D LD В, Е LD В,Н LDB, L LD В, (HL) LD В, (IX+n) LD В, (IY+n) 06 п 47 40 41 42 43 44 45 46 DD46n FD 46 п • • • • • • • 7 4 । 7 19 19 Загрузка 8-разрядного числа В<-источник п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Д — не определен 237
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение c регистра < ОСТОЯННЯ (лагов Число тактовых импульсов Выполняемая операция S z H p V N C LD С,п LD С, А LD С, В LD С, С LD С, D LD С, Е LD С, Н LD С, L LD С, (HL) LD С, (IX+n) LD C, (IY+n) ОЕи 4F 48 49 4A 4B 4С 4D 4Е DD4En FD 4Е и • • • • • • • 7 1 4 । 7 19 19 Загрузка 8-разрядного числа (^источник LD D, n LD D,A LD D, В LDD, C LD D,D LD D,E LD D, H LDD, L LD D, (HL) LD D, (IX+n) LD D, (IY+n) 16 n 57 50 51 52 53 54 55 56 DD 56 и FD 56 n • • • • • • • 7 > 4 ' 7 19 19 Загрузка 8-разрядного числа Dr-источник LDE, n LDE, A LDE, В LDE, C LDE, D LDE, E LD E, H LD E,L LD E, (HL) LDE, (IX+n) LD E, (IY+n) IE и 5F 58 59 5A 5B 5C 5D 5E DD 5En FD 5En • • • • • • • 7 1 4 । 7 19 19 Загрузка 8-разрядного числа Е «-источник п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Д — не определен 238
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменен ре гист иес рас ОСТОЯННЯ шагов Число тактовых импульсов Выполняемая операция S z н Р V N С LD Н, п LD Н,А LD Н,В LD Н, С LD Н, D LD Н, Е LD Н, Н LD Н, L LD Н, HL LD Н, (IX+n) LD H, (IY+n) 26 и 67 60 61 62 63 64 65 66 DD 66 и FD66n • • • • • • • 7 ' 4 7 19 19 Загрузка 8-разрядного числа Н«-источник LD L, n LD L, A LD L,B LD L, C LD L, D LDL,E LD L, H LD L, L LD L, (HL) LD L, (IX+n) LD L, (IY+n) 2En 6F 68 69 6A 6B 6C 6D 6E DD6En FD 6En • • • • • • • 7 ' 4 7 19 19 Загрузка 8-разрядного числа Е«-источник LD (Im), A LD (BC), A LD (DE), A 32 m I 02 12 • • • • • • • 13 7 7 Пересылка 8-разрядного числа. Содержимое ре- гистра А пересылается по адресу 1т, ВС или DE LD (HL), и LD (HL), A LD (HL), В LD (HL), C LD (HL), D LD (HL), E LD (HL), H LD (HL), L 36 и 77 70 71 72 73 74 75 • • • • • • • 10 1 7 j Пересылка 8-разрядного числа (НЕ)с-источник. Содержимое источника пересылается по адресу HL п — 8-разрядная константа □ — изменяется в соответствии 1т — 16-разрядная константа с результатом • — не изменяется Д — не определен 239
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение с регистра( остояния ыагов Число тактовых импульсов Выполняемая операция S Z н р V N С LD (IX+л), п' LD (IX+л), А LD (IX+л), В LD (IX+л), С LD (IX+л), D LD (IX+л), Е LD (IX+л), Н LD (IX+л), L DD 36 л л' DD 77 л DD 70 л DD71 л DD72n DD 73 л DD 74 л DD 75 л • • • • • • • 19 Пересылка 8-разрядного числа (1Х+л)<-источник LD (IY+л), л' LD (IY+л), А LD (IY+л), В LD (IY+л), С LD (IY+л), D LD (IY+л), Е LD (IY+л), Н LD (IY+л), L FD 36 л л' FD 77 л FD 70 л FD71 л FD 72 л FD73n FD 74 л FD 75 я • • • • • • • 19 Пересылка 8-разрядного числа (1Х+л)<-источник LD ВС, 1т LD ВС, (1т) 01 т / ED 4В т 1 • • • • • • • 10 20 Пересылка 16-разрядного числа. Например, DE и 1т: D+-/, Е<—т. DE и (1т): Е<—(Im), D<— (/т+1) LD DE, 1т LD DE, (1т) Пт1 ED5Bm/ • • • • • • • 10 20 LD HL, 1т LD HL, (1т) 21 т 1 1Ат 1 • • • • • • • 10 16 LD SP, 1т LD SP, (1т) LD SP, HL LDSP, IX LD SP, IY 31 т 1 ED 7В т 1 F9 DDF9 FDF9 • • • • • • • 10 20 6 10 10 Загрузка стека. В младший байт SP<-(/m), в старший байт SP+- (1т+1) 8Р<-источник LD IX, 1т LD IX, (1т) DD21 ml DD 1А.т1 • • • • • • • 14 20 Пересылка 16-разрядного числа. Например, IY+- 1т, старший байт IY<-(/m), младший байт IY+- (lm+l) LD IY, 1т LD IY, (1т) FD21 ml FD 2Am/ • • • • • • • 14 20 п — 8-разрядная константа 1т 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Л — не определен 240
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение c регистра ( ОСТОЯНИЯ 1ЛЯГОВ Число тактовых импульсов Выполняемая операция S z H p V N c LD (Im), ВС LD (Im), DE LD (Im), HL ED 43 ml ED 53 m I 22 ml • • • • • • • 20 20 16 Пересылка 16-разрядного числа. Например, (/m)<-L, (/m+l)<-H LD (Im), SP LD (Im), IX LD (Im), IY ED 73 m/ DD22 ml FD 22 m I • • • • • • • 20 Пересылка 16-разрядного числа. Например, старшие разряды (/m)<-IY, младшие разряды (/«+!)<—IY NEG ED 44 □ □ □ • □ 1 □ 8 Вычисление дополнительного кода NOP 00 • • • • • • • 4 Пустой оператор. Ожидание в течение 4 периодов импульсов OR л OR А ORB ORC ORD ORE ORH ORL OR (HL) OR (IX+л) OR (IY+л) F6 л B7 BO Bl B2 B3 B4 B5 B6 DD Вбл FDB6a □ □ 0 □ • 0 0 7 > 4 7 19 19 Операция ИЛИ OUT (л), A D3 л • • • • • • • И Вывод. Содержимое регистра А пересыла- ется в порт по адресу л п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом Л — не определен 241
Приложения Табл. 2 (продолжение) Команда ассемблера Машинные коды Изменение c регистра < остояния >лагов Число тактовых импульсов Выполняемая операция S z H p V N C POPAF POP ВС POPDE POP HL POP IX POPIY Fl Cl DI El DDE1 FDE1 • • • • • • • ’ 10 14 14 Извлечение 16-разрядного числа из стека. Например, Lt-(SP), H<-(SP+1), SP<—SP+2 PUSHAF PUSH BC PUSH DE PUSH HL PUSH IX PUSHIY F5 C5 D5 E5 DDE5 FD E5 • • • • • • • ’ 11 15 15 Загрузка 16-разрядного числа в стек. Например, (SP-1)<-H, (SP-2)«-L, SP«—SP-2 RET C9 • • • • • • • 10 Возврат из подпрограммы. POP PC RETI RETN ED4D ED 45 • • • • • • • 14 14 Возврат из программы обработки прерывания. Возврат из немаскируемого прерывания SBC А, л SBC A, A SBC A. В SBCA, C SBCA, D SBCA, E SBCA, H SBCA, L SBCA, (HL) SBC A, (IX+я) SBCA, (IY+я) DE л 9F 98 99 9A 9B 9C 9D 9E DD9Eh FD9Ea □ □ □ • □ 1 □ 7 1 4 i 7 19 19 8-разрядное вычитание с переносом А«-А-нсточник—С п — 8-разрядная константа 1т — 16-разряд ная константа • — не изменяется □ — изменяется в соответствии с результатом Д — не определен 242
Приложения Табл. 2 (окончание) Команда ассемблера Машинные коды Изменение c регистра < остояния шагов Число тактовых импульсов Выполняемая операция S z H p V N c SBC HL, ВС SBC HL, DE SBC HL, HL SBC HL, SP ED 42 ED 52 ED 62 ED 72 □ □ Д • □ 1 □ 15 16-разрядное вычитание с переносом HL<- HL-источник — С SCF 37 • • 0 • • 0 1 4 Флаг переноса устанавливается в 1 SUB и SUB A SUB В SUBC SUBD SUBE SUBH SUBL SUB (HL) SUB (IX+n) SUB (lY+n) D6 n 97 90 91 92 93 94 95 96 DD96n FD 96 n □ □ □ • □ 1 □ 7 I 4 7 19 19 8-разрядное вычитание А«-А-источник XOR и XOR A XOR В XORC XORD XORE XORH XORL XOR (HL) XOR (IX+n) XOR (lY+n) EE n AF A8 A9 AA AB AC AD AE DDAEn FDAEn □ □ 0 □ • 0 0 7 > 4 7 19 19 Исключающее ИЛИ А<—А+источник п — 8-разрядная константа 1т — 16-разрядная константа • — не изменяется □ — изменяется в соответствии с результатом А — не определен 243
_ л ОТВЕТЫ К ПРАКТИЧЕСКИМ ЗАДАНИЯМ ГЛАВА 1 1) Практически все бытовые приборы, промышленное оборудо- вание, промышленные роботы, игровые автоматы и т. д. 2) Микрокомпьютер анализирует сигналы датчиков расхода воз- духа, числа оборотов двигателя и вычисляет базовую длительность импульса впрыска топлива; определяет температуру охлаждающей жидкости, проверяет, в каком режиме работает двигатель (режим запуска, режим разгона); определяет напряжение аккумуляторной батареи; с учетом всех полученных данных вычисляет значение, на которое нужно увеличить базовую длительность импульса впрыска, после чего подает команду на исполнительное устройство — топ- ливный инжектор. ГЛАВА2 1) Микрокомпьютером называют компьютер, построенный на интегральных схемах и включающий в себя один или несколько ЦПУ (центральное процессорное устройство) и ЗУ (запоминающее устройство). 2) Адресная шина — это совокупность выводов (в ЦПУ Z80 — 16 выводов), указывающих адреса портов ввода-вывода, предназ- наченных для передачи данных с внешних устройств или ячеек па- мяти при обмене ЦПУ с внешними устройствами или ЗУ. Шина данных — это совокупность выводов (в ЦПУ Z80 — 8 выводов) для передачи данных при обмене процессора с внешними устройства- ми или устройством памяти. 3) В ППЗУ имеется возможность с помощью специального уст- ройства (программатора) стереть данные, облучив кристалл ультра- 244 -
Ответы к практическим заданиям фиолетовым (УФ) излучением, после чего записать новые данные. Если окошко защищено от попадания УФ-излучения, записанные данные будут сохраняться длительное время даже при отключенном питании. ППЗУ используется в качестве ПЗУ для микрокомпьюте- ров, в которых заложена возможность изменения программы и/или данных. 4) ЦПУ не может быть непрерывно соединено с внешними уст- ройствами. Его работа синхронизирована сигналами тактовой час- тоты. Порты ввода-вывода предназначены для временного хране- ния данных, поступающих в ЦПУ с внешних устройств, и данных, передаваемых на внешние устройства, до того момента, когда они будут запрошены ЦПУ или внешними устройствами. ГЛАВА3 1) Цифрам «1» и «О» можно поставить в соответствие ВЫ- СОКИЙ или НИЗКИЙ уровень напряжения, разомкнутое или за- мкнутое положение контактов реле, противоположные направле- ния намагниченности отдельных участков магнитной ленты или диска и т. п. 2) Старший разряд двоичного числа со знаком 10011101 равен 1. Значит, это отрицательное число. Если преобразовать его в допол- нительный код, то оно станет положительным числом 01100011. Ес- ли перевести это число в десятичную систему счисления, то полу- чим: - (26 + 25 + 21 + 2° = 64 + 32 + 2 + 1) = -99 3) Чтобы произвести вычитание, вычитаемое число сначала представляется в виде отрицательного числа, а затем складывается с первым числом. 4) Логические операции часто применяются для преобразования значений разрядов двоичных чисел. В частности, при установке значения разряда (Рис. 3.9) используется логическая операция «ИЛИ» (логическое сложение); операция логического умножения «И» применяется для выборочного обнуления разрядов двоичного числа (Рис. 3.11, 3.12); с помощью операции «Исключающее ИЛИ» осуществляется выборочное инвертирование значений разрядов двоичного числа (Рис. 3.15). 245
Ответы к практическим заданиям ГЛАВА4 1) Логическую схему, реализующую функцию «Исключающее ИЛИ», можно собрать из 4 вентилей «И-НЕ»: Таблица истинности А в с D Е X 0 0 1 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 0 1 1 0 2) Сначала необходимо выяснить, какие из разрядов А^.-.Ао шины адреса в области адресов, указанной для каждой ИС, изме- няются, а какие — нет (Рис 4.15). Из рисунка становится понятно, что 3 старших разряда А] 5, А14и А13 не изменяются. Таким образом, когда в трех старших разрядах (Ai5...A13) установлен код ООО, выби- рается ПЗУ1; когда этот код равен 001, происходит обращение к ПЗУ2. При обращении к ОЗУ в разрядах А]5...А13 нужно установить код 101. Следовательно, входы А, В и С 3-разрядного дешифратора соединяются соответственно с выводами А13, А14 и А]5. Тогда, в случае выбора адресов соответственно из ПЗУ1, ПЗУ2 и ОЗУ, на выходах Y0, Y1 и Y5 дешифратора появятся соответствующие сиг- налы. Схема соединения показана на рисунке. Выводы шины дан- ных каждой из ИС подключены к шине данных ЦПУ. ГЛАВА 5 1) Счетчик команд PC — 16-разрядный регистр. Он содержит 16- разрядное число, указывающее адрес следующей команды, выпол- няемой ЦПУ. После каждой операции чтения из памяти содержи- мое счетчика увеличивается на 1. В соответствии с этим команды, занесенные в память, выполняются по порядку адресов в памяти компьютера. 2) Если на вход RESET ЦПУ подать сигнал «0», произойдет «об- нуление» счетчика команд, то есть установка в состояние, соответ- ствующее адресу ООООН. Это означает, что ЦПУ считывает команду, записанную по адресу ООООН (первую команду программы) и при- ступает к ее выполнению. 246
* Ответы к практическим заданиям 3) Команда на языке ассемблера состоит из мнемонического ко- да команды, соответствующего глаголу английского языка, и опе- рандов, соответствующих объектам, над которыми производится операция. Операндов может быть один или два (некоторые коман- ды не содержат операндов). 4) Время, требуемое для выполнения команды, — это время, рав- ное произведению числа импульсов тактовой частоты, заданного для каждой команды, на длительность периода тактового сигнала. Число импульсов тактовой частоты меняется в зависимости от вы- полняемой команды. Оно увеличивается с каждым дополнительным циклом чтения из памяти на 3 периода импульса тактовой частоты. 247
Ответы к практическим заданиям ГЛАВА6 1) LD А, С : А<—С ADD А, 55Н: А<-А+55Н LD Е, А : Е<—А LD А, ООН: А<-0 ADC А, ЮН: А<-А+10Н+(С: перенос) LD D, A : D<—А 2) Оба оператора обращаются к счетчику команд. Команда «JP, 1т» изменяет содержимое счетчика команд на Im (РС <- 1т). Коман- да JP е прибавляет е к текущему значению адреса в счетчике команд (PC <- РС + е). 3) Указатель стека SP указывает адреса данных, загруженных в последнюю область памяти, — область стека. В самом начале про- граммы, когда данные еще не загружены в область стека, с помо- щью команды «LD» устанавливается последний адрес памяти + 1. Эта операция и означает установку области стека. 4) Команда «CALL 2000Н» является 3-байтовой командой, по- этому адрес возврата из подпрограммы — О8ОЗН. Значение указате- ля стека в процессе выполнения подпрограммы равно 7FFFH. Сле- довательно, младшие разряды адреса (ОЗН) возврата загружаются по адресу 7FFFH, а старшие разряды (08Н) — по адресу 8000Н. 5) Цикл считывания из порта ввода (Рис. 6.11) аналогичен циклу записи в порт вывода (Рис. 6.12). Стандартное время обоих циклов — 4 периода тактового сигнала. Однако при организации цикла считы- вания рекомендуется предусмотреть задержку, пока на шину данных не поступят данные из указанного порта ввода. В четвертом такте цикла открывается шина данных, и ЦПУ принимает данные. В цик- ле вывода рекомендуется предусмотреть задержку для того, чтобы указанный порт вывода успел без ошибок принять данные. ГЛАВА7 1) Задержку в 1 мс можно осуществить, если сделать 208 повто- рений цикла, состоящего из команд «NOP» (4 тактовых импульса) и «DJNZ» (8 импульсов). (4 + 8) х 208 х 0.4 мкс = 0.998 мс 248
Ответы к практическим заданиям Так как максимальное время пребывания выключателя в состоя- нии «включено» равно 60 с = 60000 мс, то число циклов подсчета меньше 216 = 65536. Следовательно, его можно представить 2-бай- товым числом. Число циклов подсчета для положения «включено» загружается в память с адреса 1000Н по адрес 1001Н. LOOP 1: IN А, (30)Н JP Z, LOOP1; ожидаем, пока переключатель из состояния «выключено» перейдет в состояние «включено» LD DE, 0000Н; обнуляем пару регистров DE, используе- мую в качестве счетчика LOOP2: INC DE; считаем число повторений LD В, 0D0H; (D0H равно десятичному числу 208) NOP DJNZ 0FDH; (двоичное число со знаком FDH равно де- сятичному числу —3) IN А, (ЗОН) AND 01Н JP Z, LOOP2 LD(1000H), DE 2) Для предотвращения программными средствами ошибок вво- да, вызванных дребезгом контактов, нужно через определенное вре- мя произвести повторное определение состояния контактов. Аппа- ратными средствами данная проблема решается с помощью схемы, приведенной на Рис. 7.21. ГЛАВА8 1) Младшие разряды шины адреса А7...А0 подсоединяются, как показано на рисунке. 2) Сходство: управление передается из основной программы к заранее подготовленной программе, по окончании которой про- исходит возврат в исходную программу и продолжается ее выпол- нение. Различия: подпрограмма вызывается с помощью команды «CALL» исходной программы, а программа обработки прерывания выполняется по сигналу прерывания, полученному ЦПУ с внешне- го устройства. 249
Ответы к практическим заданиям 3) Период выборки: Т= 25 + 5 = 30 мкс. Следовательно, максимально возможная частота равна: /пах = V(2 X Т) = 16.7 КГЦ.
ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ В BCD см. Двоично-десятичный код F F см. Регистр флагов Р PC см. Счетчик команд S SP см. Стека указатель Z Z см. Высокоомное состояние А Адрес ........................................................40 — косвенный..................................................115 — абсолютный, относительный..................................126 — перехода...................................................125 — порта..................................................114, 190 — программы обработки прерывания.........................................189, 196 — символический ............................................151 Аккумулятор..........................................55, 112, 120 Алгоритм ...................................................25 АЛУ см. Арифметико-логическое устройство Аналоговый сигнал.......................................187, 208 Аналого-цифровой преобразователь (АЦП)...........14, 187, 209, 214 — двойного интегрирования ...................................216 251
Предметный указатель — последовательных приближений ............................216 Арифметико-логическое устройство (АЛУ)...........34, 42, 55, 57, 64 Ассемблера язык............................................101 Ассемблирование ...........................................103 АЦП см. Аналого-цифровой преобразователь Б БИС .............................................13,16,36,72,86 В Выборка адреса..............................................90 Высокоомное (Z) состояние .............................................83, 85, 93, д Двоичная система счисления...................................51 Двоично-десятичный код.......................................62 Дешифратор.............................................84, 90, 96 — адреса...................................................190, 214 — команд....................................................43, 106 Директива..................................................151, 179 Дребезг контактов ..............................168, 170, 171, 173 3 Запоминающее устройство (ЗУ) .............................35, 43 — оперативное (ОЗУ).......................................44, 87 — постоянное (ПЗУ)........................................43 — перепрограммируемое (ППЗУ)..............................45 — энергонезависимое........................................45 Защелка ...........................................48, 77, 85, 93 ЗУ см. Запоминающее устройство И И см. Логическая операция «умножение» ИЛИ см. Логическая операция «сложение» Инвертирование разряда .................................69,124 Инвертор ...................................................79 Интегральная схема (ИС)..................................16, 43 Интерфейс................................................14,48 — параллельный ..........................................188 ИС см. Интегральная схема 252
Предметный указатель К Карта памяти................................................89, 92 Квитирование ..........................................138, 191 Код ....................................................43, 61 — дополнительный...........................................55 — машинный................................................118 — мнемонический...........................................104 Компилятор..................................................17, 98 — языка Бейсик.............................................99 Контроллер ...........................................17,19,21 — кондиционера.............................................21 — микрокомпьютерный........................................22 — швейной машины............................................22 Коэффициент разветвления ...................................82 Л Логическая схема .......................................72, 78 — вентильная............................................74, 79 — двухвходовая ............................................79 — комбинационная........................................74, 76 — последовательностная ....................................76 Логические операции.....................................34, 64 — Исключающее ИЛИ.....................................64, 68, 69 — отрицание (НЕ)........................................64, 67 — сложение (ИЛИ)........................................64, 65 — умножение (И) ............................................66 м Маска — разряда...................................................66 — прерывания...............................................199 Машинный цикл..............................................106 Микрокомпьютер..............................................15 — однокристальный.......................................37, 38 — одноплатный...........................................37, 38 Мнемокод .................................................104 Мнемоника .............................................101, 103 Н Нагрузочная способность ....................................82 НЕ см. Логическая операция «отрицание» 253
Предметный указатель О Одновибратор.................................................221 ОЗУ см. Запоминающее устройство оперативное Операнд ................................................104, 117 Операция....................................................51 — декодирования ............................................105 П Память микрокомпьютера...................................29, 99 Переход .................................................99, 125 — безусловный ...............................................125 — условный ..............................................121,127 Персональный компьютер (ПК)...................................37 ПЗУ см. Запоминающее устройство постоянное ПК см. Персональный компьютер Подпрограмма........................................115, 129, 132 Порт ввода-вывода ..............................37, 47, 73, 92, 187 ППЗУ см. Запоминающее устройство перепрограммируемое Прерывание...............................................41, 193 — сигнал прерывания..........................................194 — вектор прерывания.....................................198, 200 Программа.....................................................25 — обработки прерывания..................................115, 194 — объектная...................................................98 Программатор ............................................45, 109 Р Разрядность процессора........................................38 Регистр.......................................................42 — вектор.....................................................196 — дополнительный........................................111, 115 — индексный..................................................116 — команд......................................................43 — общего назначения..........................................114 — флагов (F) ............................................112,121 С Символическая константа ................................152, 178 Стек ........................................................131 Стека область................................................131 — указатель (SP) ........................................116,165 254
Предметный указатель Схема алгоритма .......................................144,155 Счетчик команд (РС) .......................................105 Т Триггер.....................................................76 - D........................................................77 - К........................................................78 - RS....................................................78, 171 — счетный (Т) .............................................76 У Устройство — ввода ....................................................33 — выборки-хранения .......................................220 — вывода ..................................................35 — управления..........................................35, 40, 43 Ф Функциональная схема ....................................23, 42 ц ЦАП см. Цифро-аналоговый преобразователь Центральный процессор (ЦПУ)..................................................35, 38, 86 Цифро-аналоговый преобразователь (ЦАП) ............187, 209, 212 Цоколевка ..................................................79 ЦПУ см. Центральный процессор Ш Шаговый двигатель........................................24, 180 Шина — адреса...............................................40, 84, 87 — данных...............................................40, 87, 135 =—>—255