48278 (588533), страница 3
Текст из файла (страница 3)
К стандартам, описывающим однопроводной интерфейс, относятся EIA RS‑232C, EIA‑232D, аналогичные европейские спецификации CCITT V.24, V28 и рекомендация ISO 2110, а также российские ГОСТ 18145–81, 23675–79.
Первоначально интерес RS‑232 был разработан для сопряжения терминалов с модемами. Сейчас этим интерфейсом комплектуется большинство популярных компьютеров для связи с внешними устройствами, в том числе и персональные компьютеры IBM PC. Поскольку ядром любой современной измерительной системы служит компьютер, использование штатного машинного интерфейса – наиболее простой и дешёвый способ организации связи в рассредоточенной системе.
1.4.2 Основы асинхронной последовательной связи
Говоря о передаче данных, мы интересуемся передачей байтов данных от одного устройства к другому, например, от персонального компьютера к модему или к последовательному принтеру. Если мы имеем восемь линий между двумя устройствами, то мы можем назначить каждой линии бит и послать сразу один байт данных. Это будет параллельная передача. Таким образом работает параллельный порт персонального компьютера, кроме того, в дополнение к восьми линиям данных имеются другие сигнальные линии, оказывающие помощь в передаче данных.
С другой стороны, если мы имеем одну линию для передачи сигналов, то необходимо посылать каждый байт данных последовательно, по одному биту. Более того, мы может посылать данные синхронно, таким образом, что каждый байт посылается в ранее определенное время, или асинхронно со скоростью, которую предварительно определять необязательно.
Последовательная связь дешевле, чем параллельная, так как требует меньше линий передачи данных – минимум две для двусторонней связи. Кроме того режим асинхронной передачи оказывает значительно меньшее воздействие на аппаратуру ввиду того, что не требуется дополнительное специальное оборудование для поддержки синхронизации между передатчиком и приемником.
Таким образом, асинхронная последовательная связь является предпочтительным решением ввиду низкой стоимости и простоты используемых аппаратных средств. Конечно, в этом режиме передачи мы должны преобразовывать каждый байт данных в серию битов и указывать приемнику начало и конец каждого байта.
Предположим, что мы умеем преобразовывать каждый байт в поток единиц и нулей, то есть биты, которые могут быть переданы через среду связи. В самом деле, универсальный асинхронный приемопередатчик, как мы увидим в следующем разделе, выполняет точно такую же функцию. Обычно, в то время как линия находится в режиме ожидания, для демонстрации того, что линия в порядке, по ней передается единица, обозначая незанятость линии. С другой стороны, когда линия находится в состоянии логического нуля, говорится, что она стоит в режиме выдерживания интервалов. Таким образом, логические единица и ноль рассматриваются, соответственно, как MARK и SPACE.
В асинхронной связи изменение условия состояния линии с MARK на SPACE означает начало символа). Это называется стартовым битом. За стартовым битом следует комбинация битов, представляющая символ, и затем бит контроля четности. Наконец, линия переходит в состояние ожидания MARK, которая представляет собой стоповый бит и означает конец текущего символа. Число битов, используемых для представления символа, называется длиной слова и обычно бывает равно семи или восьми. Контрольный бит используется для выполнения элементарной проверки на наличие ошибки.
Рис. 1.4. Представление в асинхронной последовательной связи формата одиночного символа. A‑длительность 1 бита; B-MARK или 1; C-SPACE или 0
Как передатчик узнают о длительности каждого бита? Действительно, и передатчик, и приемник должны знать его длительность или детектирование битов будет невозможно. Длительность каждого бита определяется генераторами тактовых импульсов приемника и передатчика. Отметим, однако, что генераторы в приемнике и передатчике должны иметь одну и ту же частоту, но не требуется, чтобы они были синхронизированы. Выбор частоты генератора зависит от скорости передачи в бодах, которая означает число изменений состояния линии каждую секунду. Номинально тактовая частота «16‑кратная скорость передачи в бодах» означает, что линия проверяется достаточно часто для надежного распознавания стартового бита.
Существует одно обычное состояние линии, которое иногда используется для привлечения внимания приемника. Нормальным состоянием линии является MARK и начало символа определяется переходом SPACE. Если линия находится в состоянии SPACE в течение периода времени большем, чем время, которое она затратила бы на получение всех битов символа, тогда мы говорим, что наступило состояние BREAK. В кодах ASCII отсутствует представление BREAK – это означает, что линия «умерла» на непродолжительный промежуток времени, который составляет BREAK.
Ранее мы упоминали, что бит контроля четности полезен для обнаружения ошибок. Например, если выбрана проверка на четность, этот бит устанавливается таким образом, что общее число единиц в текущем слове является четным. В приемнике четность вычисляется заново и сравнивается с битом контроля четности. Если они не равны, то приемник сообщает, что имеет место ошибка четности. Главный недостаток обнаружения ошибки посредством проверки на четность заключается в том, что можно только обнаружить ошибки, которые влияют на один единственный бит. Например, битовая комбинация 0100 0001 0, переданная восемью битами с проверкой на четность, может измениться на 0100 01110, однако приемник не обнаружит ошибку, так как проверка на четность выполняется.
В дополнение к квитированию установления связи посредством аппаратных сигналов RTS/CTS, для достижения управления потоком с использованием программного обеспечения применяются специальные управляющие символы ASCII. Управлять потоком необходимо ввиду того, что иногда либо передатчик либо приемник не могут поддерживать скорость передачи и они должны иметь возможность информировать другую сторону о необходимости остановки на время, требуемое для того, чтобы отставшая сторона смогла догнать другую.
Предположим, что приемник имеет буфер для хранения поступающих символов. Как только буфер после заполнения закрывается, приемник может послать символ XOFF передатчику, сигнализируя, что передача должна быть приостановлена. Конечно, передатчик должен понять значение XOFF и прекратить передачу символов. Затем, когда приемник обработает символы и буфер освободится, тогда посылается символ XON, показывающий, что передача может быть продолжена. Эта схема управления потоком широко применяется ввиду ее простоты. Большинство связных программ предоставляют возможность дуплексной связи с управлением потоком, основанном на применении символов XON/XOFF.
1.5 Общие методы ввода / вывода через коммуникационный порт
Существует два общих метода ввода / вывода в любой вычислительной системе: упорядоченный и управляемый прерываниями. Упорядоченность относится к повторяющейся проверке состояния регистра устройства ввода / вывода для инициализации требуемой транзакции. В упорядоченном вводе / выводе программа, запрашивающая символ ввода, многократно считывает состояние регистра в устройстве ввода / вывода до тех пор, пока оно не покажет, что символ доступен для ввода. Когда состояние указывает, что имеется готовый для работы символ, программа считывает его из соответствующего регистра устройства ввода / вывода. Сходная последовательность «ждать, до тех пор пока не готов, затем писать» используется при выведении символов на устройство ввода / вывода. Таким образом, дальнейшее выполнение программы приостанавливается до завершения выполнения операции ввода / вывода.
Большой проблемой для упорядоченного ввода / вывода через коммуникационный порт является то, что при скорости передачи выше 300 бод программе трудно что-либо сделать с получаемым символом кроме как отображать его на экране. Рассмотрим следующий пример. Предположим, что мы читаем символы со скоростью 300 бод и имеем следующие связные параметры: длина слова 7 бит, проверка на четность и один стоповый бит, который вместе со стартовым битом, добавляет до 10 бит на символ. Ожидается получать около 30 символов каждую секунду. После чтения символа программа имеет около 1/30 секунды для выполнения других операций. Чтобы не потерять какие-либо символы в это время следует снова начать упорядочение порта. Что произойдет, когда скорость возрастет до 9600 бод? Временной интервал между символами слишком мал для выведения символа на экран дисплея, не позволяет интерпретировать специальные символы и эмулировать терминал.
В подходе, основанном на управлении прерываниями, программа предоставляет возможность прерываниям устройства ввода / вывода поступать непосредственно на центральный процессор, который продолжает выполнять свою работу, не связываясь с устройством. Когда устройство готово к вводу / выводу, оно сигнализирует об этом центральному процессору посредством аппаратуры. Получив этот сигнал, центральный процессор сохраняет свое текущее состояние и вызывает подпрограмму обслуживания прерываний, адрес которой хранится в таблице векторов прерываний. Эта подпрограмма выполняет операцию ввода / вывода, затем восстанавливает состояние машины и возвращается в прерванную программу. Также стоит учитывать регистр символов, поступающих в коммуникационный порт персонального компьютера. Организовав где-нибудь некоторые ячейки памяти, можно использовать простую подпрограмму обработки прерываний, которая быстро считывает символ из коммуникационного порта и сохраняет его в следующей доступной ячейке памяти в буфере. Символы не будут утеряны в процессе считывания и сохранения символа драйвером прерываний перед поступлением следующего символа. Эта несложная задача достаточно проста для выполнения в короткие временные интервалы между поступающими символами при скорости передачи 9600 бод. Прелесть этого метода заключается в том, что время обработки главной программой символов, хранящихся в буфере, не имеет значения. Конечно, существует риск переполнения буфера, но эта проблема может быть решена простым увеличением его размера. Если этот способ не очень хорош, то для избежания переполнения буфера можно использовать управление потоком с помощью XON/XOFF.
Из этих рассуждений становится очевидно, что управляемая прерываниями буферная связь с использованием управления потоком с помощью XON/XOFF, предпочтительнее упорядоченной связи.
1.5.1 Последовательный порт с точки зрения программиста
Скорость передачи в бодах определяется как 16‑битовый делитель тактовой частоты, используемой для последовательного адаптера. Значение делителя вычисляется по формуле
1,843,200
делитель = –––––––––––––––––––––––––––––––
16 Х скорость передачи в бодах
Чтобы установить скорость передачи в бодах, Вы должны проделать следующее:
-
Установить в 1 наиболее значимый бит регистра управления линией.
-
Загрузить младший и старший байты делителя соответственно в приемный буфер и регистр разрешения прерываний.
-
Установить DLAB в 0 для обеспечения нормальной работы универсального асинхронного приемопередатчика.
Применяя этот подход, можно установить любое значение скорости передачи в бодах. Максимально возможной скоростью передачи является 1/16 тактовой частоты, или 115,200 бод. Этот предел вытекает из того, что делитель не может быть меньше единицы.
1.6 Информационный обмен контроллер – ЭВМ с использованием интерфейса RS‑232
Для связи МК51 с интерфейсом RS‑232 можно использовать самый подходящий для этого вариант – последовательный порт.
Последовательный порт микроЭВМ семейства МК51 может использоваться в виде регистра сдвига для расширения ввода-вывода или в качестве универсального асинхронного приемопередатчика с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения. Последовательный порт может принимать очередной байт, даже если уже принятый до этого байт не был прочитан из регистра приёмника. Однако если до окончания приёма, находящийся в регистре приёмника байт не будет прочитан то принятый байт теряется. Программный доступ к регистрам приёмника и передатчика осуществляется обращением к регистру специальных функций SBUF. При записи в SBUF байт загружается в регистр передатчика, а при чтении SBUF байт читается из регистра приёмника.
Приём и выдача байта данных начинается с младшего разряда и заканчивается старшим разрядом. Для разрешения приёма необходимо установить 1 в разряде REN регистра управления SCON.