|
|
|
|
Передача данных в операционной системе MS-DOS
Во время работы с системами реального времени компьютеру с
операционной системой MS-DOS приходится обмениваться данными
внешней средой. Данные, подлежащие передаче, делятся на три категории:
- данные, состоящие из одного бита, указывающего текущее состояние устройств, которые могут находиться в одном из двух
состояний,
- данные, представляющие собой цифровое выражение аналоговых
сигналов, выдаваемых аналогово-цифровыми преобразователями,
- цифровая информация, поступающая от оборудования другого вида (которое в свою очередь принимало данные одним из трех
указанных способов).
ЪДДДДДДДї
і Порты і
АДДДВДДДЩ
і
ЪДДДДДДДДДДДДБДДДДДДДДДДДДДї
і і
ЪДДДДДБДДДДДДДДДДї ЪДДДДДДДДБДДДДДДДДДї
і Порты цент- і і Порты операцион- і
і рального про-і і ной системы DOS і
і цессора CPU і і і
АДДДДДДДДДДДДДДДДЩ АДДДДДДДДВДДДДДДДДДЩ
Доступ к ним ве- і
дется по коман- і
дам IN и OUT ЪДДДДДДДДБДДДДДДДДДї
і і
і і
ЪДДДДДДДБДДДДДДї ЪДДДДДДБДДДДДДДї
іПоследователь-і і Параллельные і
і ные порты і і порты і
АДДДДДДДДДДДДДДЩ АДДДДДДДДДДДДДДЩ
Доступ к ним ве- Доступ к ним ве-
дется по обраще- дется по обраще-
ниям к функциям ниям к функциям
операционной сис- операционной сис-
темы DOS и системы темы DOS и системы
ПЗУ-BIOS ПЗУ-BIOS
Рис. 5-6. Типы портов и методы доступа
|
"Порты" используются операционной системой MS-DOS для передачи данных. Данные, считываемые через порт, представляют собой
данные внешней среды. Данные, поступающие в порт (иначе - "данные, записываемые в порт"), влияют (управляют) на внешнюю среду.
В операционной системе MS-DOS существует два типа портов: порты
центрального процессора CPU и порты операционной системы MS-DOS.
На рисунке 5-6 представлены два типа портов и методы, используемые для доступа к этим портам. Физически эти порты могут выглядеть одинаково. И
только по методу доступа их можно различить.
Порты центрального процессора CPU называются также "логическими портами".
Порты центрального процессора CPU представляют передачу данных низкого уровня. Обращение к ним происходит непосредственно от
процессора. Каждый порт центрального процессора CPU идентифицируется своим адресом. Может существовать до 65536 разных портов.
Операционная система MS-DOS использует некоторые порты центрального процессора CPU для программируемого таймера и для таких специфических целей,
как общение с клавиатурой и обмен данными с дисками. Другие порты центрального процессора CPU могут использоваться пользователем для других целей.
Основной способ обращения к этим портам заключается в применении команд IN и OUT языка Ассемблер. По команде IN происходит считывание одного
байта или одного слова из порта. По команде WRITE происходит запись одного байта или одного слова в порт.
В операционной системе MS-DOS порт 61h центрального процессора CPU используется для говорящего устройства. Второй младший
бит (бит 1) используется для управления звуком, поступающим от
говорящего устройства. Если этот бит установлен в значение "1",
говорящее устройство включено. В противном случае оно выключено.
Другие биты этого порта управляют другими функциями. Ниже листинг
5-1 содержит программу, использующую порт говорящего устройства
для генерации звуковых сигналов:
Листинг 5-1. Генерация звуковых сигналов при помощи порта
говорящего устройства
----------------------------------------------------------------
in al,61h ; 61h - это адрес порта говоря-
; щего устройства
mov bl,Ofch ; маска для сброса битов О и 1
and al,bl ; маскировка al
noise_on:
or al,2 ; бит 1 в al установлен в зна-
; чении "1"
out 61h,al ; включение говорящего уст-
; ройства
mov cx,Offh ; время включения
time_1:
loop time_1
noise_off:
and al,bl ; сброс битов 0 и 1
out 61h,al ; выключение говорящего уст-
; ройства
mov cx,Offh ; меньшее значение в cx озна-
; чает повышенную частоту
; звука
time_2:
loop time_2
push ax ; сохранение ax
mov ax,1 ; считать значение состояния
; клавиатуры
int 16h ; вызов средств клавиатуры
; BIOS
pop ax ; сохранить ax до выполнения
; перехода
jnz exit ; символ был набран
jmp noise_on ; символ не был набран
exit:
ret
----------------------------------------------------------------
|
В представленной выше программе говорящее устройство повторно
включается и выключается путем записи байта в порт 61h. После
включения говорящего устройства команда LOOP выполняется с целью
предоставления этому устройству некоторого времени для работы
прежде чем оно будет отключено. Звук продолжает поступать до тех
пор, пока с клавиатуры не будет введен какой-нибудь символ. Функция прерывания "int 16h" используется для считывания значения
состояния клавиатуры.
В таблице 5-3 представлены номера портов центрального процессора CPU, используемые в операционной системе MS-DOS для каких-то
конкретных целей.
Таблица 5-3
Порты центрального процессора CPU, используемые для
определенных целей
ДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДДД
Порт центрального і Адрес ввода/вывода іВектор прерыва-
процессора CPU і і ния
ДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДДД
Таймер і 040=043 і 8
Вторичный RS-232 і 2F8=2FF і 11
Клавиатура і 060=063 і 9
Жесткий диск і 320=32F і 13
Печатающее уст- і 378=37F і 15
ройство(принтер) і і
Монохромный дисп- і 380=3BF і -
лей і і
Цветной дисплей і 3D0=3DF і -
Гибкий диск і 3F0=3F7 і 14
Первичный RS-232 і 3F8=3FF і 12
ДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДДД
|
Порты операционной системы MS-DOS предназначены для передачи
данных высокого уровня. Это значит, что процессор не управляет
непосредственно этими данными, а доступ к ним осуществляется посредством обращения к функциям операционной системы MS-DOS и системы ПЗУ-BIOS.
Существует два типа портов операционной системы
MS-DOS, известные под названием "последовательных портов" и "параллельных портов".
Параллельные порты в основном разрабатываются для подключения к ним печатающих устройств (принтеров). Данные через эти порты проходят параллельно,
то есть, все восемь битов, составляющие
байт, передаются на принтер одновременно. Операционная система
DOS поддерживает передачу потока данных через параллельный порт
только в одном направлении (то есть от компьютера к принтеру),
хотя сами по себе аппаратные средства могут осуществлять функции
и ввода и вывода. Ниже предложена часть программы, в которой происходит вывод строки, заданной при помощи DS:DX, в параллельный
порт. Функция прерывания операционной системы MS-DOS "int 21h" с
параметром AH=40H (записать файл) используется для выполнения
этого условия. Регистр BX содержит описатель файла для стандартного устройства печати (4). После обработки запроса регистр ax
будет содержать количество символов, действительно помещенных в
параллельный порт.
mov ah,40h ; функция = запись
; файла
mov bx,4 ; описано для стан-
; дартного принтера
mov cx,20 ; подсчет числа сим-
; волов
mov dx,seg OUTSTR ;
mov ds,dx ;
mov dx,offset OUTSTR ; ds:dx указывает на
; OUTSTR
int 21h ; обращение к опера-
; ционной системе
; MS-DOS
jc failed ; установленное в
; единицу значение
; переноса означает
; сбой принтера
|
Последовательные порты обычно используются для подключения
модемов, а также для подключения устройства "мышь". Данные через
последовательные порты передаются по одному биту по одному и тому
же проводнику. Операционная система DOS поддерживает передачу
данных в двух направлениях, то есть, в компьютер и от компьютера.
Передача данных через последовательные порты ведется асинх-
ронно. Поэтому на обоих концах линии передачи должен быть установлен ряд согласующих параметров. Скорость передачи данных в
бодах "последовательного порта" равна числу битов, передаваемых в
секунду. Скорость передачи данных в бодах, поддерживаемая операционной системой MS-DOS версии 3.3, лежит в диапазоне от 110 до
19200 битов в секунду. "Длина слова" представляется числом битов,
составляющих символ. Это значение может равняться 7 или 8. "Четность" - это простой механизм обнаружения ошибок в линии передачи. Согласно
стандартам, принятым в интерфейсах RS-232 для последовательной передачи данных, значением параметра четности может
быть "четно" или " нечетно" (два способа проверки ошибок) или может не существовать проверки на четность. Каждый символ отделяется от других битами,
называемыми "битами останова". Можно задавать один или два бита останова. Эти параметры должны быть
проинициализированы до начала процесса передачи данных.
Функция прерывания "int 14h" системы BIOS используется для
передачи данных через последовательный порт. Инициализация последовательного порта выполняется установкой в регистре AH кода
функции 0. Параметры передачи задаются в регистре AL, как это показано в таблице 5-4. "Номер порта" указывается в DX. Существует
четыре последовательных портов в операционной системе MS-DOS. Их
именами являются значения от COM1 до COM4. В представленной ниже
программе последовательный порт инициализируется исходно для передачи данных со скоростью 9600 бод, слов длиной в 8 битов, с
одним битом останова при отсутствии проверки на четность. После
выполнения запроса к функции регистр AH содержит значение состояние порта.
mov ah,0 ; инициализировать последователь-
; ный порт
mov al,0e3h ; 9600 бод, 8-битовое слово, от-
; сутствие проверки на четность,
; 1 бит останова
mov dx,0 ; порт COM1 инициализируется
int 14h ; вызов системы ПЗУ-BIOS
|
Таблица 5-4
Параметры связи, задаваемые в регистре AL
ДДДДДДДДДДДДДВДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДВДДДДДДДДДДДДДДДДД
Скорость і Четность і Биты останова і Длина слова
в бодах і і і
ДДДДДДДДДДДДДіДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДД
Биты Ско- і Биты Чет- і Биты і Биты Длина
7,6,5 рость і 4,3 ность і Бит 2 остановаі 1,0
ДДДДДДДДДДДДДЕДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДДДД
000 110 іx0 Отсутствует 0 1 бит і 10 7 битов
001 150 і01 Нечетная і 1 2 бита і 11 8 битов
010 300 і11 Четная і і
011 600 і і і
100 1200 і і і
101 2400 і і і
110 4800 і і і
111 9600 і і і
ДДДДДДДДДДДДДБДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДБДДДДДДДДДДДДДДДДД
|
В предлагаемом ниже куске программы символ 'x' записывается
в последовательный порт. При возврате, если бит 7 регистра AH установлен в значение "0", обращение к функции было успешным. Значение "0", в бите 7 регистра AH указывает на сбой.
mov ah,1 ; функция 1= запись символа
mov al,'x' ; регистр AL содержит символ
mov dx,0 ; запись в порт COM1
int 14h ; обращение к системе ПЗУ-BIOS
|
Время, требуемое для передачи данных через порты, обычно зависит от характеристик внешних устройств. Например, время, необходимое для записи/считывания 1
байта на жесткий диск или с жесткого диска, зависит от нескольких факторов: типа жесткого диска,
таких параметров жесткого диска, как количество головок и количество цилиндров, размера порций ввода/вывода на жесткий диск,
структуры файлов, количества файлов и так далее. Если ваша система реального времени использует внешние устройства, Вам следует
провести несколько опытов, чтобы снять время, затрачиваемое на
выполнение операций. Поскольку разрешающая способность часов системы в операционной системе MS-DOS равна 10 м/сек, операция в
опыте должна повторяться много раз с целью получения точных временных оценок. Они изображены ниже на рисунке 5-7:
ЪДДДДДДДДДДДДДДДДДДДї
і і
і Передача данных і
і і
АДДДДДДДДДВДДДДДДДДДЩ
і
ЪДДДДДДДДДДЕДДДДДДДДДДДДї
і і і
ЪДДБДДДДї ЪДДДБДДДДДї ЪДДДДБДДДї
іМетод і і Прямой і іМетод і
іупоря- і і доступ і ідоступа і
ідочен- і і к памятиі іпо пре- і
іного і і (DMA) і ірываниямі
іопроса і і і і і
АДДДДДДДЩ АДДДДДДДДДЩ АДДДВДДДДЩ
і
ЪДДДДДДДДДДДДДДДЕДДДДДДДДДДДДДДї
і і і
і і і
ЪДДДДДДБДДДДДДї ЪДДДБДДДї ЪДДДДБДДДДї
і Устройства і і Таймері іПрограммаі
і ввода/выво- і і і і і
і да і АДДДДДДДЩ АДДДДДДДДДЩ
АДДДДДДДДДДДДДЩ
Рис. 5-7. Методы передачи данных
|
Метод упорядочения опроса может использоваться в действительности для любого устройства. В нашей схеме порты проверяются
(опрашиваются) в некоторой постоянной последовательности с целью
определения наличия данных для пересылки в каком-либо порту. Это
значит, что масса компьютерного времени тратится впустую, если
порты находятся большую часть времени в неактивном состоянии. Более того, сам процессор во времени передачи данных находится в
"занятом" состоянии, и опрос в это время не ведется.
Для того, чтобы понять насколько быстро протекает передача
найденных в результате упорядоченного опроса данных, рассмотрим
предложенную ниже программу, в которой осуществляется ввод данных
через порт центрального процессора CPU в память. Регистр DX содержит адрес этого порта.
read: in ax,dx ; считывание данных - 12 циклов
add di,2 ; следующее место назначения -
4 цикла
mov [di],ax ; сохранение данных - 18 циклов
loop read ; выполнение цикла до полного
; завершения - 17 циклов
; общее количество -51 цикл
для 8088
; общее количество -43 цик-
ла для 8086
|
Для микропроцессора модели 8088, работающего с частотой
4,77 МГц 51 цикл занимает 10,69 микросекунд, что приводит к скорости передачи данных на частоте 93 КГц. Эта скорость передачи
данных означает, что компьютер может считывать данные максимум
93000 раз из порта.
В приводимом ниже куске программы происходит проверка на наличие готовых к пересылке данных в последовательном порту. Для
этого используется функция прерывания "int 14h" со значением AH=3
(требование к состоянию последовательного порта). При возврате,
если бит 0 регистра AH имеет значение "1", это значит, что имеются
готовые данные. Программа обычно ожидает появление готовых данных
и они возвращаются в регистр AL.
wait:
mov ah,3 ; считать значение состояния
; последовательного порта
mov dx,0 ; требуется состояние порта
; COM1
int 14h ; обращение к ПЗУ-DIOS
and ah,1 ; данные готовы?
jz waite ; нет, ожидать, пока данные
; не будут готовы
mov ah,2 ; Функция=считывания данных
mov dx,0 ; считывание из порта COM1
int 14h ; обращение к ПЗУ-BIOS
|
|
|