Варианты для обоих случаев организации выходной линии порта показаны на рис. 11.3, где приведены упрощенные схемы выходных линий микроконтроллеров семейства 8048 — широко когда-то использовавшегося предшественника популярного МК 8051 (например, 8048 был выбран в качестве контроллера клавиатуры в IBM PC). В самом 8051 построение портов несколько сложнее (в частности, вместо резистора там полевой транзистор), но для уяснения принципов работы это несущественно.
По первому варианту (рис. 11.3, а ) в МК 8048 построены порты 1, 2 (всего там три порта). Когда в порт производится запись, то логический уровень поступает с прямого выхода защелки на статическом D-триггере на вход схемы «И», а с инверсного — на затвор транзистора VT2. Если этот уровень равен логическому нулю, то транзистор VT1 заперт, a VT2 открыт, на выходе также логический нуль. Если уровень равен логической единице, то на время действия импульса «Запись» транзистор VT1 открывается, а транзистор VT2 запирается (они одинаковой полярности). Если на выходе присутствует емкость (а она всегда имеется в виде распределенной емкости проводников и емкости входов других компонентов), то через VT1 протекает достаточно большой ток заряда этой емкости, позволяющий сформировать хороший фронт перехода из «0» в «1». Как только импульс «Запись» заканчивается, оба транзистора отключаются, и логическая единица на выходе поддерживается резистором R1. Выходное сопротивление открытого транзистора VT1 примерно 5 кОм, а резистора — 50 кОм. Любое другое устройство, подключенное к этой шине, при работе на выход может лишь либо поддержать логическую единицу, включив свой подобный резистор параллельно R1, либо занять линию своим логическим нулем — это, как видите, и есть схема «монтажное ИЛИ». При работе на вход состояние линии просто считывается со входного буфера (элемент «В» на рис. 11.3, а ).
Рис. 11.3. Упрощенные схемы портов ввода/вывода МК 8048:
а— портов 1 и 2; б— порта 0
Второй же вариант, по которому устроен портО (рис. 11.3, б ), — это обычный выходной каскад КМОП с третьим состоянием, т. е. такой порт может работать на выход, только полностью занимая линию, остальные подключенные к линии устройства при этом должны «смиренно внимать» монополисту, воспринимая сигналы. Это обычно не создает особых трудностей и схемотехнически даже предпочтительно (ввиду симметрии выходных сигналов и высокого сопротивления для входных). Единственная сложность возникает при сопряжении такого порта с линией, работающей по первому варианту, т. к. при логической единице на выходе могут возникнуть электрические конфликты, если кто-то попытается выдать в линию логический нуль. Для обеспечения работы трехстабильного порта по схеме «монтажное ИЛИ» (в том числе для их параллельной работы) применяют хитрый прием: всю линию «подтягивают» к напряжению питания с помощью внешнего резистора (во многих МК существует встроенный отключаемый резистор, установленный аналогично R1 в схеме рис. 11.3, а ), и нормальное состояние всех участвующих трехстабильных портов — работа на вход в третьем состоянии, тогда на линии всегда будет логическая единица. На выход же линию переключают только когда надо выдать логический нуль, в этом случае, даже при одновременной активности нескольких портов, конфликтов не возникнет.
Лечение амнезии
В 1965 г. в Иллинойском университете был запущен один из самых передовых компьютеров по тому времени — ILLIAC–IV. Это был первый компьютер, в котором была применена быстрая память на микросхемах — каждый чип (производства Fairchild Semiconductor) имел емкость 256 бит, а всего было набрано 1 Мбайт. Стоимость этой памяти составила ощутимую часть от всей стоимости устройства, обошедшегося заказчику— NASA— в $31 млн. Через 10 лет один из первых персональных компьютеров Altair 8800 (1975 г.), продававшийся в виде набора «сделай сам», при стоимости порядка $500 имел всего 256 байт (именно байт, а не килобайт) памяти. В том же году для распространения языка Basic for Altair Биллом Гейтсом и Полом Алленом была создана фирма, получившая первоначальное название Micro-Soft. Одна из самых серьезных проблем, которую пришлось решать — нехватка памяти, потому что созданный ими интерпретатор Basic требовал аж 4 кбайтов!
Проблема объемов памяти и ее дороговизна преследовала разработчиков до самого последнего времени, еще в конце 90-х стоимость памяти для ПК можно было смело прикидывать на уровне $ 1/Мбайт, что при требовавшихся уже тогда для комфортной работы объемах ОЗУ порядка 128–256 Мбайт могло составлять значительную часть стоимости устройства. Сейчас гигабайтом памяти в настольном ПК и даже ноутбуке никого не удивишь, к тому же все современные ОС «умеют» автоматически дополнять недостающий объем ОЗУ за счет дискового пространства. Это привело, в частности, к кардинальным изменениям в самом подходе к программированию: если еще при программировании под DOS о компактности программ и экономии памяти в процессе работы нужно было специально заботиться, то теперь это практически не требуется.
Читать дальше
Конец ознакомительного отрывка
Купить книгу