На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 5 / Передача данных в операционной системе MS-DOS Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Передача данных в операционной системе 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

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz