Страница 116 из 124
Помимо отмеченных выше, к важным символам можно отнести: NUL (ноль), символ, состоящий из одних двоичных нулей, и используемый иногда для разделения символьных строк; FF (Form Feed — перевод страницы), которым начинается новая страница; EXT (End of Text — конец текста, нежно называемый «control С»), который воспринимается многими операционными системами, как команда завершения текущей программы; DC3 (control S), используемый в качестве «мягкого рукопожатия» для приостановки последовательной передачи; DC1 (control Q), символ, возобновляющий передачу. К сожалению, в таблице кодов ASCII отсутствуют индексы, показатели степени, а также греческие буквы и научные знаки. Было бы полезно иметь по меньшей мере знаки π, μ, Ω и символ градусов (°), которые часто встречаются в технических текстах. Разумеется, с помощью управляющих символов (или их последовательности) можно указать на необходимость смены шрифта или алфавита. Так обычно и делают в текстовых процессорах, где после ввода управляющего символа программа форматирования воспринимает последующие символы ASCII по-иному. Возможно, такой подход является наилучшим решением проблемы, так как при работе с техническими текстами вряд ли вам надолго хватит одного фиксированного набора ASCII-символов, даже очень большого.
Заметьте, что компьютерные клавиатуры часто конструируются так, что они не являются просто генераторами кодов ASCII (одна клавиша - один код); общепринятой методикой является генерация каждой клавишей некоторых определенных кодов при нажатии и отпускании. Специальное системное программное обеспечение («драйвер клавиатуры», см. разд. 10.18) транслирует затем эти коды в обычные коды ASCII. Такой подход существенно повышает гибкость процедуры ввода с клавиатуры, так как возникает возможность настройки драйвера клавиатуры с целью отработки автоповтора клавиш или многоклавишных комбинаций, переотображения всей клавиатуры (например, в клавиатуру Дворака) и организации «горячих клавиш» и т. д.
Бит-последовательная передача. Код ASCII (или любой другой алфавитно-цифровой код) может быть передан либо группой из 8 параллельных бит (по 8 отдельным проводам), либо последовательностью из 8 бит, один за другим. Для организации передачи со скоростями от низкой до средней более удобной является экономичная в смысле используемых проводов последовательная связь. Модем (подробнее о модемах см. ниже) преобразует последовательность бит в звуковой сигнал и наоборот (например, используя одну звуковую частоту для «1» и другую для «0»), который затем может быть послан в телефонную линию; здесь так же, естественно, используется последовательная передача. При этом используется стандартный протокол и стандартные скорости передачи. При асинхронной передаче к концам каждого 8-бит символа присоединяются старт-бит и стоп-бит (иногда два), образуя группу («кадр») из 10 бит. Передатчик и приемник используют фиксированную скорость из допустимого набора; наиболее популярны скорости передачи 300, 1200, 2400, 4800, 9600 и 19200 бод (= тактов в секунду). На рис. 10.16 приведен формат кадра последовательной передачи.
Рис. 10.16. Формат кадра при последовательной передаче данных (интерфейс RS-232).
Когда передача данных отсутствует, передатчик находится в состоянии «маркера» (терминология осталась еще от времен телетайпов). Каждый символ начинается со старт-бита, за которым следуют 8 бит кода ASCII, младшим битом вперед (обычно в эти 8 бит входят 7 бит данных плюс 1 необязательный бит контроля четности) и, наконец, стоп-бит; последний должен поддерживаться по меньшей мере один такт, но может длиться сколько угодно. На приемной стороне УАПП (универсальный асинхронный приемо-передатчик, см. разд. 11.11), работая с той же частотой, синхронизируется к каждой 10-бит группе и преобразует входную последовательность в 8-бит параллельные группы данных. Поскольку приемник заново синхронизируется к старт- и стоп-битам каждого символа, ему не требуется очень высокая точность тактовых сигналов; равенство и стабильность частот передатчика и приемника должны обеспечивать рассогласование не более доли длительности одного бита на длине кадра, т. е. не более нескольких процентов.
Приемный УАПП запускается фронтом старт-бита, выжидает половину длительности бита чтобы удостовериться, что старт-бит еще присутствует, а затем фиксирует значение данных в середине каждого бита. Стоп-бит завершает каждый символ и одновременно выполняет роль промежутка между кадрами, если следующий символ не посылается немедленно за предыдущим. Приемный УАПП проверяет наличие уровня стоп-бита через 10,5 длительностей бит после фронта старт-бита, что помогает удостоверить правильность посылки символа. «Разрыв» (break) представляет собой длительный пробел, который не может возникнуть в ходе нормальной передачи символов. На рынке имеются программируемые тактовые генераторы (т. е. программируемые делители частоты), которые преобразуют входную частоту от генератора в стандартный набор тактовых частот, определяющих скорость передачи, причем конкретный коэффициент деления определяется входным двоичным кодом. Большинство современных УАПП (например, двухканальная синхронно-асинхронная микросхема 8530 фирмы Zilog) включает внутренние программно-управляемые генераторы скорости передачи.
RS-232. Сами сигналы при последовательной передаче ASCII-кодов могут посылаться различными способами. Самый первый из них, предложенный еще несколько десятков лет назад, состоит в переключении, с выбранной скоростью передачи, тока величиной 20 (или иногда 60) мА. Это так называемая «токовая петля». Иногда этот способ реализуется, как альтернативный вариант, но для умеренных скоростей передачи он был вытеснен стандартом ассоциации электронной промышленности (EIA) RS-232C 1969 г. (и последующим стандартом RS-232D 1986 г.), в которых передача осуществляется биполярным напряжением. Стандарт RS-232 определяет характеристики и драйверов, и приемников. Драйвер должен создавать уровни напряжения от +5 до +15 В (логический вход низкого уровня) и от — 5 до —15 В (логический вход высокого уровня) на нагрузке от 3 до 7 кОм с крутизной перепада менее 30 В/мкс и способностью противостоять замыканию на любой другой выход даже со столь неблагоприятными характеристиками, как 5 В при 500 мА; приемник должен представлять нагрузочное сопротивление от 3 до 7 кОм, преобразующее входное напряжение от +3 до +25 В в низкий логический уровень, а входное напряжение от —3 до —25 В в высокий логический уровень. Заметьте, что логическая 1 преобразуется драйвером RS-232 в отрицательный уровень, называемый «маркером»; логический 0 представляет собой положительный уровень («пробел»). При передаче с помощью токовой петли ток течет в течение логической 1 (маркер) и прекращается на время действия логического 0 (пробел).
Для приемников RS-232 характерно наличие гистерезиса входного напряжения; некоторые приемники позволяют подключать конденсатор с целью увеличения постоянной времени и уменьшения чувствительности к шумовым импульсам. Стандартные микросхемы приемника и драйвера RS-232 описаны в разд. 9.14 и 14.17. При расстояниях 10–20 м интерфейс RS-232 обеспечивает высокое качество передачи на скоростях вплоть до 38400 бод даже при использовании неэкранированного многожильного кабеля; связь на короткие расстояния иногда осуществляют со скоростью 115200 бод.
Стандарт RS-232 определяет также тип разъема и назначение его контактов. К сожалению, это описание не полно! Это вечный источник неприятностей, потому что, вообще говоря, два устройства с интерфейсами RS-232, соединенные друг с другом, работать не будут. Это настолько неожиданно и неприятно, что читатели предыдущего издания этой книги даже обвинили нас, потому что мы не написали в книге, как бороться с этой несовместимостью. К счастью для вас, вы читаете второе издание. Разгадка состоит в следующем.