Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

КАК УПРАВЛЯТЬ ПОРТОМ ЧЕРЕЗ ПАСКАЛЬ

2.3K
06 октября 2002 года
Hadok
1 / / 06.10.2002
как через паскаль управлять портом, например вводим цифру 2- две ячейки проводят , вводим цифру 3 две другие проводят ток.
Я знаю что существует массив port . но как толком им пользоваться я не знаю
1.3K
07 октября 2002 года
Vid
8 / / 20.06.2000
Цитата:
Originally posted by Hadok
как через паскаль управлять портом, например вводим цифру 2- две ячейки проводят , вводим цифру 3 две другие проводят ток.
Я знаю что существует массив port . но как толком им пользоваться я не знаю



port[x]:=y
portW[x]:=y
portL[x]:=y
в порт x записать y
y:=port[x];
в y записать значение из порта x.

например port[$60] - потр клавиатуры


для com lpt ...:
port[$3f8] - com1
port[$2f8] - com2
port[$378] - lpt1
Как эти числа определить сейчас сказать не могу, но потом да, через недельку премерно:D

5.9K
01 ноября 2003 года
RDS
2 / / 01.11.2003
Цитата:
Originally posted by Hadok
как через паскаль управлять портом, например вводим цифру 2- две ячейки проводят , вводим цифру 3 две другие проводят ток.
Я знаю что существует массив port . но как толком им пользоваться я не знаю



Дело в том, что для любого коммуникационного порта используется несколько адресов. Например для LPT1 используется не 1 адрес, а, по-моему, аж 8. Если хочешь могу дать описание всего процесса управления портом LPT1

5.9K
01 ноября 2003 года
RDS
2 / / 01.11.2003
Работа с параллельным портом (LPT).

Обычно этот порт имеет базовый адрес 378h (LPT1), 278h (LPT2), 3BCh (LPT3). Окончание "h" свидетельствует о шестнадцатиричной системе счисления, так уж принято записывать адреса. Порт занимает три адреса, первый из них называется базовым. Так, для LPT1 диапазон занимаемых им адресов: 378h-37Ah. Базовый адрес служит для посылки/чтения байта на/из линии d0-d7 (пины 2-9 разъёма DB-25). Посылка не инвертируется. Приведу фрагмент программы, посылающей в порт число 170.

{начало программы}
...
begin
Port[$378]:=170
end.
{конец программы}

При запуске её на линиях d0-d7 появится число 170 в двоичном виде, что соответсвует 10101010. Т.е. единичный сигнал будет присутствовать на выводах d1, d3, d5, d7 (обозначени выводов начинается с d0!). Число 170 останется на выводах разъёма до тех пор, пока ты не перешлёш туда же другое число (это может сделать и другая программа) или не выключите компьютер. Заметь, что адрес порта в команде задан в шестнадцатиричном виде, а посылка - в десятиричном. Если вместо команды

Port[$378]:=170;

ты примениш

d:=Port[$378];

где d - некоторая переменная, то переменная примет значение последнего посланного в порт байта или, при переходе в режим приёма, значение байта, поданного на порт внешним устройством.

Базовый+1 адрес (379h для LPT1) служит для чтения состояний принтера, поступающих на входы ACK, -BUSY, PE, SLCT, ERROR. Сигнал -BUSY - инвертированныё, т.е. при подаче на него +5В компьютер будет считывать "0". Для опроса линий используются только старшие 5 битов. "1" в третьем бите соответствует высокому уровню сигнала на входе ERROR. В четвёртом бите она индицирует о высоком уровне сигнала на входе SLCT, в пятом - на входе PE. Единица в шестом бите соответствует высокому уровню сигнала на ACK, а ноль в седьмом - выскому уровню на -BUSY. Если твой компьютер имеет однонаправленный порт передачи данных, то эти пять линий предоставляют единственную возможность в опросе состояний внешних датчиков.

Ниже - пример программы, опрашивающей входные линии порта:
begin
d:=Port[$379]
end.

В переменной d после выполнения программы будет отображено состояние порта. Допустим, переменная вернула значение 126. В двоичном виде оно выглядит как 01111110. Младшие (правые) три бита (нулевой, первый и второй) не используются, и всегда равны 1, 1 и 0. Третий бит - 1, значит на ERROR высокий уровень. Та же ситуация на SLCT, PE, ACK и BUSY.

Базовый+2 адрес (37Ah) служит для записи битов на линии -STROBE, -AUTO FD, INIT, -SLCT IN. Нулевой бит посылает сигнал на -STROBE, первый - на -AUTO FD, второй - на INIT, и четвёртый - на -SLCT IN. Принцип записи - тот же, что и по базовому адресу. Нам же очень интересны следующие биты: Пятый бит служит для разрешения/запрещения прерывания от внешнего устройства. Это полезно, если ты умееш писать обработчики прерываний.

Шестой бит служит для перевода линий d0-d7 в режим приёма!!! Но перед этим необходимо убедиться, что в BIOS в типе порта поставлено SPP/EPP. Вот пример программы, которая считывает бит с линий данных:

begin
Port[$37A]:=32; {32 "зажигает" единицу в шестом бите}
d:=Port[$378];
end.

Если ты собрал устройство, которое через порт принтера опрашивает, допустим, один датчик, подключенный к d0 (pin 2), а остальные линии просто оставил "висеть" на воздухе, то в случае, когда на втором контакте порта будет единица, принимаемый байт будет не "1" а 255, т.к. неподключенные контакты имеют высокий уровень.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог