Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Работа с портами COM и LPT на низком уровне




Архитектура ПК.

Сначала определимся, что же такое работа на высоком и на низком уровне.

Под работой на высоком уровне понимают обращение к порту через ОС и под её контролем.

Дело в том, что в Windows обращение к любому устройству аналогично обращению к одноимённому файлу. То есть, если мы хотим считать данные из порта, например, COM1, то мы должны открыть файл с именем “COM1”. Для этого используются WinAPI функции OpenFile("COM1",,,,,), ReadFile, WriteFile, CreateFile и т.д. Их описание есть в «помощи» любого языка и в соответствующей литературе, в т.ч. и в [1], по этому мы не будем на них подробно останавливаться. Эти функции являются функциями ОС, а не языка, по этому одинаковы во всех языках программирования. Отличается лишь форма их записи.

Под работой на низком уровне понимают непосредственное обращение к регистрам контроллера порта из адресного пространства. АП - это абстрактное понятие, выражающее отправную точку, относительно которой происходит адресация всех устройств компьютера.

Работа на высоком уровне позволяет легко реализовывать протоколы и функции, заложенные разработчиками ОС, но затрудняет реализацию собственных. Работа на низком уровне напротив, открывает широкие возможности для творчества, но реализация более-менее сложного протокола может потребовать знания ассемблера, много времени и, скорее всего, будет нагружать процессор лишними функциями. Кроме того, доступ к некоторым регистрам (а след. и ножкам) порта невозможно (без специальных знаний) получить из адресного пространства и наоборот, некоторые комбинации выводов невозможно «зажечь» с помощью API. Таким образом, работа на высоком и на низком уровне, это не взаимоисключающие понятия, а всего лишь разный подход к управлению портом.

 

Рассмотрим структуру стандартного порта.

 

Рис.1 Структура стандартного порта.

Этот макет наиболее наглядно представляет структуру стандартного порта ввода/вывода, к которым относятся COM и LPT.

Как видно, порт содержит базовый регистр – это первый этап на пути к нужной ножке из АП. Базовый регистр содержит в себе несколько подрегистров (ПР) (называемых ещё «смещением адреса»). В зависимости от их типа, связь их с БР может быть двусторонней (запись и чтение) или односторонней (запись или чтение).

Каждому ПР соответствует какое то количество ножек порта. Т.е. разные ножки порта принадлежат разным подрегистрам и для того, чтобы выставить на них какое-то состояние или считать его с какой нибудь ножки, надо сначала обратится к соотв. ей ПР.

Некоторые ПР вообще не имеют непосредственного отношения к выводам порта, т.к. являются регистрами состояния. Их используют для настройки порта. Например, некоторое количество ножек порта могут работать на передачу/приём. Для того, чтобы установить режим их работы (передача, приём или передача и приём) в соотв. ПР порта записывают определённый код. Ориентируясь на него, контроллер порта устанавливает соотв. режим работы этих ножек.

Каждой ножке в ПР соответствует весовой коэффициент в двоичном коде. Т.е. для того, чтобы выставить “1” на каком то выводе порта, нужно записать в соответствующий ей подрегистр её весовой коэффициент. Напротив, при считывании состояния входной линии порта, порт вернёт не состояние “0” или “1”, а “0” или “N”, где N – весовой коэффициент данной ножки. Возвращение портом “0” означает, что на входе “0”. Возвращение же “N” означает, что на входе “1”.

Указанные действия в языке Паскаль 7.0 выполняет процедура port[]. Формат её записи следующий: port[b+n]:=m; Где:

b – адрес БР порта.

n – номер подрегистра.

m – весовой коэффициент вывода.

Попробуем с её помощью установить “1” на выводе RTS(7) COM порта.

Для этого обратимся к таблице 1:

Сигнал. Контакт разъёма DB-9S. Направление. Подрегистр. Вес.
TxD   Передача. Х Х
RxD   Приём. Х Х
DTR   Передача.    
DSR   Приём.    
RTS   Передача.    
CTS   Приём.    
DCD   Приём.    
RI   Приём.    
GND   Земля. X X

Таблица 1. Назначение контактов COM порта (разъём DB-9S.)

Как следует из таблицы, выводу RTS соответствует 7 контакт стандартного девятиконтактного COM порта. Он относится к 4 подрегистру и имеет в нём вес равный 2.

Адрес базового регистра, это адрес порта. Для COM1 он равен $3F8 (для COM2 - $2F8, для LPT1 - $378, LPT2 - $278).

Таким образом, мы можем записать:

 

program prim1;

uses crt,dos;




Поделиться с друзьями:


Дата добавления: 2017-01-14; Просмотров: 397; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.